C语言实现傻瓜式三子棋

360 阅读4分钟

三子棋的游戏大家应该都玩过,简单来说就是双方在一个3*3的九宫格上面对弈,哪一方先将自己的三个棋子无论的横,竖还是斜角连成一条直线,则判这一方胜。

一.构建框架

C语言的程序入口就是main函数,我们可以从main函数所在的C文件开始编写。

main函数

首先创建main函数,main函数中调用关于游戏的函数。在我完成的这个三子棋中要有一个菜单,菜单选择以后进入游戏。那么关于游戏的函数就包含菜单和游戏本身两个部分,我用test()来写这两个部分。

test函数

test中要调用menu()和game()。menu展示菜单,获取玩家的选择;如果玩家要开始游戏就调用game()进入游戏,反之则退出程序。这里要用到一个while循环,这是为了实现玩完第一局以后可以不退出继续选择玩第二局。

menu函数

展示菜单

game函数

game中写实现游戏的函数。首先这个游戏需要一个3*3的棋盘,棋盘是二维的,对应到C语言中也有二维数组。棋盘可以用二维数组来实现。使用二维数组之前要初始化二维数组,InitBoard()用于初始化二维数组。然后在终端打印棋盘,DisplayBoard()用于打印棋盘。接下来就可以开始下棋了,这里下棋的有两方,玩家方和电脑方,玩家方先走。PlayerMove()实现玩家方走棋的内容。此时调用DisplayBoard展示当前棋盘的情况。当一方落子以后都要判断一下这一方是否赢了。IsWin()函数用来判断某一方是否赢了。刚刚是玩家方走了棋,接下来该电脑方走棋,ComputerMove()是实现电脑方走棋的函数。此时调用DisplayBoard展示当前棋盘的情况。IsWin()函数用来判断某一方是否赢了。从IsWin函数拿到结果以后,假如结果不是'C'则说明已经有了最后的结果可以不用下了。根据结果输出信息。

InitBoard函数

用于初始化二维数组,将二维数组中的值设为' '(这是字符型二维数组)。

DisplayBoard函数

用于打印二维数组中的值并且把它构建成一个易于玩家理解的棋盘的样子。

PlayerMove函数

玩家方下棋的方式是玩家输入要落子的地方在棋盘中的坐标,程序获取到这个坐标,要判断这个坐标是否是在33棋盘内的,不在棋盘内就要输出提示信息然后再获取一个坐标,然后再接着判断这个坐标是不是在33棋盘内的......这里可以看出它需要用到循环。当这个坐标在棋盘以内,还有判断这个坐标是不是已经被落子了,如果已经被落子了就要输出提示信息再获取一个坐标。当输入的坐标既在棋盘以内,又没有被落子,就可以落子了,玩家落子记为'*'。

ComputerMove函数

电脑方走棋首先要确定走棋的下标,下标是通过rand函数得到任意的两个值,分别模3,这样就可以得到在棋盘内的一对坐标。判断这个坐标是否已经落子了,如果已经落子就再次调用rand函数获取一对坐标,这里也是一个循环。如果没有落子,就在棋盘上落子,电脑落子记为'#'。

IsWin函数

其实这个函数应该说是用来判断当前棋盘的状态,可以有四种状态:玩家方赢()、电脑方赢(#)、平局(Q)、继续(C)。判断任一方赢了:二维数组的任意行、任意列、任意对角线有一方出的三子连成一线,即这三子是一样的。所以我们只需要判断是否有这样的三子是符合要求的,如果有这样符合要求的三子,根据这三子的值我们可以确定是哪一方胜(玩家落子用''表示,电脑落子用'#'表示)。当没有任一方赢而棋盘中落子已满,说明平局了。以上都没有就是继续了。

二.代码实现

gitee.com/Huangy-4826…

三.不足

这是一个傻瓜式的三子棋,电脑方只能随机的"下棋",别提什么算法了,要想让电脑赢一场都得想想办法。