关于五子棋

来源:互联网 发布:八旗军战斗力 知乎 编辑:程序博客网 时间:2024/05/16 23:47

 (关于五子棋)         第一次用 c编写小游戏,可能还有很多不足,但是心里满满的成就感。

1.游戏的测试

<pre class="objc" name="code">void menu(){printf("   1.play    ");printf("   0.exit    ");}void game(){char ret;char board[ROWS][COLS];init_board(board,ROWS,COLS);display_board(board,ROWS,COLS);while(1){   man_play_chess(board,ROWS,COLS);   if((ret = judge_win(board,ROWS,COLS))!=' ')       break;   display_board(board,ROWS,COLS);   pc_play_chess(board,ROWS,COLS);   if((ret = judge_win(board,ROWS,COLS))!=' ')       break;   display_board(board,ROWS,COLS);}   display_board(board,ROWS,COLS);   if(ret == 'x')   printf("恭喜,你赢了");    else if(ret == 'c')   printf("电脑赢了哈哈");   else if(ret == 'q')   printf("平局呵呵");}int main(){int input = 0;srand((unsigned)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case 0:break;case 1:game();break;default:printf("请重新选择:");}}while(input);}
<span style="font-size:18px;"> 2.初始化并显示棋盘(棋盘做的不太好看<img alt="害羞" )</span>
 
void init_board(char board[ROWS][COLS],int row,int col){memset(board,' ',col*row*sizeof(char));}void display_board(char board[ROWS][COLS],int row,int col){int i = 0;for(i=0; i<row; i++){printf(" %c | %c | %c | %c | %c \n",board[i][0],board[i][1],board[i][2],board[i][3],board[i][4]);if(i != row)printf("___|___|___|___|___|\n");}
}
<span style="font-size:18px;"> 3.玩家走棋</span>
void  man_play_chess(char board[ROWS][COLS],int row,int col){  int i = 0;  int j = 0;  while(1){  printf("请输入落子的位置:");  scanf("%d %d",&i,&j);  if(i>=1&&j>=1&&i<=row&&j<=col&&board[i-1][j-1]==' ')  {  board[i-1][j-1] = 'x';  break;  }  else  printf("下标有误");}}

4.电脑走棋
 
void pc_play_chess(char board[ROWS][COLS],int row,int col){while(1){    int a = rand()%row;     int b = rand()%col;if(board[a][b] == ' '){  board[a][b] = 'c';  break;}}}

5.判断棋盘是否已满
int is_full(char board[ROWS][COLS],int row,int col){ int i = 0; int j = 0; for(i=0; i<row; i++) {     for(j=0; j<col; j++)     {      if(board[i][j] ==' ')       return 0;     } } return 1;
}
<span style="font-size:18px;">6.判断输赢(这个判断函数写的过于繁琐,希望以后有机会有能力再优化一下</span>
 
int judge_win(char board[ROWS][COLS],int row,int col){int i = 0;int j = 0;int count = 0;int count1 = 0;int count2 = 0;int count3 = 0;int count4 = 0;for(i=0; i<row; i++){count = 0;for(j=0; j<col; j++){if(board[i][j] == 'x')count++;}if(count == row)           return 'x';}for(i=0; i<row; i++){count = 0;for(j=0; j<col; j++){if(board[i][j] == 'c')count++;}if(count == row)return 'c';}for(j=0; j<col; j++){count = 0;for(i=0; i<row; i++){if(board[i][j] == 'x')count++;}if(count == col)return 'x';}for(j=0; j<col; j++){count = 0;for(i=0; i<row; i++)    {if(board[i][j] == 'c')count++;}if(count == col)return 'c';}for(i=0; i<row; i++){if(board[i][i] == 'x')count1++;if(count1 == row)return 'x';}for(i=0; i<row; i++){if(board[i][i] == 'c')count2++;if(count2 == row)return 'c';}for(i=0; i<row; i++){if(board[i][row-1-i] == 'c')count3++;if(count3 == row)return 'c';}for(i=0; i<row; i++){if(board[i][row-1-i] == 'x')count4++;if(count4 == row)return 'x';}if(is_full(board, ROWS,COLS) == 1)return 'q';return ' ';}


 

 

0 0
原创粉丝点击