3)开始游戏,玩家下棋和电脑下棋
玩家和电脑通过棋盘的坐标来实现对战,这里注意两个点:
- 坐标的合法性
- 坐标是否被占用
玩家下棋代码如下:
voidpalyer_move(charboard[ROW][COL], introw, intcol) { intx=0; inty=0; printf("玩家下棋:\n"); printf("请输入要下棋的坐标:"); scanf("%d %d", &x, &y); //坐标的合法性//坐标是否被占用while(1){ if (x>=1&&x<=row&&y>=1&&y<=col) { if (board[x-1][y-1] ==' ') { board[x-1][y-1] ='*'; break; } else { printf("该坐标被占用,请重新输入:\n"); } } else { printf("坐标非法,重新输入:\n"); } } }
接下来就是电脑下棋,电脑下棋和玩家不一样,玩家可以控制棋子的位置,而电脑不行,所以这里我们需要一个引用一个函数来控制电脑落棋的随机性,这里我们要使用一个库函数,srand函数,用时间戳作为返回值来确保电脑下棋的随机性,关于srand函数大家可以去网上找找资料https://cplusplus.com/reference/cstdlib/srand/?kw=srand,有了这样一个函数,我们就能很好的控制电脑下棋的随机性了,当然,在使用过程中,不要忘记加头文件------>
电脑下棋代码如下:
computer_move(charboard[ROW][COL], introw, intcol) { printf("电脑下棋:\n"); while(1) { intx=rand() %row; //取模运算防止数组越界,生成0~row-1的数字inty=rand() %col; if (board[x][y] ==' ') { board[x][y] ='#'; break; } } }
到这里,玩家和电脑下棋就搞定了!!!
4)判断输赢
判断输赢可以分成4种情况:
- 玩家赢 ----------------------用*表示
- 电脑赢 ----------------------用#表示
- 平局 -----------------------用C表示
- 游戏继续 --------------------用Q表示
game.c下代码块如下:
//判断棋盘是否已经占满staticintis_full(charboard[ROW][COL], introw, intcol) { inti=0; for (i=0; i<row; i++) { intj=0; for (j=0; j<col; j++) { if (' '==board[i][j]) { return0; } } } return1; } charis_win(charboard[ROW][COL], introw, intcol) { inti=0; for (i=0; i<row; i++) { if (board[i][0] ==board[i][1] &&board[i][1] ==board[i][2] &&board[i][0] !=' ') { returnboard[i][0]; } } for (i=0; i<col; i++) { if (board[0][i] ==board[1][i] &&board[1][i] ==board[2][i] &&board[0][i] !=' ') { returnboard[0][i]; } } if (board[0][0] ==board[1][1] &&board[1][1] ==board[2][2] &&board[1][1] !=' ') { returnboard[1][1]; } if (board[0][2] ==board[1][1] &&board[1][1] ==board[2][0] &&board[1][1] !=' ') { returnboard[1][1]; } //判断平局if (is_full(board, row, col) ==1) { return'Q'; } //继续return'C'; }
到这里游戏就可以正常的运行起来了
三.总结
此文章适合有一定C代码基础的童鞋们,小编在学习的时候也是研究了好久才弄明白了,所以第一次看希望大家耐性看完,这里有个视频供大家一起学习,方便理解,觉得有帮助还请老铁们三连!!蟹蟹!!!