安卓第三趴

昨天我们绘制了棋子

也完成了简单的交互

今天我们来进行逻辑判断

也就是判断是不是连成五子

图片

    既然要判断是不是连成五子,那么肯定首先要有一个布尔型变量来表示是否游戏结束。而且除此之外,我们还要判断出来是白棋胜利还是黑棋胜利,所以总共是有两个布尔型变量:

图片

那么检验游戏是否结束我们写一个函数,判断黑棋还是白棋胜利我们写一个函数,可能大家会想,为什么不能只用一个函数,也就是说把黑棋还是白棋胜利这个函数代替了检验游戏是否结束的函数?其实可以,只是如果这样做,代码的整洁性和可读性会降低,我们还是希望一个函数有其特定的功能,不要太杂。好,那么检验游戏结束的函数我们怎么写呢?

    我们可以很自然的想到,一定是有一个if判断黑棋胜利或者白棋胜利,然后写相应的一些应答代码,比如说“白棋胜利”这样的字眼。

    我们看一下代码:

图片

  • 第一点:checkFiveInLine()函数我们是后面用来判断是否连成五子的,因为也是返回一个布尔值,所以我们将结果赋给局部变量whiteWin和blackWin,以此作为后面if判断条件。

  • 第二点:就是我们的if判断,很简单,不赘述;

  • 第三点:如果黑棋胜利或者白棋胜利,我们就将全局变量isGameOver赋值成true,说明游戏结束。同时,我们还应该记录一下到底是黑棋胜还是白棋胜,我们这里是用白棋的连子情况进行判断;

    扫描二维码关注公众号,回复: 12485519 查看本文章
  • 第四点第一行语句很清楚的说明了:如果是白子连成,那么mWhiteIsWinner就是true,我们将“白棋胜利”赋给字符串text,否则就是“黑棋胜利”。这行语句是if的简单写法。

    这里有一个知识点我们需要知道:Toast

    1)Toast 是一个 View 视图,快速的为用户显示少量的信息。 Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示。

    2)Toast 最常见的创建方式是使用静态方法 Toast.makeText;

    对照上面的代码,括号内的第一个参数是当前的上下文环境,一般是getContext()或者this;第二个参数是要显示的文字或者其他信息;第三个参数是显示时间的长短,有两个默认的是LENGTH_LONG和LENGTH_SHORT,也可以用毫秒来表示。

  • 3)我们还可以设置toast出现的位置:

    图片

  • 4)带图片的toast:

    图片

这个例子我们现在没有用到,但是挺有意思的,可以学习一下,以后玩玩。

对了,上面还应该注意的一点是,不管对toast做了什么操作,最后想显示出来效果就要调用show()方法。

好,现在我们的checkGameOver函数已经完成,那么我们接下来就应该实现以下checkFiveInLine函数:

图片

下过五子棋的人都知道,连五子有横竖左斜右斜四种连法,所以我们上面用了四个函数进行各种连法的判断。我圈出来的第一个框框写法之前是没有见过的,这也是我们需要学习的地方。那这里可能会有小宝宝想问,这个怎么判断五子成一线的呢?看这个代码只是传入了一个点的横纵坐标啊。对,我们就是从这个点的横纵坐标入手,检测它的左边是不是有连续的棋子?有几个?成不成5个?如果左边没有完成成5子,检测右边,如果两个加起来还是没有5子相连,那稳了,水平方向上没有成5子;下来就看纵向有没有成5子,判断方法和水平的一样。左斜和右斜同理:

图片

这里我们定义了一个MAX_COUNT_IN_LINE,用来表示一行最大数,上面的代码还是很容易理解的,我们需要学习的是

图片这种写法,当然前提是要知道它的含义,还记得我们之前说的,每个点都存放在了List中,黑棋有黑棋的List,白棋有白棋的List:

图片

那么现在我们需要检测的是(x-i,y)这个点是否有着棋子,而且是同类型棋子。所以我们直接调用List中的contains方法即可。

    上面只给出了水平方向上判断五子的代码,那竖直方向,左斜右斜是一样的道理。只是要注意一下坐标值该怎么变化,进行相应的改变就可以了。

    那我们逻辑判断就写出来了,但是别忘了在合适的地方使用它们:

比如我们绘制棋子的时候,如果已经判断游戏结束,用户就不应该再落子有效。所以onDraw()中肯定是需要有一个判断的。

好,我们给大家看一下效果:

视频地址:https://v.qq.com/x/page/a1322ov2jd3.html

007

https://v.qq.com/x/page/j1322b4xlwm.html

008


原创不易,请多多支持与关注~

猜你喜欢

转载自blog.csdn.net/allein_STR/article/details/113987840