void init_board(char board[ROWS][CLOWS],int row,int clow);//初始化棋盘
void display(char board[ROWS][CLOWS],int row,int clow);//显示棋盘 void player_move(char board[ROWS][CLOWS],int row,int clow); void computer_move(char board[ROWS][CLOWS],int row,int clow); char is_win(char board[ROWS][CLOWS],int row,int clow);#endif
void init_board(char board[ROWS][CLOWS],int row,int clow) { memset(board,' ',ROWS*CLOWS*sizeof(board[0][0])); } void display(char board[ROWS][CLOWS],int row,int clow) { int i=0; for(i=0;i<row;i++) { printf("__%c__|__%c__|__%c__\n",board[i][0],board[i][1],board[i][2]); if(i<row-1) printf(" | | \n"); } } void player_move(char board[ROWS][CLOWS],int row,int clow) { int x=0,y=0; while(1) { printf("请输入坐标->"); scanf("%d%d",&x,&y); if((x>0&&x<=row)&&(y>0&&y<=clow)) { if(board[x-1][y-1]==' ') { board[x-1][y-1]='X'; break; } else { printf("此坐标已被占用\n"); } } else printf("输入的坐标有误\n"); } } static int is_full(char board[ROWS][CLOWS],int row,int clow)//判断棋盘是否下满 { int i=0,j=0; for(i=0;i<row;i++) { for(j=0;j<clow;j++) { if(board[i][j]==' ') return 0; } } return 1; } char is_win(char board[ROWS][CLOWS],int row,int clow) { int i=0; for(i=0;i<row;i++) { if((board[i][0]==board[i][1])&&(board[i][1]==board[i][2])&&board[i][0]!=' ') return board[i][0]; } for(i=0;i<clow;i++) { if((board[0][i]==board[1][i])&&(board[1][i]==board[2][i])&&board[0][i]!=' ') return board[i][0]; } if((board[0][0]==board[1][1])&&(board[1][1]==board[2][2])&&(board[1][1]!=' ')) { return board[0][0]; } else if((board[0][2]==board[1][1])&&(board[1][1]==board[2][0])&&(board[1][1]!=' ')) { return board[0][2]; } if(is_full(board,ROWS,CLOWS)) return 'q'; if(is_full(board,ROWS,CLOWS)==0) return ' '; } void computer_move(char board[ROWS][CLOWS],int row,int clow) { printf("电脑下\n"); while(1) { int x=rand()%3; int y=rand()%3; if(board[x][y]==' ') { board[x][y]='$'; break; } } } void game() { char ret=0; char board[ROWS][CLOWS]={0}; init_board(board,ROWS,CLOWS); display(board,ROWS,CLOWS); while(1) { player_move(board,ROWS,CLOWS); if((ret=is_win(board,ROWS,CLOWS))!=' ') break; display(board,ROWS,CLOWS); computer_move(board,ROWS,CLOWS); if((ret=is_win(board,ROWS,CLOWS))!=' ') break; display(board,ROWS,CLOWS); } if(ret=='X') { printf("玩家赢!\n"); display(board,ROWS,CLOWS); } else if(ret=='$') { printf("电脑赢!\n"); display(board,ROWS,CLOWS); } else { printf("平局!\n"); display(board,ROWS,CLOWS);//打印棋盘 } }
void menu()//菜单 { printf("*****************************************\n"); printf("*****1.PLAY 0.EXIT**********************\n"); printf("*****************************************\n"); } void test() { int input=0;//选择 srand((unsigned int)time(NULL)); do { menu(); printf("请选择: "); scanf("%d",&input); switch(input) { case 1: game(); break; case 0: break; default : printf("请输入1或0\n"); } } while(input); } int main() { test();//测试函数 return 0; }
