[C] 纯文本查看 复制代码
#include <stdio.h>
int main(){
int x,y;
int xy[3][3]={
{8,8,8},
{8,8,8},
{8,8,8},
};
int i=2;
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
while(i==2){
const int SIZE = 3;
int t,j;
int hz,hf,lz,lf,zdjz,zdjf,fdjz,fdjf; //定义行,列,对角线的正反方计数变量
hz=hf=lz=lf=zdjz=zdjf=fdjz=fdjf=0;//初始化变量
//输入
do{
printf("正方,请在8的区域输入:");
scanf("%d,%d", &x, &y);
} while(xy[x-1][y-1]!=8 || x>3 || x<1 || y>3 || y<1 );//检查
xy[x-1][y-1]=1; //1为正方
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
//循环判断
for(t=0; t<SIZE; t++){
hz=lz=0;
for(j=0; j<SIZE; j++){
//检查行
if(xy[t][j]==1 && xy[t][j]!=8){
hz++;
}
if(hz==3){
i=1;
goto out;
}
//检查列
if(xy[j][t]==1 && xy[j][t]!=8){
lz++;
}
if(lz==3){
i=1;
goto out;
}
}
//检查正对角线
if(xy[t][t]==1 && xy[t][t]!=8){
zdjz++;
}
if(zdjz==3){
i=1;
goto out;
}
//检查反对角线
if(xy[t][SIZE-t-1]==1 && xy[t][SIZE-t-1]!=8){
fdjz++;
}
if(fdjz==3){
i=1;
goto out;
}
}
// printf("hz:%d,lz:%d,zdjz:%d,fdjz:%d\n\n",hz,lz,zdjz,fdjz);
do{
printf("反方,请在8的区域输入:");
scanf("%d,%d", &x, &y);
} while(xy[x-1][y-1]!=8 || x>3 || x<1 || y>3 || y<1 );//检查
xy[x-1][y-1]=0;//0为反方
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
//循环判断
for(t=0; t<SIZE; t++){
hf=lf=0;
for(j=0; j<SIZE; j++){
//检查行
if(xy[t][j]==0 && xy[t][j]!=8){
hf++;
}
if(hf==3){
i=0;
goto out;
}
//检查列
if(xy[j][t]==0 && xy[j][t]!=8){
lf++;
}
if(lf==3){
i=0;
goto out;
}
}
//检查正对角线
if(xy[t][t]==0 && xy[t][t]!=8){
zdjf++;
}
if(zdjf==3){
i=0;
goto out;
}
//检查反对角线
if(xy[t][SIZE-t-1]==0 && xy[t][SIZE-t-1]!=8){
fdjf++;
}
if(fdjf==3){
i=0;
goto out;
}
}
// printf("hf:%d,lf:%d,zdjf:%d,fdjf:%d\n\n",hf,lf,zdjf,fdjf);
}
out:
if(i==1){
printf("正方胜利");
}else{
printf("反方胜利");
}
return 0;
}