三子棋游戏

xiaoxiao2021-02-28  37

#ifndef __GAME_H_//防止文件被多次调用 #define __GAME_H_ #define ROWS  3 #define CLOWS 3//棋盘的纵坐标 #include<stdlib.h> #include<stdio.h> #include<time.h> #include<string.h> void game();

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; }

转载请注明原文地址: https://www.6miu.com/read-81789.html

最新回复(0)