APP下载

Scratch小游戏

2021-06-24陈新龙

电脑报 2021年3期
关键词:竖线五子棋落子

陈新龙

五子棋相信大家都玩过,当黑子或者白子横、竖、斜连成五子,游戏结束,获得胜利,但是如何在编程中根据五子棋的规则实现胜负判定还是很难的,更别说实现与人机对战功能了。作为初学者我们可以先实现一个小目标,等掌握更多编程知识后再向更高难度进发。五子棋可以分为人机对战和人人对战两种形式,人机对战需要用到复杂的算法,我们就先尝试制作人人对战,先完成棋盘的绘制,两个玩家用黑子、白子交替落子。至于判断哪一方的五子先连成一条直线也可以放在以后再来想办法完成。

目标明确后,再来分析目标明确需求。需要先完成五子棋盘的绘制,接下来完成黑(白)子跟随鼠标运动,棋子的圆心要落在棋盘的交叉点上,双方交替落子,一个交叉点只能落一颗棋子,不能在棋盘外落子(图1)。

1. 绘制棋盘

棋盘由黑色的竖线和横线交叉组成。在舞台上找到一个合适的起始点,画一条竖线,通过循环次数控制线的数量,用继续平移X坐标的方法画出剩下的线,画横线只需交换X和Y轴的变量即可完成。

新建变量“画笔坐标”来控制绘制线条X轴或Y轴的起点,画笔颜色设为黑色。根据舞台大小设置两条线相隔距离为20像素比较合适,这样画16条线就可以铺满舞台。找一个合适的起始点(-198,-160),向上画一条300长的竖线(20×15=300),将“画笔坐标”增加20,下一条线的起点就是在X轴方向平移20。循环16次,画出全部竖线。横线和竖线是一样的画法,只需要调换XY坐标的变量。完成棋盘后广播“黑子”,等待执黑先行落子(图2)。

2. 棋子编程

接下来解决黑子和白子的落子问题。在造型中绘制一黑一白兩个圆形棋子作为角色。我们使用画笔的图章功能实现落子,图章功能与克隆不同点在于只在当前位置画下一个角色的图形,而没有继承角色的代码,且不像克隆体有数量上限。

这部分的难点是落子的位置,落子需要在棋盘交叉点的中心,因为鼠标不可能精准地落在交叉点中心,所以需要把这个交叉点范围内的落子经过数学计算处理。在绘制棋盘时已经知道每个交叉点的坐标都是20的整数倍,把两个交叉点间距离平分则一个交叉点对应半径为10的圆形区域。这样我们就将需求转化成一个数学取整的问题了。

假设交叉点坐标为(X,Y),鼠标的坐标可能是(X+a,Y+b),且-10

比如,假设交叉点为(40,80),鼠标指针为(43,82)按照上述公式计算可以得出最后的落点位置是交叉点(40,80)。

解决了落子问题,接下来有几个问题需要大家去思考一下,如何保证落下的棋子不会落在棋盘外面呢?可以根据棋盘的坐标范围做一个判断,超出不能启动图章功能(图4)。

最后不要忘记了还有最为关键的胜负判定,大家可以思考一下,通过什么方式可以实现,这个知识以后我们再讲。

猜你喜欢

竖线五子棋落子
我和爸爸拼棋艺
滑稽五子棋
琴(外一首)
武安平调落子研究文献调查分析
落子沧州
石子变水果
象形文字走走看
一字千进(6)
学下五子棋
夏日五子棋