实现对纸上已经写完的棋盘进行判断
如果后续有发现错误会进行更改
#include<stdio.h>
int main(void){
printf("请输入你的棋盘,中间用空格隔开,三个换行(用1替代X。用0替代O,用其他数字来替代没有下的格子)\n");
//定义变量
const int size=3;
int board[size][size];
int i,j; //记录位置
int input; //记录棋盘
int L_numofO=0,L_numofX=0; //line
int R_numofO=0,R_numofX=0; //row
int B_numofO=0,B_numofX=0; //bias
int result=-1; //-1输出平局,1输出Xwin,0输出Owin
//输入棋盘
for (i=0;i<size;i++){
for(j=0;j<size;j++){
scanf("%d",&input);
board[i][j]=input;
}
}
//输出棋盘
printf("这是你的棋盘\n");
for (i=0;i<size;i++){
for(j=0;j<size;j++){
if(board[i][j]==1){
printf("X\t");
}else if(board[i][j]==0){
printf("O\t");
}else{
printf("&&\t");
}
}
printf("\n\n\n");
}
int turn=1; //循环总开关
while(1){
//判断行line和列row
for(i=0;i<size;i++){
//printf("\n检查row and line*\n");
for(j=0;j<size;j++){ //check out every lines and rows
if(board[i][j]==1){
L_numofX++;
}else if(board[i][j]==0){
L_numofO++;
}
if(board[j][i]==1){
R_numofX++;
}else if(board[j][i]==0){
R_numofO++;
}
}
if(R_numofX==size||L_numofX==size){
turn=0;
result=1;
break;
}else if(L_numofO==size||R_numofO==size){
turn=0;
result=0;
break;
}
if(L_numofX!=size&&L_numofO!=size){ //每一轮不满足都back to 0
L_numofO=L_numofX=0;
}
if(R_numofO!=size&&R_numofX!=size){
R_numofO=R_numofX=0;
}
}
if(turn==0){
break; //break while
}
//check out bias
for(i=0;i<size;i++){
if(board[i][size-1-i]==1){
B_numofX++;
}else if(board[i][size-1-i]==0){
B_numofO++;
}
}
if(B_numofX==3){
result=1;
turn=0;
}else if(B_numofO==3){
result=0;
turn=0;
}
if(turn==0){
break; //break while
}
if(B_numofO!=size&&B_numofX!=size){
B_numofX=B_numofO=0;
}
for(i=0;i<size;i++){
if(board[i][i]==1){
B_numofX++;
}else if(board[i][i]==0){
B_numofO++;
}
}
if(B_numofO==3){
result=0;
turn=0;
}else if(B_numofX==3){
result=1;
turn=0;
}else{
turn=0;
}
if(turn==0){
break; //break while
}
}
if(result==1){ //result
printf("\nPlayer X win!!");
}else if(result==0){
printf("\nPlayer O win!!");
}else{
printf("No one win!");
}
//system("pause");
}