前言
在做这个程序之前,我先说一下要实现这个游戏需要一定的知识基础,比如分支语句,循环语句,二维数组等等,所以如果是新学的小伙伴,就先去学习相关的知识,等到学完知识再来学习这个游戏代码的实现,还是一件挺有意思的事情,至少我是这么认为的。
程序框架
在这个我先去说一下这个游戏的框架:
一,要做一个菜单,让人去选择;
二,是做这个游戏的实现;
1,要把数组的内容全部初始化,全部放入‘ ’;
2,打印棋盘;
3,玩家下棋;
4,电脑下棋;
5,判断输赢;
这里我是为了方便大家理解所以列了一个大置的清单,其实像我们如果说要去实现一个复杂的程序,我觉得构建框架是一个非常有意并且可以锻炼我们自己的思维,一个复杂的程序肯定离不开多个函数的实现,所以我们接触一个新的程序可以先理清其中的逻辑,先去构建框架,再去做细节,好了,接下来我会带着大家去实现这个游戏。
程序框架实现准备
开始之前我们先新建一个项目,然后再新建test.c,game.c,game.h的三个文件,带.c的是源文件,带.h的是头文件,这里因为要实现一个游戏的程序很复杂,所以单独拿出来写。
1,我们首先来写一个简单的程序,目的就是实现菜单的打印以及游戏的开始,这里因为还没开始编写关于游戏的代码,所以我们在test.c上编写这段代码,如下图:
这样菜单页面就做好了,这里我说一下为什么使用do while,因为不论玩家怎么选择,都是要先打印菜单给玩家去看,嗯,这里都是比较基础的知识,接下来我就要开始game.c的实现了。
这里呢我说一下game.h,这里我为了方便,就把#include<stdio.h>放进头文件中,然后在test.c中包含一下就好了。还有这里为了方便我就定义了两个宏,分别表示行和列。
1.初始化棋盘
接下来,我们就要开始写game.c了,首先,我们写一个二维数组,然后写一个程序把数组全部初始化为空格,即‘ ’,放图:
这里我放了game.h和game.c,想必大家对框架应该有所了解了吧,这里其实对test.c中的主函数也有要求,我就放在最后去说了 。
2.打印棋盘
大家应该都下过棋,知道棋盘长什么样子吧,对,像‘井’字一样,好了,知道这个那么就可以去想代码了,我这里就直接上图了:
我这个逻辑是什么呢,就是双层循环,内层循环实现列打印,外层循环实现行打印,而且打印也有讲究,这里逻辑是先打印数据,在打印分割线。效果如上,但是这个是不是没达到棋盘的效果,正常的话边角是不应该打印东西的,那么应该怎么去掉呢,很简单,一个if语句就OK了,
这样是不是看上去好看多了,也更像一个棋盘了,这里我用了三个if语句,前两个都是判断‘|’是否打印的,最后一个是判断’---|---|---|’是否打印。
3.玩家下棋
先看图吧:
这里就是定义两个变量来确定数组元素位置,这里我们玩的是三子棋,那么x,y的取值是不是就是1~3,注意了这里在玩家看来都是从1开始的,而数组是从0开始的,所以要各自减1,看到这里是不是有人运行代码了,发现不对了,哈哈,很正常,知道为什么吗,因为我们写的game函数里光有玩家下棋了,你们想一想,玩家下棋,实际上就是对二维数组的值进行改变,所以改变完了我们是不是要重新在打印棋盘啊,这次你们再去试试,哦,不出所料,又错了吧,为什么呢,循环啊,你难道只让玩家下一次棋吗?(这里我们先不讨论电脑下棋的事)。所以说逻辑缜密才是编好代码的关键。
4.电脑下棋
电脑下棋最重要的点就是生成随机数,你们可以自己去查,这里我就不过多赘述了;
我要说的是生成随机数的函数有新的头文件需要包含,而且还有时间戳的概念,而且时间戳也要包含头文件,你们自己去查吧。
5.判断输赢
这里的逻辑就是一行三个字符相等或者一列三个字符相等或者对角线三个字符相等,返回值为字符本身,这个我们在test.c中用一个变量来接收这个函数的返回值,返回为‘*’,玩家赢,返回为‘#’,电脑赢,返回为“q”,平局,返回为“c”,继续比赛。
6.game函数的实现
以上的就是在test.c中的game函数写的程序框架,看到这里,大家多多少少都明白一点了吧,好了,以上就是这次我讲解的内容,希望大家三连,然后这个是这次的源码链接https://gitee.com/dragon-bank-sky/class110.githttps://gitee.com/dragon-bank-sky/class110.git