儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。

             C语言之三子棋的代码实现

首先在开始执行一段代码之前要剖析这个问题,不是上手就干,这样会导致思维不够缜密,代码写了好几百航,一运行就崩溃了,我一般的解题过程是现画图,想出画出想实现的过程,怎么实现,多种样例,是否都能通过这个逻辑。
三子棋游戏其实也是如此(接下来是棋盘的思维实现过程)
1:首先需要一个棋盘,棋盘的大小,几行几列,该如何创建。
2:玩家如何落子,落子后位置是否正确,有没有越界或者已经有棋子了。
3:你的对手电脑应该怎么下棋。
4:判断输赢,是你赢了,还是电脑,还是你们两个不分上下的下满的棋盘平局了。
5:如果我玩儿完一把不尽兴应该怎么继续,不能每次都运行代码吧。
这是我们整个三子棋创建的过程和问题,接下来通过代码和注释来逐个解决。
首先我们需要创建两个源文件和一个头文件
分别是源文件:game.c和prog.c,头文件game.h。
接下来上代码:
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第1张图片

儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第2张图片

接下来按照我的提示来看,
现看53行代码,我们创建的ret就是来接收我们输入的选项,
然后54行进入do while循环里。
57行代码是一个函数的调用,用menu这个函数来为我们打印一下游戏的菜单,这个很简单。
58行做一个提醒玩家该输入选项。
59行进行输入。
60行对玩家的输入进行判断进入switch语句中,输入1,case 1为开始游戏,我们调用里面的函数来开始游戏,输入0,进入case 0也就是终止游戏break结束switch语句后str为0,do while循环也随之结束,代码结束,输入非0,非1,则认定为输入错误重新输入,假如我现在执行了开始游戏。
我们来进入64行的game_go函数内。
上代码:
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第3张图片
这里看到的就是这个函数的实现。
13行我们创建一个二维数组来创建我们棋盘的大小,行和列的ROW,COL是我们从我们开始创建的头文件中来进行调用的。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第4张图片
这就是我们的头文件的内容,我们把函数的声明与define定义的变量还有库函数调用需要的头文件都集中在这个位置更方便,代码也更清晰,那两个源文件只需要在上面加上一个#include "game.h"即可不需要重复创建。
继续看我们的game_go函数的调用,15行的函数用来初始化我们的棋盘这个很简单,直接上代码就可以。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第5张图片
然后我们继续执行第16行的函数调用,这个函数用来打印我们的棋盘。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第6张图片

儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第7张图片
这就是棋盘的打印和代码的实现,很简单不做过多的解释,自己跟着每一行代码想一想画一画,动动手,你能学到更多。
我们已经解决了一开始的第1个与第5个问题接下来我们来继续解决我们的问题,开始创建17行的while循环,这里面就是我们的核心了,玩家和电脑轮流下棋与判断输赢等。
19行我们来现让玩家下棋,创建函数来进行步骤。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第8张图片
x与y分别代表行与列,scanf来让玩家输入下子的位置,然后判断下子位置是否越界,如果下子位置没有越界在棋盘的大小之内,然后来判断这个位置是不是没有棋子,没有棋子我们就为玩家来下上他的棋,*号就是玩家的棋子样式,玩家下完棋了,该电脑下了,开始创建第26行电脑该怎么下。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第9张图片

这里用到rand库函数来创建一个随机下标,当然别忘了main函数里要加上第54行的代码与game.h里面需要引头文件哦,然后磨上你的棋盘的行与列就不会产生越界的情况,下面的判断就与玩家下棋的判断一样,看这个位置有没有棋子,直到电脑找到一个没有棋子的位置下子成功break跳出循环,电脑棋子为#号。现在玩家下棋和电脑下棋我们都创建好了,第3个问题与第4个问题也都解决了,回到我们的game_go函数中继续来完成我们的游戏,继续game_go中第20和27行代码是每次玩家下完棋和电脑下完棋再打印一下棋盘不能盲下啊对不对,21-25行与28-48行就是我们最后一个问题4的实现,我们先创建一个变量tmp来接收函数返回的字符,如果是*代表玩家赢,如果是#代表电脑赢,如果是C代表平局,Q代表游戏继续,接下来上代码。
儿子:”妈妈我想学下棋“。妈妈:”学,学嘎嘎滴,三子够吗”。儿子:”够了,谢谢妈妈,妈妈真好“。_第10张图片
三子棋我们需要判断每一行棋子是否相同或者每一列棋子是否相同还有两个斜线棋子是否相同,如果相同直接返回满足条件的点上的字符即可进行判断谁输谁赢,继续判断棋盘是否还有没下子的位置,如果有游戏继续,如果满了没位置了游戏结束平局。游戏结束,三子棋的游戏代码也就是这个过程,还有很多可以改良的地方,开动思维来动手改一改敲一敲,其实就跟简单的。

你可能感兴趣的:(c语言初阶,三子棋)