首先要确定游戏的基本框架
简易来说,由进入游戏--->选择菜单--->进入游戏三部分组成
应用在c语言项目中,我们通过功能来对文件进行区分,主函数main()内进入游戏,
通过test函数加入我们的菜单,但这里meau()菜单选项我们不希望执行一次,因为如果玩家选择错误,将会导致程序无法进行。
这里通过do while循环最合适,因为至少进行一次选择。同时这里我们将玩家的选择进行限制。
玩家通过输入1进入我们的游戏game()函数,在game()函数中,我们首先应该做的是创建一个空的棋盘,
,我们把 棋盘行数Row,列数Col声明在头文件中
,但我们应该知道我们的棋盘内容每一个格子内都是空字符串,所以我们生成一个初始化棋盘的函数,但是初始化棋盘是一项功能,我们每次进入game()函数都要调用它,所以我们把它单独建立在我们的game.c文件中,以便我们接下来增多其它的游戏功能。
我们需要在test.c 文件中要调用我们的初始化InitBoard()函数,我们需要在头文件中声明函数,以便调用。
之后我们通过循环依次访问棋盘数组中的每一个元素,将其更改为空字符
初始化棋盘数组内容之后,我们要通过控制台将棋盘打印出来,形成一个井字格, 同样我们先将函数命名出来,传入实参,打印棋盘与我们的初始化棋盘一样是一种功能,所以同样的方式声明在头文件中。编写在game.c文件中。
我们首先要通过行来依次输出,所以通过循环来进行,第一行的每一个格子可以拆分为 ( 字符 )’空格‘%c‘空格’加上一个”|“看图像最后一次输出时是没有”|“的,所以我们上面通过判断j<col进行了限制。第一行结束后我们进行了换行,通过if<col-1判断最后一列不需要输出,其它与行的输出同理;
接下来棋盘显示完成后进入玩家输入环节,声明功能函数,同样玩家输入的内容是可能错误的,我们需要进行合法性判断。这里我们通过while循环,因为玩家输入错误后不会跳出循环,会进行二次输入。
当然我们如果输入正确后,会改变玩家输入坐标的内容,把空字符改为‘*’,并且跳出循环,函数完成。接着我们将棋盘显示更新一下,,
接下来应为电脑下棋(这里随机下棋),我们生成函数,传入实参,电脑下棋需要随机数,随机数需要无符的时间戳,我们在test函数中已经声明。
我们让电脑生成的随机数,并且只有位置为空字符时才可下棋。电脑走完后我们同样让刷新棋盘
但是我们需要加入一个判断输赢的函数来终止游戏,不然游戏会一直循环。根据逻辑,不管玩家还是电脑下完棋后都要进行判断。并且游戏有四种状态玩家赢(*)电脑赢(#)平局(Q)继续(C),通过ret来接受函数返回值以明确游戏状态,玩家所以这里先生成函数
我们来到IsWin的函数,三子棋游戏赢的方式有三种,横着排满,竖着排满,斜着排满。平局的方式有一种
我们先来判断横着排满棋子
这里通过循环依次判断每一行的内容是否一致,并且有一种不能为空字符相等。如果一致,我们随意返回这个横向棋盘上的符号就可。
判断列的循环与行的基本一致:
判断斜着的方式
这三种赢的状态都会返回一个字符'*'或者'#'。
但是我们还有两种状态平局和继续,我们将棋盘是否满了做成一种函数() 我们让IsFull()返回一个值,棋盘满了就返回1,没满就返回0;
这里我们通过循环依次来看是否有空的字符。
显然还有最后一种状态’c‘继续游戏。我们写在了循环的最下面。
前面我们用字符ret接收了游戏状态
当然如果游戏状态返回来已经是平局或者一方赢下的话,我们需要跳出循环进行判断
同样通过ret返回值进行判断游戏状态。
好了,本篇博客的内容到这里就要结束了,本博主还是小白,写博客记录只是记录学习,望包涵。
标签:函数,三子,C语言,玩家,小白,循环,棋盘,我们,游戏 From: https://blog.51cto.com/u_16094438/6535342