目录
1. 三子棋
1.1 模块介绍
test.c :测试游戏的逻辑
game.h : 关于游戏相关的函数声明、符号声明、头文件的包含
game.c : 游戏相关函数的实现
1.2 游戏框架
使用do while循环语句,就可以实现一开始就执行程序而后再进行判断,符合游戏实际需求;同时使用switch语句根据键入的值判断需要进行的下一步。
1.3 三子棋棋盘逻辑
1.3.1 游戏框架
首先创建 game() 函数,函数中搭建三子棋中所需要的整个逻辑。
注:定义宏时,后面不用加;而且顺序应该要与变量处保持一致
1.3.2 棋盘的初始化
所谓棋盘实际上就是一个初始化后的 n*n 二维数组,由于用字符 '#' '*' 来代表棋子,所以数组的类型应为char型。此外,为了不仅仅局限于定值大小的棋盘,还需要定义宏来方便修改棋盘大小。
声明放在头文件 game.h
实现放在game.c(使用时要包含game.h )
1.3.3 打印棋盘布局
打印棋盘时,应该以最小单元为单位来打印,如果按整行整列打印会导致更换ROW 和COL后打印的棋盘不正确,所以我们要找一种更为通用的办法。
这里我们以 “ | ” 和 “ ---| ”为最小单元,这样子就可以更方便打印不同大小的棋盘。
game.h:
game.c:
至此,运行检查一下结果:
逻辑正确,检查无误后进行下一环节:
1.3.4 玩家下棋
重点在于考虑玩家下棋的坐标是否合法?坐标处是否已经有棋子?此外,当玩家走完一棋后,应立马break掉循环,并且再打印一次棋盘 进行下一步【机器人下棋】
game.h:
game.c:
细节详见注释部分
至此,运行检查一下结果:
逻辑正确,检查无误后进行下一环节:
1.3.5 电脑下棋
此游戏电脑下棋用的是随机值,随机值的生成要用rand( ) 函数来实现,而想要获得合适的随机数还需要借助srand( ),设置随机数的生成起点。
srand((unsigned int)time(NULL));
int x = rand();
要注意的是随机数的起点只需要设置一次,所以要将srand()放在【电脑下棋】外,这里为了方便放在了test.c 主函数内。
其余部分和【玩家下棋】区别不大,注意注释部分:
game.h:
game.c:
至此,运行检查一下结果:
逻辑正确,检查无误后进行下一环节:
1.3.6 判输赢
在电脑或者玩家下完棋后除了打印一次棋盘外,应该再判断 ①玩家是不是赢了,②电脑是不是赢了,③棋盘满了。除此之外,游戏继续
test.c:
game.c:
判断三行:
判断三列:
判断对角线:
判断平局: