三子棋的设计与实现

        对于三子棋的学习我们在创建文件时,需要创建三个,分别是'test.c','game.c','game.h'。'test.c'用于游戏的测试逻辑,即游戏的基本流程。'game.c'用于游戏的实现逻辑,即编写游戏中所需要的函数代码。'game.h'用于游戏实现函数的声明。

        首先我们需要创建一个主函数,为了实现这个三子棋,我们需要创建一个'test()'函数。在'test()'函数中,我们可以使用'do while'循环,来让我们的游戏可以重复的玩,我们也可以在'do'中先为游戏设计一个主界面,介绍基本的选项,通过'menu()'函数实现一个简单的菜单。  

 

        从基础需求上看,菜单中我们需要的有“进入游戏”,和“退出游戏”,两个基本需求,我们可以利用'scanf()'函数输入选项,通过'switch'函数选择不同的路径,当我们选择'case 1'时,我们进入游戏,选择'case 0'时,退出游戏。如果选择其他选项'default',则提示玩家“输入错误,请重新输入”。

 

        当选择case 1时,进入游戏,所以我们需要创建一个游戏函数'game()',在'game()'中来实现这个游戏。在这个游戏程序中,我们首先需要设计一个棋盘,根据现有的三子棋模板,我们可以分析出,棋盘类似于一个3*3的二维数组,首先创建一个二维数组并将其初始化,在[ ][ ]中我们如果直接赋值的话,会影响程序的灵活性,我们可以在'game.h'中定义一下:

 然后初始化中直接套用:

 

        利用初始化函数'InitBoard'将数组初始化为一个空的数组,具体步骤是通过'for'循环,将3*3的数组的每一格都初始化为' '。

 

         注意:'for'循环内部的'board[i][j] =' ';'使用的是'=',这里是赋值操作符,不要写成'==','=='是判断相等。

        同样,我们需要将其函数进行声明,在'game.h'中进行声明。

         获得了这样一个空格空间之后,我们需要给他加上外部装饰,即横线和竖线,使它每个格子分明,达到3*3的视觉效果。我们添加一个'DisplayBoard'函数,添加横线和竖线。我们先声明:

        然后在'game.c'中创建函数:

         前面的步骤下来,当我们输入'1'时,我们就得到了一个完整的棋盘:

         接下来,我们就要开始实现下棋的步骤了。首先我们先分析,下棋的基本流程(玩家先下的话)——“玩家下棋->打印棋盘->判断是否获胜->电脑下棋->打印棋盘->判断是否获胜”,这样的一个循环过程。

        通过分析,我们先实现玩家下棋的步骤,定义函数'player_move'并将其声明。基本逻辑为:在这个3*3的棋盘中,判断落子的位置是否为空,如果为空,则用'*'覆盖,并退出。若不为空,或位置输入越界,则提示玩家,并再次循环,直到输入正确。

         接下来,就是电脑下棋,我们同样创建函数'computer_move'使其实现,基本逻辑与前面玩家下棋类似,即在棋盘中寻找空格位置。 

        为了使数字更加随机,我们使用了'rand()'函数,由以往的知识我们知道,使用'rand()'函数前我们需要调用'srand()'函数,并利用时间戳的概念,我们在主函数内调用了'srand()'函数,

 

        在二者都定义好后,我们就需要最后判断输赢了,我们需要分析当一方下完后可能出现的情况———1.玩家获胜   2.电脑获胜  3.平局  4.继续

        分析好后,我们定义函数'is_win',用来判断这四种情况,我们将这个函数的返回类型定义为'char'类型,当返回'*'时,玩家获胜。当返回'#'时,电脑获胜。当返回'Q'的时候,平局。当返回'C'时,继续游戏。

 

 基本逻辑为:先判定获胜的情况:横着三个,竖着三个,对角线三个相连,如果出现的话则返回获胜位置的符号,根据符号找到对应的对象,这里我们需要在'game()'函数中初始化'is_win'函数。

 

        如果没有出现获胜的三种情况,那就是平局状态,由上面的代码可以看到,我们定义了一个‘is_full'函数: 

         至此,我们的三子棋流程大致介绍了,最后将主要的游戏代码展示出来

 

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值