本章我们来添加游戏中吃苹果的程序,首先在角色库中选择一个苹果角色“Apple”,并在舞台区中根据绿色小球(蛇的一节身体)的大小来调整苹果的大小,如图26-1所示。
图26-1 添加苹果角色并调整大小苹果角色的程序和最开始绿色小球的程序相似,我们要设定两个变量appleX和appleY来保存苹果的坐标,如图26-2所示。
图26-2 创建2个新变量将苹果的初始坐标设定为(0,4),这主要是为了避开蛇的初始位置。然后按照绘制蛇的方法来绘制苹果,即移动到对应的格子。下面回到蛇角色的程序来实现贪吃蛇吃苹果的程序,即当遇到苹果时,蛇身会增长。贪吃蛇的增长实际上就是当蛇头碰到苹果时不删除蛇的最后一节,所以我们在“移动snake”函数中进行修改,程序如图26-3所示。
图26-3 修改“移动snake”函数的程序程序中,我们添加了一个判断语句,条件是蛇头是否碰到了苹果,即appleX是否等于snakeHeadX,同时appleY是否等于snakeHeadY,如果这个条件不成立,就要删除列表中的最后一项;如果成立就不用删除,并广播一条消息“eating”。运行程序,当蛇经过苹果时,两个列表就都会增加一项,同时你会发现蛇的身体增长了一节,运行效果如图26-4所示。
图26-4 程序运行效果这时你会发现这个苹果并没有消失。当蛇通过苹果之后再碰到苹果时,两个列表又会增加一项,同时蛇的身体会再增长一节。要想让苹果换一个位置出现,就需要修改苹果角色的程序,如图26-5所示。
图26-5 修改苹果角色的程序苹果角色在接收到消息“eating”时,会产生一个随机的位置,这个位置也是按照格子出现的,理论上来说,水平方向上是12~12,垂直方向上是-9~9。不过因为-12、12的位置以及-9、9的位置分别是屏幕的左、右和上、下边缘,不能出现苹果,所以这个随机位置的坐标范围应该是-11~11、-8~8。除了边缘的问题外,还有一个可能存在的问题是苹果有可能会出现在蛇的身体上。为了解决这个问题,我们需要对苹果的位置与蛇身体每一节的位置进行判断,只有在没有重合的情况下才会认为苹果新的位置有效。理论上我们应该像绘制蛇的身体一样,用一个序号来提取列表中的每一个值,不过在Scratch当中可以用一个简单的方法—判断颜色碰撞或判断角色碰撞,程序如图26-6所示。
图26-6 判断苹果和蛇是否碰撞的程序这里我用的方法是判断颜色碰撞,只有当没有碰到绿色小球的绿色时,苹果的新位置才有效,此时将苹果移到新的位置。这样苹果角色的程序就完成了,我们还剩下对游戏是否结束的判断需要完成,主要是判断蛇头的状态,它不能碰到舞台边缘,也不能碰到自己。创建一个“失败检测”函数,如图26-7所示。将“失败检测”函数放在“绘制snake”函数之后,“失败检测”函数中的内容就是两个由“如果…那么…”指令模块构成的判断,一个判断蛇头是不是碰到了自己的绿色小球,另一个判断蛇头是不是碰到了舞台边缘,这两个判断的结果有任意一个为“是”,都会停止运行所有的程序,程序如图26-8所示。
图26-7 创建“失败检测”函数
图26-8 完成程序这样贪吃蛇所有的功能都实现了。
发表评论 取消回复