//普通版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 8
void display(char (* p)[N])
{
system("cls");
int i,j;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
printf("%c\t",p[i][j]);
}
printf("\n\n\n");
}
}
void downchess(char (* p)[N])
{
char black='#';
char white='@';
char h;
int i,j,num=0;
do
{
if(num%2==0)
{
h=black;
}
else
{
h=white;
}
printf("%c方请输入落子坐标的行和列:",h);
scanf("%d%d",&i,&j);
if (p[i][j]!='.')continue;
p[i][j]=h;
display(p);
// if(judje(p,i,j)==1)
// {
//
// break;
// }
num++;
}
while(judje(p,i,j)==0);
printf("%c方胜利\n",h);
}
int judje(char (* p)[N],int a,int b)
{
int sum=0;
int j=0,i=1;
//判断行向
for(;;)
{
if(p[a][b-j]==p[a][b])
{
sum++;
j++;
}
else if(p[a][b+i]==p[a][b])
{
sum++;
i++;
}
else
break;
}
if(sum==5)
return 1;
//判断纵向
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b]==p[a][b])
{
sum++;
j++;
}
else
if(p[a+i][b]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
//判断右对角
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b+j]==p[a][b])
{
sum++;
j++;
}
else
if(p[a+i][b-i]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
sum=0;j=0;i=1;
// 判断左对角
for(;;)
{
if(p[a+j][b+j]==p[a][b])
{
sum++;
j++;
}
else
if(p[a-i][b-i]==p[a][b])
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
else return 0;
}
int main()
{
int i,j;
char chess[N][N];
int n=48,k=49;
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
if(i==0)
{
chess[i][j]=n;
n++;
}
else if(j==0)
{
chess[i][j]=k;
k++;
}
else
chess[i][j]='.';
}
}
display(chess);
downchess(chess);
return 0;
}
//可悔棋版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 8
void display(int (* p)[N])
{
system("cls");
int i,j;
char qipan[N][N];
char black='#';
char white='@';
char null='.';
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
if(p[i][j]%2==0)
qipan[i][j]=black;
else if(p[i][j]%2==1)
qipan[i][j]=white;
else qipan[i][j]=null;
}
}
for(i=-1; i<N; i++)
{
printf("%d\t",i);
} printf("\n\n\n");
for(i=0; i<N; i++)
{
printf("%d\t",i);
for(j=0; j<N; j++)
{
printf("%c\t",qipan[i][j]);
}
printf("\n\n\n");
}
}
void downchess(int (* p)[N])
{
char h;
char black='#';
char white='@';
int i,j,num=0;
do
{
if(num%2==0)
{
h=black;
}
else
{
h=white;
}
printf("%c方请输入落子坐标的行和列:",h);
scanf("%d%d",&i,&j);
if (p[i][j]!=-1)continue;
p[i][j]=num;
display(p);
int choose;
do
{
printf("悔棋请按2,继续请按1:");
scanf("%d",&choose);
switch(choose)
{
case 1: break;
case 2:
huiqi(p,num);
num--;
display(p);
default : break;
}
}while(choose!=1);
num++;
}
while(judje(p,i,j,num-1)==0);
printf("%c方胜利\n",h);
}
void huiqi(int (* p)[N],int num)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(p[i][j]==num)
p[i][j]=-1;
}
}
}
int judje(int (* p)[N],int a,int b,int num)
{
int sum=0;
int j=0,i=1;
//判断行向
for(;;)
{
if(p[a][b-j]%2==num%2&&p[a][b-j]!=-1)
{
sum++;
j++;
}
else if(p[a][b+i]%2==num%2&&p[a][b+i]!=-1)
{
sum++;
i++;
}
else
break;
}
if(sum==5)
return 1;
//判断纵向
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b]%2==num%2&&p[a-j][b]!=-1)
{
sum++;
j++;
}
else
if(p[a+i][b]%2==p[a][b]%2&&p[a+i][b]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
//判断右对角
sum=0;j=0;i=1;
for(;;)
{
if(p[a-j][b+j]%2==num%2&&p[a-j][b+j]!=-1)
{
sum++;
j++;
}
else
if(p[a+i][b-i]%2==num%2&&p[a+i][b-i]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
sum=0;j=0;i=1;
// 判断左对角
for(;;)
{
if(p[a+j][b+j]%2==num%2&&p[a+j][b+j]!=-1)
{
sum++;
j++;
}
else
if(p[a-i][b-i]%2==num%2&&p[a-i][b-i]!=-1)
{
sum++;
i++;
}
else break;
}
if(sum==5)
return 1;
else return 0;
}
int main()
{
int i,j;
int chess[N][N];
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
chess[i][j]=-1;
}
}
display(chess);
downchess(chess);
return 0;
}