İşine yarar umarım.
#include <clx.h>
#pragma hdrstop
#include<stdio.h>
#include<conio.h>
#include<math.h>
int M[8][8];
int fil(int,int,int,int,int,int M[][8]);
int at(int,int,int,int,int);
int sah(int,int,int,int,int);
int vezir(int,int,int,int,int);
int kale(int,int,int,int,int,int M[][8]);
int piyon(int,int,int,int,int,int M[][8]);
int sirabelirle(int,int);
main(){
int M[8][8]={{2,3,4,5,6,4,3,2},
{1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{-1,-1,-1,-1,-1,-1,-1,-1},
{-2,-3,-4,-5,-6,-4,-3,-2,}};//santranç taşlarına numara verildi ve tahta üzerindeki başlangıç konumu belirlendi
int a,b,c,x,y,i,j;
int sira;
sira=1;
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");} //ekrana aktarıldı
//printf("kimin sirasi?\nALT TARAF icin --> ""1""\nUST TARAF icin--> ""2"" 'yi tuslayiniz:");
// scanf("%d",&sira); //kimin sırasıysa girilir...
for(;;){
int t=0;
int py,px,pi,pj;
for(px=0;px<8;px++)
for(py=0;py<8;py++)
for(pi=0;pi<8;pi++)
for(pj=0;pj<8;pj++)
{ //bu bölümde sıra size geldiğinde
//yapabileceğiniz maksimum kaç değişik hamle yapabileceğiniz hesaplanır
if(sira==2)
{
//piyon için
if((M[py][px])==1)
{
c=piyon(px,py,pi,pj,sira,M);
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
else if((M[py][px])==3)
{ //at için
c=at(px,py,pi,pj,sira);
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
else if((M[py][px])==5)
{ //vezir için
c=(kale(px,py,pi,pj,sira,M)||fil(px,py,pi,pj,sira,M));
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
else if((M[py][px])==6)
{// şah için
c=sah(px,py,pi,pj,sira);
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
else if((M[py][px])==2)
{//kale için
c=kale(px,py,pi,pj,sira,M);
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
else if((M[py][px])==4)
{ //fil için
c=fil(px,py,pi,pj,sira,M);
if(c==1){
if ( M[pj][pi]<=0)
{t++;}}}
}
else if(sira==1)
{
if((M[py][px])==-1)
{
c=piyon(px,py,pi,pj,sira,M);
if(c==1){// piyon için
if(M[pj][pi]>=0)
{
t++;}}}
else if((M[py][px])==-3)
{ //at için
c=at(px,py,pi,pj,sira);
if(c==1){
if(M[pj][pi]>=0)
{
t++;}}}
else if((M[py][px])==-5)
{ //kale için
c=(kale(px,py,pi,pj,sira,M)||fil(px,py,pi,pj,sira,M));
if(c==1){
if(M[pj][pi]>=0)
{
t++; }}}
else if((M[py][px])==-6)
{//şah için
c=sah(px,py,pi,pj,sira);
if(c==1){
if(M[pj][pi]>=0)
{
t++;}}}
else if((M[py][px])==-2)
{ //kale için
c=kale(px,py,pi,pj,sira,M);
if(c==1){
if(M[pj][pi]>=0)
{
t++;}}}
else if((M[py][px])==-4)
{ //fil için
c=fil(px,py,pi,pj,sira,M);
if(c==1){
if(M[pj][pi]>=0)
{
t++;}}}
}
}
printf("\n\t %d DEGISIK HAMLE YAPABILIRSINIZ\n",t);
printf("\nHANGI KOORDINATTAN HANGI KOORDINATA OYNAMAK ISTIYORSUNUZ? (6 0 5 0)...gibi:\n");
scanf("%d%d%d%d",&y,&x,&j,&i);
/****************************************************************************/
//bu kısım kullanıcının girdiği koordiata göre
//hamle yapılmasını sağlıyor...
//oyun sona erdiğinde ekrana oyunun bittiği yazdırılıyor
/********************************************************************************/
if(abs(M[y][x])==1)
{
c=piyon(x,y,i,j,sira,M);
if(c==1){
if(sira==2)
{ if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}
for(int l=0;l<8;l++){
if (M[j][i]==M[7][l])//burada eger piyon karsıya gecerse vezir ile degişiyor
M[j][i]=5;
sira=1; }}
else if(sira==1)
{ if((M[j][i]==6)) //eğer şah yenildiyse oyun biter ve ekrana yazdırılır
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}
for(int l=0;l<8;l++){
if (M[j][i]==M[0][l])
//burada eger piyon karsıya gecerse vezir ile degişiyor
M[j][i]=-5;sira=2;}}}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}}//yeni oluşan durum ekrana print edildi
else if(abs(M[y][x])==3)
{
c=at(x,y,i,j,sira);
if(c==1){
if(sira==2)
{ if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}sira=1;}
else if(sira==1)
{ if((M[j][i]==6))
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}sira=2;}
}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}}//yeni oluşan durum ekrana print edildi
else if(abs(M[y][x])==5)
{
c=vezir(x,y,i,j,sira);
if(c==1){
if(sira==2)
{if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}sira=1;}
else if(sira==1)
{ if((M[j][i]==6))
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}sira=2;}}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}}
else if(abs(M[y][x])==6)
{
c=sah(x,y,i,j,sira);
if(c==1){
if(sira==2)
{ if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}sira=1; }
else if(sira==1)
{ if((M[j][i]==6))
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}sira=2;}}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}}
else if((abs(M[y][x])==2))
{
c=kale(x,y,i,j,sira,M);
if(c==1){
if(sira==2)
{ if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}sira=1;}
else if(sira==1)
{ if((M[j][i]==6))
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}sira=2;}
}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}} //yeni oluşan durum ekrana print edildi
else if((abs(M[y][x])==4))
{
c=fil(x,y,i,j,sira,M);
if(c==1){
if(sira==2)
{ if((M[j][i]==-6))
{printf("\tOYUN BITTI...UST TARAFTAKI OYUNCU KAZANDI");break; }
if ( M[j][i]<=0)
{M[j][i]=M[y][x];M[y][x]=0;}sira=1;}
else if(sira==1)
{ if((M[j][i]==6))
{printf("\tOYUN BITTI...ALT TARAFTAKI OYUNCU KAZANDI");break; }
if(M[j][i]>=0)
{
M[j][i]=M[y][x];M[y][x]=0;}sira=2;}}
clrscr();
for(a=0;a<8;a++){
for(b=0;b<8;b++)
printf("%d\t",M[a][b]);
printf("\n\n\n\n");}}
}//sonsuz for dongüsünün sonu
getch();
} //main sonu
/**************************************************************************************/
//bu kısımda satrançtaki herbir taş için oyun içinde gidebileceği yerler
//belirleniyor ve kullanıcının girdiği koordinatlara bağlı olarak
//geriye 1 veya 0 döndürülür...geriye döndürülen degere bağlı olarak
//main() de gerekli işlemler yütülür...
/**************************************************************************************/
int at(int x,int y,int i,int j,int sira)
{
int k;
if((j==y+2&&i==x+1)||(j==y+2&&i==x-1)||(j==y+1&&i==x+2)||
(j==y+1&&i==x-2)||(j==y-1&&i==x+2)||(j==y-1&&i==x-2)||
(j==y-2&&i==x+1)||(j==y-2&&i==x-1))
k=1;
else k=0;
return k;
}
int piyon(int x,int y,int i,int j,int sira,int M[][8])
{
int k=0;
if(sira==2){
if(y==1){
if(j==(y+2) && i==x){
if(M[j][i]==0&&M[y+1][x]==0){
k = 1;
}
}
}
if(j==y+1 && i==x)
{
if(M[j][i]==0){
k = 1;
}
}
else if(j==(y+1) && (i==(x+1)||i==(x-1)))
{
if(M[j][i]<0){
k = 1;
}
}
}
else if(sira==1)
{
if(y==6)
{
if( j==(y-2) && i==x)
{
if(M[j][i]==0&&M[y-1][x]==0){
k = 1;
}
}
}
if( j==(y-1) && i==x)
{
if(M[j][i]==0){
k = 1;
}
}
else if(j==(y-1) && (i==(x-1)||i==(x+1)))
{
if(M[j][i]>0){
k = 1;
}
}
}
return k;
}
int kale(int x,int y,int i,int j,int turn,int M[][8])
{
int k=1;int n;
if(j==y)
{
for(n=x+1;n<i;n++)//sağa
{
if(M[j][n]!=0)
{
k = 0;
break;
}
}
for(n=x-1;n>i;n--)
{
if(M[j][n]!=0)
{
k = 0;
break;
}
}
}
else if(i==x)
{
for(int n=y+1;n<j;n++)//yukarı
{
if(M[n][i]!=0)
{
k = 0;
break;
}
}
for(n=y-1;n>j;n--)//aşağı
{
if(M[n][i]!=0)
{
k = 0;
break;
}
}
}
else
{
k=0;
}
return k;
}
int sah(int x,int y,int i,int j,int sira)
{ int k;
if((j==y+1&&i==x)||(j==y-1&&i==x)||(j==y+1&&i==x+1)||
(j==y+1&&i==x-1)||(j==y-1&&i==x+1)||(j==y-1&&i==x-1)||
(j==y&&i==x+1)||(j==y&&i==x-1))
k=1;
else
k=0;
return k;}
int fil (int x,int y,int i,int j,int sira,int M[][8])
{
int k=1,n;
if(abs(i-x)!=abs(j-y))
{
k=0;
}
if((x<i)&&(y<j))
{
for(n=1;(n+x)<i;n++)
{
if(M[y+n][x+n]!=0)
k=0;
}
}
else if((x>i)&&(y>j))
{
for(n=1;(x-n)>i;n++)
{
if(M[y-n][x-n]!=0)
k=0;
}
}
else if((x>i)&&(y<j))
{
for(n=1;(x-n)>i;n++)
{
if(M[y+n][x-n]!=0)
k=0;
}
}
else if((x<i)&&(y>j))
{
for(n=1;(y-n)>j;n++)
{
if(M[y-n][x+n]!=0)
k=0;
}
}
return k;
}
int vezir(int x,int y,int i,int j,int sira)
{
if(x==i||y==j) //ise kale fonksiyonunu koş
{
kale(x,y,i,j,sira,M);}
else if(abs(i-x)==abs(y-j))//ise fil fonksiyonunu koş
{
fil(x,y,i,j,sira,M);}}