您的位置是:少儿编程网>Scratch编程教程Scratch编程教程

跟我学Scratch第八十五讲:五子棋

少儿编程网2020-06-06 21:16:53Scratch编程教程 人已围观 来源:少儿编程 -用户投稿

简介五子棋这个游戏之前有想过要做,但是一直没动手,上周末终于动手做了一个,五子棋的游戏倒是没有什么特别复杂的地方,关键就是需要针对各种情况的特殊处理。当我们玩游戏的时候,都会有游戏规则,当我们遵守游戏规则的时候,游戏就会很顺畅。但是对程序来说,当有违反游戏规则的动作发生时,程序如何响应就成了游戏好坏的关键。遵守游戏规则只有一种情况,做起来往往不难,但是违反游戏规则的情况就会有很多种,如何提前把这些情况规划好,并做到程序中就是一个辛苦活了。

前言9XC少儿编程网-https://www.pxcodes.com

五子棋这个游戏之前有想过要做,但是一直没动手,上周末终于动手做了一个,五子棋的游戏倒是没有什么特别复杂的地方,关键就是需要针对各种情况的特殊处理。当我们玩游戏的时候,都会有游戏规则,当我们遵守游戏规则的时候,游戏就会很顺畅。但是对程序来说,当有违反游戏规则的动作发生时,程序如何响应就成了游戏好坏的关键。遵守游戏规则只有一种情况,做起来往往不难,但是违反游戏规则的情况就会有很多种,如何提前把这些情况规划好,并做到程序中就是一个辛苦活了。9XC少儿编程网-https://www.pxcodes.com

 

游戏演示9XC少儿编程网-https://www.pxcodes.com

   

游戏思路9XC少儿编程网-https://www.pxcodes.com

 

1:首先画个棋盘(这个比较容易,CC哥画了个真实的围棋盘,19*19的。有了棋盘,其实每个落子点的位置都是可以计算出来,这样位置信息就可以对应成编号信息)9XC少儿编程网-https://www.pxcodes.com

2:黑子和白子的落子程序(CC哥这点还是想做的生动些,不会象有些例子里做的,用鼠标一点,就出来个白字或黑子,CC哥想做成从棋盒里拿起一颗子,然后再拖动到棋盘上)9XC少儿编程网-https://www.pxcodes.com

3:尽可能的处理好规则(也就是程序要判断出来落子的顺序,包括落子位置是否合理,比如是否落在棋盘上,或者是否落在了下过子的位置。)9XC少儿编程网-https://www.pxcodes.com

4:胜败的检测(每落一子,就要检测是否有输赢,5个棋子四个方向如果连成一条线就算胜利,是否有**简单的算法来检测输赢)9XC少儿编程网-https://www.pxcodes.com

 

代码讲解9XC少儿编程网-https://www.pxcodes.com

 

01.棋盘9XC少儿编程网-https://www.pxcodes.com

首先画棋盘的代码CC哥就不讲了,因为代码太多了,只讲关键点就好。棋盘大家需要知道的是:9XC少儿编程网-https://www.pxcodes.com

1:棋盘横竖的间隔是17。9XC少儿编程网-https://www.pxcodes.com

2:棋盘上每一个点的编号是从左到右,从上到下来编号,左上角是1,右下角是361。9XC少儿编程网-https://www.pxcodes.com

知道这些,根据编号,你可以算出任何一个落棋点的位置,同时也可以根据位置,算出任何一个落棋点的编号。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋  

很多初学者在看帖子的时候总会问一些基础的问题,CC哥的建议是,从头开始学,从第一讲开始看,循序渐进。否则后面的课程,很多技巧和方法你是不知道和不熟练的。CC哥是不可能给你回答个人的提问的。比如这个画棋盘,只要有scratch编程基础的都能够做到。9XC少儿编程网-https://www.pxcodes.com

   

02.棋盒9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

棋盒的图片,CC哥从网上找的,自己加工的,看着还很逼真吧。9XC少儿编程网-https://www.pxcodes.com

CC哥要实现的效果是用鼠标点一下棋盒,就会有一个黑棋出现在鼠标指针上,然后按住鼠标拖到棋盘上某个位置,松开鼠标,棋子就会自动落在**近的一个落子点上。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十四讲:五子棋9XC少儿编程网-https://www.pxcodes.com

这段是黑棋盒对应的代码,黑白棋盒都是对应的,所以CC哥只讲一个就行了,白棋盒的代码基本逻辑上都是一样的,在这里就不重复讲了。9XC少儿编程网-https://www.pxcodes.com

这里面有两点需要注意:9XC少儿编程网-https://www.pxcodes.com

1:用一个角色的事件去激活另一个角色的事件。黑色棋子的克隆是被棋盒角色的事件激活的。(用鼠标点击棋盒)9XC少儿编程网-https://www.pxcodes.com

2:用黑子落子过程这个变量来锁住这个落子过程不被干扰。(比如如果没有这个变量的检测,那么这个碰到指针与按下鼠标这个操作就不是只克隆一个棋子,可能因为程序执行的很快,就会一瞬间克隆出几个棋子)9XC少儿编程网-https://www.pxcodes.com

03.黑棋的代码9XC少儿编程网-https://www.pxcodes.com

黑棋和白棋的代码基本都差不多,所以就只讲黑棋了。9XC少儿编程网-https://www.pxcodes.com

棋子的代码稍微复杂一点,主要是保证落子过程的数据收集,以及违法游戏规则的代码。9XC少儿编程网-https://www.pxcodes.com

1:克隆体生成后,在松开鼠标之前始终跟着鼠标指针。9XC少儿编程网-https://www.pxcodes.com

2:如果棋子的落点不在棋盘上,就是无效落子。9XC少儿编程网-https://www.pxcodes.com

3:如果是落在了棋盘上,就要进行位置修正,把棋子调整到**近的一个落子点上。9XC少儿编程网-https://www.pxcodes.com

4:如果落子位置已经有了棋子,那么要报错,提醒此处不能落子。9XC少儿编程网-https://www.pxcodes.com

5:如果下棋顺序出现错误,要提醒该对方下棋。9XC少儿编程网-https://www.pxcodes.com

6:如果落子没有问题,要存储落子的信息以及进行输赢判断。(存储落子信息这部分主要是为了两个目的,一个是把棋盘存起来,这样可以随时恢复棋盘。一个是把下棋的步骤存储起来,在棋局结束后可以进行复盘。)9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com
跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

这是第1、2步的代码9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com
跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

这是第3、4步的代码9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com
跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

这是5、6、7步的代码9XC少儿编程网-https://www.pxcodes.com

可能看不太清楚哈,不过大家掌握上面讲的思路就没问题了。9XC少儿编程网-https://www.pxcodes.com

检测输赢这部分,CC哥通过另一个角色来做的,在这里就是广播了一条消息来启动输赢检测,同时用全局变量把落子的坐标传递过去。9XC少儿编程网-https://www.pxcodes.com

 

检测代码9XC少儿编程网-https://www.pxcodes.com

 

检测这部分首先CC哥单独创建了一个角色,其实就是一个点。检测的逻辑就是:9XC少儿编程网-https://www.pxcodes.com

1:检测启动后,检测点先跑到刚刚落子的坐标点上。9XC少儿编程网-https://www.pxcodes.com

2:然后进行4个方向的依次检测,一旦检测到有5子相连的情况就宣布获胜。9XC少儿编程网-https://www.pxcodes.com

3:检测5子相连的方法是先沿着要检测的方向一直移动到连子的尽头端,然后反方向移动,移动的过程中来数连子的数量,如果够了5个就宣布获胜。9XC少儿编程网-https://www.pxcodes.com

当然,也可以有别的方法来检测,因为我们已经用列表存储了所有的棋子位置,那么就可以用数学的算法来算出每个方向的连子的数量,来判断输赢。但是CC哥觉得好麻烦,如果数学不是足够好,是很难写出对应的数学公式的。所以CC哥用了这个更容易让小朋友理解的方法,是不是有点巧妙呢?9XC少儿编程网-https://www.pxcodes.com

注意:这个检测的角色就是一个点,你只要把它的透明度设定为100, 那么就是不可见的点,但是仍然可以进行碰撞检测。大家千万不要设成隐藏哦,设成隐藏是无法进行碰撞检测的。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

这个角色的代码很多,但是都很好理解,CC哥不全部截屏了,大家举一反三,其他的部分自己写就好了。9XC少儿编程网-https://www.pxcodes.com

这段程序应该好理解,**后一部分,如果连子数量已经达到了5,那么就要做两件事情:9XC少儿编程网-https://www.pxcodes.com

1:宣告黑方或白方获胜9XC少儿编程网-https://www.pxcodes.com

2:要把5连子框出来,让玩家知道哪5个子连起来了。(这点很重要,因为CC哥经常下5子棋的时候,赢了都不知道已经赢了)9XC少儿编程网-https://www.pxcodes.com

如果做到这一点就需要把这个连子的方向记录下来。因为提示框的长度跟方向有关,横竖的提示框短,而斜方向的提示框要长些。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

获胜的特效和提示框CC哥不怕麻烦的单独用了两个角色来处理,目的就是想让代码更简单和更容易理解。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

 

复盘9XC少儿编程网-https://www.pxcodes.com

 

复盘就是把存好的下棋记录一一还原。所以复盘也是一个角色,用来放复盘的代码和棋子的造型。我们用了棋局回顾这个列表来存储所有的落子记录。那么就根据这个记录进行还原就好。(根据列表的每一项的数据算出落子位置)代码就不详细讲了,把主代码贴出来。9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com
跟我学Scratch第八十五讲:五子棋9XC少儿编程网-https://www.pxcodes.com

需要注意的是,在存储落子记录的时候,虽然我们程序严格执行了黑先白后的规则,所以理论上奇数的项都是黑子,偶数项都是白字。但是CC哥还是比较强迫症的在存储落子记录的时候在末位补了一位黑白子的信息位。如果是黑子就补个1,如果是白子就补个0。在这里说明一下,省的大家在看公式的时候搞不清楚为啥还要乘以10再加个1。这样列表的每一项里其实包含了两个信息,一个是棋子的位置,一个是棋子的颜色。9XC少儿编程网-https://www.pxcodes.com

 9XC少儿编程网-https://www.pxcodes.com

来源  CC哥教你编程9XC少儿编程网-https://www.pxcodes.com


相关文章:

支持一下 ( )

跟我学Scratch第八十五讲:五子棋

      匿名评论
    • 评论
    人参与,条评论
    少儿编程网

微信公众号

免费视频教程

先知道