【一教就会】适合用来训练循环和二维数组的三子棋小游戏

一、小项目的前提要求。

对二维数组和循环有了解。

二、项目结构

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第1张图片

大家可以看到我这里创建了两个.c文件和一个.h头文件,头文件中放入函数的声明,定义的宏,和引用的库函数,game.c中主要是实现各个函数的功能,test.c是main函数的所在,我们在那里搭建好项目的结构。

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第2张图片

上方代码即是项目的整体结构

用do...while循环来打印整个游戏,输入1便会执行game主程序开始游戏,输入0则会退出循环,因为while的循环条件便是我们创建的输入值。

三、game();的具体实现

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第3张图片

        这里我们可以看到game()函数的全貌,这里我将给大家一一讲解。

        大家可以看到我们之前在game.h这个头文件中定义了的宏ROW(行)COL(列),之所以我们使用宏而非数字来之间创建3*3的二维数组是因为以后如果我们要改成5*5的棋盘只需改一下宏即可,而非一个个慢慢改。

        char ret='0'是用来接受判断是否取胜的函数的返回值的字符变量,后面我会谈到。

        一、初始化地图

        在我们创建好一个3*3二维数组后我们的第一件事情便是初始化这个数组,于是便用到我们自定义的第一个函数,初始化改二维数组。【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第4张图片

         我们选择将其初始化为空格,便是为了实现棋盘上为空的效果。

        二、打印地图

        【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第5张图片

         打印地图分为升级版和简易版两个版本

        我们通过将棋盘的分割线分为几组来通过循环来实现打印

        其中重点在于if的判断来让超出部分不进行打印。

三、玩家行动

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第6张图片

 注意点:1、我们需要用1表示第一行,因此需要x-1;

                2、注意好判断的条件即可,x,y在正确的范围内并且该格子为空格方可下棋,下棋后跳出循环即可。

四、电脑移动

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第7张图片

         这里使用简单的方法实现电脑的下棋,即通过随机数的生成,rand()会生产随机的数字(需要配合之前main函数第一行的srand,在%ROW(之前定义的宏为3)后值必定在0-2之间的一个整数。

        再判断格子是否为空,为空则下棋,不为空循环生产随机数,直到下到空处为止。

五、判断胜负

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第8张图片

         我们先约定玩家胜利返回字符*,电脑胜利返回#,平局为字符Q,游戏继续为字符C。

        我们再函数内部先判断行和列是否相等,然后判断斜对角是否相同,记住判断条件中要不能是空格,当相同时我们便返回二维数组中该元素,因此玩家胜利返回字符*,电脑胜利返回#,很简单就能够实现了。

        在判断平局的条件中我们用到了full函数,即如果遍历该二维数组后没有找到空格字符即视为满了,返回字符Q.【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第9张图片

         当以上条件均不满足后便返回继续游戏的字符C.

        这里将函数写死了,大家可以开动脑筋进行修改。

六、运行逻辑

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第10张图片

 玩家移动->判断输赢->打印地图->电脑移动->判断输赢->打印地图,不断循环,直到结束;

在这里我们之前创建的ret便是接受判断胜负的函数的返回值,当返回值不是字符c(继续游戏)时我们便需要跳出循环,根据相应的返回值确定相应的结果后并打印出最终的棋盘。

七、总结

【一教就会】适合用来训练循环和二维数组的三子棋小游戏_第11张图片

 

三子棋小游戏的实现并不复杂,只要我们理清楚思路和用好循环和数组便能写出来,让我们通过这个简单的小项目来锻炼自己的代码能力吧!

有空自己可以尝试将电脑写的更加聪明哦!

你可能感兴趣的:(c语言训练,c语言,开发语言)