什么是三子棋:就是3x3的格子,玩家和电脑依次下棋,只要满足某一行或者某一列或者对角都是3个一样的,就获胜。
首先我们先来捋一下实现的思路:分为三个文件,一个test.c和game.h和game.c。game.h专门用来写函数的声明,game.c用来写函数的代码。test.c是用来测试的。
我们来看一下整体流程:(注释的可以先不用管)
我们先在test.c之中写。上来我们选择用do,while循环来实现,根据玩家输入的数字,分别进去不同的分支,1开始游戏,0退出游戏。选择其他数字输入错误,但是循环并没有结束,可以重新输入。menu函数就是选择的界面,如下所示:
当然还有一个点,我们的声明放在game.h中,所以要引用它的头文件,如下所示:
#define......这个的作用是为了使用scanf函数不会出错。
game()函数的实现(整个游戏的灵魂和精髓)
先看看游戏规则:
不同的字符代表不同的意思,如上。
再看看game()函数的整体。
关于这个函数,首先肯定要创建一个二维数组,ROW和COL在头文件之中定义了,后面给出。刚开始要初始化这个数组,让它的每一位都是空字符,即‘ ’。 初始化之后,我们显示一下棋盘。ret代表的是游戏的状态,前面说了。不管是玩家下棋,还是电脑下棋,下完棋之后都要检查一下游戏的状态,因为‘C’代表游戏继续,ret不等于‘C’,说明游戏不继续了,跳出循环,看ret是什么情况,判断谁获胜。
在上面的while(1)语句的后面接着写,注意不是里面。
判断玩谁获胜之后再展示一下棋盘。
接下来我们看函数的具体实现过程:头文件放声明。
我们看看头文件的内容:即game.h的内容。
头文件中定义了ROW和COL,为什么刚才的test.c不直接用3?这是因为,如果我们以后想打印4x4的棋盘的话,就不方便,所以用了一个宏定义,要要4x4直接修改头文件即可。
这里引用了两个系统的头文件,直接被引用到test.c里面去了。
game.c函数实现过程
刚开始也得引入头文件。
我们看初始化棋盘的函数代码:
就是棋盘的9个位置,让它为空字符。
接下来,我们显示棋盘:
根据棋盘的形状如下:所以设计了以下函数
玩家走棋函数:
电脑走棋;
因为电脑走棋为随机数,所以要引入时间的头文件,同时把第一张注释的地方取消注释即可,可以理解为播撒时间种子。
判断是否赢:
其中插入了一个判断是否棋盘已经满了的函数,满了返回1,没满返回0.
以上代码写好之后就可以运行了,附带运行的截图,不懂的地方可以留言哟!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)