C语言实现三子棋

一、游戏规则

三子棋是一个以3*3为棋盘的一种游戏。游戏规则是,当你下的棋子当中有三个可以用一条直线串联起来,则胜利。如果当棋盘满时都没有人满足条件,则平局。

二、游戏的代码实现

 1.构建代码架构。

在这个游戏中,我们会构建text.c、game.c、game.h三个代码区。其中:

text.c的源文件是主代码区,主要的框架都在其中 。

game.c是实现游戏代码的地方。text.c中所使用的函数都是在这里实现的。这是为了让代码结构清晰,不至于代码太多而导致混乱。

game.h是引头文件和函数声明的地方。这三个代码块可以让我们的代码的更加有条理,在找bug的时候也更容易。

2.游戏菜单

玩游戏,游戏菜单是必不可少的。我所写的就是一个比较常规的游戏菜单。它有两个功能,一个是玩游戏,一个是退出游戏。这两个功能会在main函数里面实现。

3.main函数

①玩游戏时,我们当然想玩完一把游戏后再来一局或者退出。因此为了这个功能,我们就用switch()case语句完成。设置一个input,供用户输入。当为1时,代表玩家还想再玩一次。为0时,直接break退出游戏。其余情况则判断输入错误。而游戏每玩完一次,我们就打印一次菜单,提示玩家输入。

②main函数中有一个srand函数,那是随机值的初始化,我们后面会说到。

4.game函数的实现。

4.1棋子的实现

如果想下棋的话,必须要有一个char类型的二维数组。因此在game.c中,先创建一个二维数组。

其中ROW和COL是我的宏定义,假如我想玩5*5的三子棋时,如果不宏定义,我就只能把所有的行和列改为5。而宏定义后我只用修改ROW和COL的值。其定义放在game.h中。

 

4.2数组的初始化

但是我们为了让棋盘打印的时候比较好看,因此只能将数组初始化为空格,因为只有空格才不会被看见。因此我定义了一个初始化函数

 并且在game.c中实现。

 在text.c中使用。


4.3棋盘的打印 

 首先在game.h中定义函数。

 然后在game.c中实现。

 代码中,将board[][]和‘ | ’看做为一组数据。把' --- '看做另一组数据。但是‘ | ’在一排只打印两个。而‘ --- ’只用打印两排。因此加上相应的限制条件。一个棋盘就打印出来了。

 

 打印出来的样子就是这样。

 4.4下棋

下棋分为玩家下棋和电脑下棋。

1.玩家下棋。

这是在game.h中的定义。

这是在game.c中的实现。

① 玩家下棋,有三种情况。第一个是坐标正确,第二个是坐标非法(不在棋盘内),第三个是坐标已经被占用了,需要重新输入。这三个我们只需要用if语句判断即可。因为有输错的时候,因此我们用while()语句来循环,只有当输入正确的时候才可以break跳出。而当坐标非法或者坐标被占用的时候,就不break跳出,继续让玩家输入。

 ② 还要将输入的数字减一,因为玩家不一定是程序员,他们不知道数组的坐标。因此我们代为处理。

2.电脑下棋

这是在game.h中的定义。

这是在game.c中的实现。

电脑下棋简单得多。因为我们只需要让他随机下棋在那些没有下棋的地方。因此我们设置两个随机值 并且%3(值为0~2),分别给x,y赋值。只要随机的地方没有棋子,就下棋。用if语句限定条件。下了后break跳出。

4.5判断输赢

这是game.h中的定义 

这个是在game.c中的实现

 

赢得情况有:一行中三个,一列中三个,还有对角线三个。如果是‘ * ’,则为玩家胜利。为‘ # ’就是电脑赢。

三、总结

三子棋代码我这个只是一个简单地思路简介,源代码也久不献丑了。因为我的电脑还是比较弱的,只会随机走,不会堵棋。

谢谢大家的观看,如有错误之处,请大家指出。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值