目录

游戏开始界面的实现:

a.主函数内用来实现选择是否进行游戏:

b.菜单函数,很简单,想怎么实现怎么实现

c.封装了实现游戏功能函数的游戏函数

游戏函数的实现(细节要注意,不然会出错,细节会标注出来):

a.初始化棋盘,落子位置都是空格字符而不是空格,为了让棋子能够覆盖

b.展示棋盘的实现

c.玩家落子

d.电脑落子

e.判断棋盘是否下满即判断平局

f.判断谁赢


首先,基于c语言的分支和循环,函数的学习,来通过两个小游戏来实现巩固和复习,故此篇注重于对以往知识的复习而不是游戏的具体实现;然后,两个游戏都会从思路及逻辑,函数实现的角度来实现

1.三子棋

思路:

a.首先就是棋盘界面的实现,这里实现预期如图:

b.那我们将棋盘实现出来了,那是不是应该打印出来呢?
c.将棋盘打印出来了,是不是就要开始下棋了?那是不是就要实现玩家走棋(这里用*来表示玩家的棋子,用#来表示电脑的棋子)和电脑的走棋?
d.走棋是不是就要一决高下呢?那我们是不是又要实现判断输赢呢?实现判断输赢,那怎么证明或是说用什么标志来证明赢呢?平局呢(这里用字符C来表示继续)?
e.那想想还有什么要实现的?诶,既然有棋子的出现,那开始的棋盘是不是要保证一个棋子都没有,况且要落子,不能只是打印空白啊,要有数据,这个数据是不是就是空白字符了呢?那是不是就要来初始化棋盘了?

总结下来,我们要实现逻辑就是,先来让玩家选择是否进行游戏,即用到分支与循环和打印一个菜单供玩家选择;选择进行游戏是不是要实现很多功能,那就让它们放到一个函数中去吧;游戏函数的逻辑就是,初始化棋盘,玩家走,判断输赢;电脑走,判断输赢,都没赢,那就继续,好了来实现吧!

游戏开始界面的实现:

a.主函数内用来实现选择是否进行游戏:

注意这里使用了随机数生成器,本篇不用彻底了解其原理,只需知道,我们要用到随机数,需要头文件,需要一个生成器srand(),srand内部需要放入一个随机,一直在变的东西,即time()函数,故还需要,srand的参数类型又要求是unsigned int,time的参数需要是0,所以就构成了我们需要的,随机数生产器,我们只需要调用随机函数rand()就能使用了,由于rand生成的随机数是一个0-RAND_MAX(转到定义可知,最大为3万多)的范围,所以生成的随机数我们需要模上其他数来得到我们想要的随机数范围,比如我们想要得到1-100间的随机数,我们只需要rand()%100+1即可,说了这么多,好像也不是很简单的样子hh,总结得到,我们用随机数只需要记得,随机数生成器srand((unsigned int)time(NULL)),包头文件,然后模对应的数来得到范围即可。

用到do while循环是为了使游戏选择阶段至少开始一次。

用input作为循环条件,与分支正好呼应,0正好结束循环并退出游戏。

b.菜单函数,很简单,想怎么实现怎么实现

c.封装了实现游戏功能函数的游戏函数

while循环的目的就是让游戏如果没人赢,不平局,就一直进行。

游戏函数的实现(细节要注意,不然会出错,细节会标注出来):

a.初始化棋盘,落子位置都是空格字符而不是空格,为了让棋子能够覆盖

b.展示棋盘的实现

这个一定要先有图,再找规律:

观察可发现,是不是 | | 与—|—|—每一行交替出现?让它们算为一组,所以就用一个控制行的循环包含它们,再来打印第一种,第一种可不是真的只打印空白字符哦,虽然显示出来是空白字符,那是因为我们初始化了,所以,空白的位置应该是“空白字符%c空白字符” 哦!

然后就是要控制最后一列不能打印|了,再在打印完第一种后加上打印换行,这样,是不是第一种就打印完成了!

再来第二种,由于最后一行不能再来第二种了,所以加上一个限制条件,其次,也要保证最后一列不能有|,然后再换行即可。

最外侧循环三次就最后结果(循环一次打印一组,即第一种和第二种)

c.玩家落子

要注意,玩家的角度并不知道数组的下标与对应数的关系,所以坐标的范围应该是棋盘的大小范围,所以落子的下标也要注意减1,用循环防止输入有问题保证能够重新输入,而下的坐标正确则跳出循环。

d.电脑落子

这里要注意,随机数生成要放在循环里,因为要保证一直生成随机数,不然一组坐标进循环,不满足条件,一直循环就死循环了;其次,仍要注意落子后要跳出循环。

rand()模上对于的大小就能得到范围,例如row为3,那结果只能是0,1,2,正好符合我们的对下标的要求

e.判断棋盘是否下满即判断平局

棋盘没有空白字符说明就下满了,返回1即平局

f.判断谁赢

判断谁赢就3种依据,行,列,对角线,注意不能有空白,因为3个空白也算赢,所以确保中间的不为空白即可,并且返回中间的棋子,根据返回值判断结果(这也说明了为什么要用char做返回值的原因)

都不返回即也没人赢,也不平局就是继续,返回继续对应的字符 ‘C’。

下面就可以跟电脑一绝高下了hh,同类型的扫雷游戏会在另一篇中呈现哦!

游戏看起来简单,但想单独的一遍就实现它也是不容易的,很多细节性的东西需要注意,但思路更为重要,实现的目的就是为了不断感受思路与其中的知识,如果有时间可以通过easyx给上图形化界面,或者说五子棋?玩家vs玩家的五子棋?象棋?