首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

​Scratch双人五子棋(初阶)

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

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

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

编辑|张毅

审核|吴新

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCRZCImr_SuFdL8QmXb1WHXg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券