美文网首页程序员
C++编程练手必备,C 语言快速实现五子棋!

C++编程练手必备,C 语言快速实现五子棋!

作者: Python编程导师 | 来源:发表于2019-03-19 20:27 被阅读33次
    image

    五子棋大家一定都玩过,想不想试着用 C 语言来实现一个简易版的五子棋呢?下面就让我们现在开始,用最简单易懂的代码来编写一个控制台下的五子棋,并逐步完善它,每个人都能轻松学会哦!

    下面是小编整理好的一套C/C++资料,加小编C/C++编程学习群:825414254,获取系统性学习C/C++的学习资料

    image

    知识点

    • 游戏的逻辑
    • 判断结果的算法
    • 界面的设计

    实验环境

    • vim编辑器
    • Xfce终端
    • gcc编译器

    适合人群

    本课程比较简单,没有复杂的语法和逻辑,适合具有C基础的用户,一起探索和发现C语言可以做一些有趣的事情。

    效果截图:

    image

    ( 大家看了截图,有没有一种想拍死我的冲动Σ( ° △ °|||)︴ )

    别急,看起来似乎很丑,实际上……确实很丑。不过没关系,这次的项目课,主要是给大家介绍一个小项目的开发流程,同时帮大家复习 C 语言基础知识,让大家轻松实现一个功能比较齐全的小游戏,后续我还会继续开设这一系列的项目课,带大家完善游戏功能和界面。

    废话有点多了,下面就让我们开始吧!

    二、实验步骤

    2.1 设计棋盘

    注:实验楼环境无法输入中文,可以用O和X来代替棋子

    我们首先需要一个棋盘(15 * 15),记录棋盘中每一个位置的“情况”。

    那么我们可以定义一个 chessboard[16][16] 的数组,为什么不是 [15][15] 呢?因为这样我们就可以让数组的坐标正好对应棋盘的行和列,方便后面代码的编写。

    image

    2.2 main函数的编写

    开始编写主函数之前,我们先简单的考虑一下,一个游戏通常的流程是怎么样的 (⊙o⊙?)首 先肯定是进入游戏的一个主界面,然后点击开始按钮进入游戏,接着显示游戏画面,判断输赢,游戏结束。那么一个五子棋游戏的流程呢?

    image image

    主函数大概就是这样了,是不是很简单明了呢?

    附一张用gedit编辑main函数的图:

    image

    2.3 initGame函数

    在这个函数中,我们要实现的功能是

    • 显示一个简单的欢迎界面
    • 要求输入Y之后显示出棋盘

    下面,我们就开始吧!

    image

    我们在 initGame 函数中使用了 exit 以及 system 这两个函数,所以要在程序的最上面包含 stdlib.h 这个头文件

    image image

    2.4 printChessboard 函数

    功能:

    • 打印出行号和列号,并打印出棋盘
    • 数组元素的值为0,打印出星号(*),表示该位置没有人落子
    • 数组元素的值为1,打印实心圆(X,玩家1的棋子)
    • 数组元素的值为2,打印空心圆(O,玩家2的棋子)
    image

    2.5 playChess 函数

    函数功能:

    • 要求玩家输入准备落子的位置
    • 如果当前是玩家1落子,就将1赋值给数组中对应位置的元素
    • 如果当前是玩家2落子,就将2赋值给数组中对应位置的元素
    • 每次落子完毕,判断当前玩家是否获胜
    image

    2.6 judge函数

    函数参数:

    • x:当前落子的行号
    • y:当前落子的列号

    返回值:

    • 1或0。1表示当前玩家落子之后出现五子连一线,也就是当前玩家获胜
    image

    judge 这个函数中,有 3 个嵌套的 for 循环,这 3 个循环的目的在于判断是否有五子连城一条线。

    五子连线,无非是在一行上,一列或者斜方向上有连续的五个子。在这里,我们将采取一种试探的方法,即沿着水平,竖直,倾斜等方向分别寻找是否有五子连线。下面举一个例子:

    image

    在上面的对局中,我们以(9,10)来讲解判断五子是否成线的算法。

    首先判断(9,10)的倾斜方向是否出现五子连线,判断方式如下:

    • 以(9,10)为起点,向左上方向依此寻找,满足条件的坐标分别是(8,9),(7,8),(6,7)。因为(5,6)不满足条件,所以进入下一步
    • 然后在向右下方寻找,找到(10,11),仅有一个满足条件的点。
    • 然后一共找到五个在同一直线上的点,所以玩家二取得胜利,

    如果倾斜方向不满足取胜的条件,就再判断竖直方向,水平方向,如果均不成立,这意味着当前玩家无法取得胜利,对局将会继续。

    三、修复 BUG

    到这里,我们的五子棋游戏就基本上完成了。不过,我们的项目课并没有结束,这个游戏还有两个明显的BUG:

    • 已经落子的地方,依然可以落子,并“吃掉”原棋子。
    • 比赛结束后,仍提示下一个人落子,此时添加一个胜利的判定和提示即可。

    如何修复这两个BUG及获取项目的全部源码,加小编C/C++编程学习群:825414254,还可以获取系统性学习C/C++的一套学习资料

    相关文章

      网友评论

        本文标题:C++编程练手必备,C 语言快速实现五子棋!

        本文链接:https://www.haomeiwen.com/subject/mstomqtx.html