玩家走的棋子会丢失不记录,一模一样的代码,电脑走的却不会丢失,我也调试过了,就是在调用完玩家走的函数之后,调用电脑走的函数,玩家下的棋子就会被清空初始化了,而且奇怪的是,玩家走的棋子每次都会被清空,最后棋盘上等电脑的子符合胜利条件之后,会判断电脑胜利。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void boardinit(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++)
for(int j=0; j<COL; j++)
arr[i][j]=' ';
}
void print(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
printf(" %c ",arr[i][j]);
if(j<COL-1)
printf("|");
}
printf("\n");
for(int k=0; k<COL; k++) {
printf("---");
if(k<COL-1)
printf("|");
}
printf("\n");
}
}
void playermove(char arr[ROW][COL]) {
int x=0;
int y=0;
printf("please enter the coordinate\n");
here:
scanf("%d%d",&x,&y);
if((x>ROW||x<1)||(y>COL||y<1)) {
printf("wrong value,please enter again\n");
goto here;
}
if(arr[x-1][y-1]==' ') {
arr[x-1][y-1]='*';
print(arr);
}
else {
printf("you can not move there,please enter again\n");
goto here;
}
}
void pcmove(char arr[ROW][COL]) {
int x=0;
int y=0;
srand(time(NULL));
printf("computer move\n");
here:
x=rand()%3;
y=rand()%3;
if(arr[x][y]==' ') {
arr[x][y]='#';
print(arr);
}
else {
goto here;
}
}
int isfull(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
for(int j=0; j<COL; j++) {
if(arr[i][j]=' ')
return 0;
}
}
return 1;
}
char iswin(char arr[ROW][COL]) {
for(int i=0; i<ROW; i++) {
if(arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][0]!=' ')
return arr[i][0];
}
for(int i=0; i<COL; i++) {
if(arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i]&&arr[0][i]!=' ')
return arr[0][i];
}
if(arr[0][0]==arr[1][1]&&arr[1][1]==arr[2][2]&&arr[0][0]!=' ') {
return arr[0][0];
}
if(arr[2][0]==arr[1][1]&&arr[1][1]==arr[0][2]&&arr[2][0]!=' ') {
return arr[2][0];
}
if(isfull(arr)==0)
return 'c';
else
return 'q';
}
int main() {
char board[ROW][COL];
boardinit(board);
print(board);
while(1) {
playermove(board);
if(iswin(board)!='c') {
if(iswin(board)=='*') {
printf("you are the winner");
break;
}
if(iswin(board)=='#') {
printf("computer are the winner");
break;
}
if(iswin(board)=='q') {
printf("no one is winning");
break;
}
}
pcmove(board);
if(iswin(board)!='c') {
if(iswin(board)=='*') {
printf("you are the winner");
break;
}
if(iswin(board)=='#') {
printf("computer are the winner");
break;
}
if(iswin(board)=='q') {
printf("no one is winning");
break;
}
}
}
return 0;
}