三子棋游戏

目录

一、创建并初始化棋盘

二、打印棋盘信息

三、实现玩家下棋的功能

四、实现电脑下棋的功能

五、实现判断输赢功能

六、各个功能的具体使用


首先创建好主函数文件test.c;包含游戏主要功能的源文件game.c;用来引用各种头文件,声明外部函数的头文件game.h。

一、创建并初始化棋盘

用户在下棋的时候需要输入坐标位置,为了更好地处理用户输入的内容,我们选择用二维数组来存放棋盘信息。同时,因为棋盘的大小可能会根据后续需求的变化有所变动,我们最好通过define定义的常量标识符来创建数组。以上前置工作完成后,在game.c中定义initBoard函数,通过该函数将二维数组的各个元素赋值为空格字符。

game.h头文件内容

test.c主函数文件内容(只展示game函数的内容)

game.c游戏功能源文件内容

二、打印棋盘信息

初始化棋盘后,为了让用户在游戏时观察到棋盘信息,我们需要对棋盘进行打印。我们在game.c文件中定义printBoard函数来实现打印棋盘的功能。在游戏开始、用户或电脑每次下棋后都需要对棋盘进行打印,因此printBoard函数需要三个参数:二维数组首元素地址、棋盘的行数和列数。其中,三子棋棋盘的每一行由三个棋子和一条分割线构成(最后一行和每一行的最后一列没有分割线)

定义完成后别忘了game.h头文件中声明:extern void printBoard(char board[ROW][COL], int, int);

三、实现玩家下棋的功能

玩家下棋实质上是修改二维数组某个元素的内容,由于用户不知道数组的下标是从0开始的,所以我们自己需要对用户输入的内容进行处理。其次,玩家在棋盘中落子要满足两个条件:1.不能超出棋盘范围,2.该坐标没有被占用。玩家输入的坐标不满足这两个条件时要提示他们重新输入坐标。下面我们在game.c文件中定义playerMove函数来实现玩家下棋的功能。

定义完成后别忘了game.h头文件中声明: extern void playerMove(char board[ROW][COL], int, int);

四、实现电脑下棋的功能

首先需要随机生成两个0~2的整数,将这两个数作为二维数组的下标去访问数组对应位置的元素,如果该元素为空格字符(坐标没有被占用),则让电脑在该坐标落子;如果该元素不是空格字符,则重新生成随机数再进行判断,直到坐标没有被占用。下面我们在game.c中定义computerMove函数来实现电脑下棋的功能。(注意:使用rand函数之前需要在main函数中利用时间戳和srand函数生成随机起点,来确保每次运行程序生成不同的随机数)

定义完成后别忘了game.h头文件中声明: extern void computerMove(char board[ROW][COL], int, int);

五、实现判断输赢功能

三子棋游戏需要从第三回合开始判断输赢,当出现玩家赢、电脑赢以及平局三种情况时游戏结束,否则游戏继续。玩家或电脑一方胜出实质上是二维数组某一行、某一列或斜线上的元素相同且不为空格,平局实质上是没有一方胜出且二维数组的空间已被占满。下面我们在game.c中定义isWin函数来实现判断输赢的功能。因为在上面实现玩家和电脑下棋的功能时,我们分别使用'O'和'X'代表玩家和电脑的棋子,所以isWin函数返回'O'代表玩家胜;返回'X'代表电脑胜;返回'Q'代表平局;返回'C'代表游戏继续。

可以看出,我们在判断每一行、每一列以及斜线上是否存在三子相同的情况时,没有将行或列的下标写死,这样在未来需求发生变化时(比如棋盘扩大),代码也能够正常运行。我们在设计代码时要考虑到未来需求变动的情况,这样代码的适用性和可维护性才会更高。

定义完成后别忘了game.h头文件中声明: extern char isWin (char board[ROW][COL], int, int);

六、各个功能的具体使用

实现了判断输赢的功能,三子棋游戏的功能就基本设计完成了,由于整个工程的代码过于繁琐,加上game.c文件的代码内容在上面已经基本展示完毕。为了方便大家了解各个功能的具体使用,下面我只展示test.c文件中game函数的内容。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值