最后更新:2022-01-23 23:41
大家好,今天为大家带来三子棋C语言版讲解,这个游戏看着简单,但是对于我这种新手实现起来还是有一定难度的,废话少说,直接开冲。
目录
一、事先准备
二、用户交互画面
三、三子棋棋盘的初始化和打印
四、玩家输入和电脑输入
玩家移动
电脑移动
五、判断输赢和平局
六、头文件和game函数
我们要创建一个头文件和两个源文件
头文件game.h放游戏相关函数的声明
源文件test.c实现主函数,大致的框架
源文件game.c实现游戏相关函数
这样做的好处是将各复杂函数间模块化,也避免一个文件过于复杂,方便检查和相互调用。
定义三子棋棋盘的行和列,使用#define定义 ROW和COL,这里我们先定义为3,后期我们改造这个游戏为五子棋什么的只有改动ROW和COL就可以实现了。
用户交互画面主要实现菜单mean函数的打印,供用户选择开始游戏和退出游戏。会用到do……while循环和switch选择结构。
交互画面还是比较简单的,在上一篇猜数字里就详细介绍到了,这里就不多说了。
我们要来接受用户传来的值首先就要创建一个数组,并对数组中每个值赋值为空格。
这里我们创建一个char型的board数组行设为ROW,列设为COL。
然后创建一个void函数inti_board(初始化数组,将每个值初始化为空格)
这里我们将board数组作为函数参数传给inti_board,int_board用char board【ROW】【COL】接收数组,推荐使用数组的形式传参,使用指针的方式传二维数组还是比较容易出错的,不推荐。
这样就对数组进行了初始化赋值,接下来我们就要来实现打印棋盘了,棋盘的样式如下:

这样的棋盘看着就比较像三子棋的棋盘了,接下来我们对这个棋盘进行分析:
表面上是三行,其实这个棋盘是打印三次,每次打印了两种内容的,由两种打印方式实现
1是空格、数据、空格加上竖杠,2是三个减号加上竖杠,
而且当列数为3时不打印最后那个竖杠,行数为最后一行时不打印减号和竖杠
这里我们画图来分析一下:

有了分析,我们就可以很轻松的用选择和循环语句来控制打印,代码如下:
这时我们实现玩家移动player_move,设置一个x,y,用来接受用户输入的坐标,用*来表示用户的棋子同时我们要来进行判断两件事:
1、用户输入的坐标是不是在行列范围之内
2、用户输入的坐标原先是不是空格
这时我们就要来设置一个循环,只有上面两个条件满足了才能将那个坐标的值改动,并且跳出循环。
当然,我们还要考虑一件事,用户可能不知道数组是从零开始的,所以我们要将用户输入的坐标x,y进行减1,再放入到相对应的数组位子中去。代码实现如下:
我们将电脑落子定为#,首先我们来思考电脑应该如何下子,电脑应该如何产生坐标,这时我们就可以想到我们猜数字游戏中用过的rand函数来让电脑产生下棋的坐标(因为本人实力有限,不能设计算法来让电脑智能下棋)电脑下子的位子相比玩家下子就易控制一些,我们无需判断他是否会下出界,我们只用%3就可以让电脑产生的值一直再0-2之间,我们只用设置循环来让电脑产生的坐标原来是个空格就行了,然后让子落下,退出循环,再打印棋盘就行了。
这时我们可以设置一点细节,使用Windows.h中的Sleep函数,设置休息时间为Sleep(300)单位为毫秒,也就是0.3秒,来让下棋显得不那么僵硬,函数具体实现如下:
首先判断输赢我们可以先思考,怎样算赢,三子棋有8种情况判为赢,即行三连,列三连,还有对角线三连。
那平局就很好想了,9个格子全不是空格。
那这里我们先来给个设定,下一步判断一次下棋状况,如果判断有一方胜利,则返回赢的情况中的一个值,如果有平局,则返回一个Q,代表和棋,如果都不满足,则返回C,游戏继续。
我们可以想到,只要返回的是C,游戏继续,如果不是C,那就有三种情况:玩家赢,电脑赢,和平局,这时我们来进行判断。如果有一方触动了胜利的条件,则直接将其中的一个值返回就行了,然后我们来判断是*还是#号。同样,如果触发了平局条件,我们判断是不是平局条件,如果是平局,我们输出平局。那我们要再来实现if_full函数,棋盘满的条件。
和棋就是没有空格,那我们只用每次遍历一遍就行了,实现起来还是比较简单的。
这样,输赢、和、继续就判断完了,我们只需要再来一个打印判断的结果的函数就行了
实现如下:
这样,三子棋全部的函数部分就实现完了,我们现在要做的就是将函数声明放到头文件中,这样文件间就有了关系,文件间就可以相互调用了。
接下来我们来看一下主函数部分,看一下game函数的主要部分:
这样,三子棋游戏就实现了,总结一下,我们将游戏的函数部分、主函数放在不同的文件,这样有利于我们一步一步的调试,也便于我们分析程序,再将函数声明放在头文件中,这样巧妙的连接了两份源文件,并且减少了冗余。
大家留个赞呗~~
本文由 在线网速测试 整理编辑,转载请注明出处。