- 分析
玩法分析:将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。 - 思路
游戏流程:游戏初始化- 棋盘初始化
- 棋盘由二位数组模拟,且初始化数组
- 棋盘打印
- 玩家下棋
- 判断下棋坐标是否越界
- 判断下棋坐标是否已经有子
- 如果满足上方条件则在此坐标插入棋子,否则重新输入
- 电脑下棋
- 生成随机坐标数 注意需先随机种子
- 判断下棋坐标是否有子
- 如果满足上方条件则在此坐标插入棋子,否则重新随机坐标
- 判断胜者
1.判断每一行,如果每一行的棋子都为一个玩家,且其棋子不为空,则这个玩家胜出
2.判断每一列,如果每一列的棋子都为一个玩家,且其棋子不为空,则这个玩家胜出
3.判断对角线,如果对角线的棋子都为一个玩家,且其棋子不为空,则这个玩家胜出
4.如果棋盘下满了,则为和棋
- 棋盘初始化
- 实现
- 定义常量,以及二维数组
#define ROW 3 #define COL 3 char chessboard[ROW][COL];
- 数组初始化
void Init() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { chessboard[row][col] = ' '; //初始化每个元素都为空格 } } }
- 打印棋盘
void Print() { for (int i = 0; i < ROW; i++) { printf("| %c | %c | %c |\n", chessboard[i][0], chessboard[i][1], chessboard[i][2]); printf("|...|...|...|\n"); } }
- 玩家下棋
void PlayerMove() { int x, y; while (true) { printf("请输入你下棋的坐标!\n"); scanf("%d %d", &x, &y); if (x > ROW - 1 && x < 0 && y > COL - 1 && y < 0) { printf("输入错误!"); continue; } if (chessboard[x][y] == ' ') { chessboard[x][y] = 'O'; break; } else { printf("已经被下过了!"); continue; } } }
- 电脑下棋
void AiMove() { srand((unsigned int)time(0)); //随机种子 while (true) { int x = rand() % 3; int y = rand() % 3; if (chessboard[x][y] == ' ') { chessboard[x][y] = 'X'; break; } else { continue; } } }
- 棋盘满了判断
int isFull() { for (int row = 0; row < ROW; row++) { for (int col = 0; col < COL; col++) { if (chessboard[row][col] == ' ') { return 0; } } } return 1; }
- 判断胜者
char CheckWinner() { // 行 for (int row = 0; row < ROW; row++) { if (chessboard[row][0] == chessboard[row][1] && chessboard[row][1] == chessboard[row][2] && chessboard[row][0] != ' ') { return chessboard[row][0]; } } // 列 for (int col = 0; col < COL; col++) { if (chessboard[0][col] == chessboard[1][col] && chessboard[1][col] == chessboard[2][col] && chessboard[0][col] != ' ') { return chessboard[0][col]; } } // 对角线 if (chessboard[0][0] == chessboard[1][1] && chessboard[1][1] == chessboard[2][2] && chessboard[0][0] != ' ') { return chessboard[0][0]; } else if (chessboard[0][2] == chessboard[1][1] && chessboard[1][1] == chessboard[2][0] && chessboard[0][0] != ' ') { return chessboard[0][2]; } else if (isFull()) { return 'p'; } } 8. 游戏初始化 ``` void gameInit() { char winner; Init(); Print(); while (true) { PlayerMove(); winner = CheckWinner(); AiMove(); Print(); winner = CheckWinner(); if (winner == 'O') { printf("恭喜你!\n"); break; } else if (winner == 'X') { printf("恭喜电脑!\n"); break; } else if (winner == 'p') { printf("势均力敌的对手!"); break; } continue; } }
- 定义常量,以及二维数组
写在最后
最近推出了公众号 coding趣谈,一位在读学生的技术提升之路,为您提供一系列我在学习路上的笔记,经验,以及感悟。往与君共勉,共同进步! 欢迎大家来关注哦!