黄道燚,陈敏敏
(汕尾职业技术学院,广东 汕尾 516600)
目前,全球各个国家,特别是发达国家都非常重视学生的编程教育,把编程思想从小就融入到了理科课程之中。在我国,教育部也在大力推动科技教育、创客教育的发展,指导和组织各类科技制作、创客项目的比赛。许多高校也开始培养科技教育方面的人才[1],包括培训教师、技术人员等。在汕尾职业技术学院,电子信息技术类专业也开始加入了这方面的教学,为学生的就业增加方向。文章设计了一个科技教育教学项目—“绝地求吃”,针对大部分学生对游戏都非常感兴趣的特点,让学生学在其中,乐在其中。
“绝地求吃”为一个基于APPinventor[2]的APP制作教学项目,是一个手机游戏的制作过程,制作完成后,可以安装到学生的手机上进行娱乐,同时也是教学项目,学生从中能够学习软件制作知识,也可以自己定义规则、修改规则,增强设计能力,如图1所示。项目涵盖了若干部分的知识点,同时具备非常强的趣味性。主要的游戏内容包括:(1)玩家通过右边的遥控球来控制主球的移动,去吃掉其他的小球。(2)主球在吃掉小球的同时,要避开比自己大的红色球。(3)随着游戏的进行,主球和刷新的球逐渐变大,增加游戏难度。
学生在学习、制作的过程中,需要解决的问题和内容步骤:(1)设计一个遥控球和一个主球,完成遥控球被拖动时,计算拖动的角度,然后根据角度来控制主球的方向及速度。(2)加入其他小球,主球碰撞到其他的小球时,制造主球吃掉小球的效果和自身半径的增加(变大),以及被吃球的随机刷新。(3)设计其他小球自主随机移动,提高游戏趣味性,同时增加游戏分数以及游戏背景的设计。(4)设计主球吃球动画,对比其他小球与主球的半径数值,分离为危险球(比主球半径数值大的球,设置为警告色:红色)和安全球(其他颜色),设计主球碰到安全球则为吃掉小球,如果碰到危险球则游戏结束。(5)增加吃球、胜利、失败等音效和游戏背景音乐,增加游戏对话和游戏说明。
图1 绝地求吃游戏界面
项目的界面和组件设计包括:
(1)水平布局、垂直布局等辅助定位游戏对象的布局组件[3],在项目中的功能主要是将游戏界面和操控界面隔开,分为左右侧。
(2)画布和图像精灵、球体精灵等绘图动画组件,其功能为游戏的主体部分,包括主球、被吃球、遥控球等。
(3)按钮、计时器、音效、音频播放器、对话框等,其功能包括开始游戏按钮、控制被吃球的随机移动、图片动态效果控制、游戏音效、与用户交互等。
(4)素材处理:包括主球的图片绘制、图片透明化处理、背景图片的裁剪、音乐文件、音效文件的查找和下载等。
学生在制作项目时,需要学习如何使用上面各种组件、工具以及合理设计相关属性,同时也包括素材的处理和一些特效的制作等方法。
项目的程序采用面向对象的编程思想,下面将按照对象和过程对各个部分进行阐述。需要注意的是,主球为玩家控制的球,遥控球为玩家进行遥控的遥控杆,被吃球为除主球外的其他球体精灵。
(1)主球的遥控过程:获取遥控球被拖动前、后的坐标[4],通过下面公式可以得到遥控球拖动方向的角度θ。然后设定主球的移动方向同为角度θ,设置主球移动速度为5 P×s。如果遥控球被释放时,则设置遥控器回到起点坐标,同时停止主球。实现主球受遥控球的控制移动。
(2)主球的吃球过程:当遥控球碰撞到其他被吃球时,则进行吃球PK判断,对比主球与被吃球的半径数值。如果被吃球半径数值大,则调用结束游戏过程、播放失败音效。如果主球半径数值大,则制造吃掉被吃球的效果,将被吃球进行移动,调用球刷新的过程,同时进行游戏分数增加、主球半径数值增加、吃球音效播放。
(3)球刷新过程:对被吃球进行随机移动,移动之后对当前位置进制判断,判断是否刷新在主球上表面,如果在主球上表面,则要重新移动位置和判断。判断过程如下:计算被吃球和主球的中心点坐标,由于APPinventor软件系统采用顶点来作为对象的坐标[5],所以被吃球中心的X,Y坐标可以由其X,Y坐标分别加上半径R得到。而主球使用正方形的结构,则为X,Y坐标分别加上其高或宽的一半数值,可得到中心坐标。得到两者中心点后,进行两者中心点距离计算:
得到两者中心点距离后,再与两者的半径之和的数值进行比较,如果距离L数值大,则说明两者不重叠,该点合理,不需要重新移动,否则需要重新移动,并再次重复判断。
随机设置该被吃球半径数值,数值范围在主球半径数值上下5个像素内,使得刷新的球,出现危险球和非危险球的概率相等,设置完毕后进行危险球判断。
(4)危险球判断过程:采用循环历遍所有被吃球与主球进行半径数值比较。半径数值比主球大的,设置为危险球,颜色修改为警戒颜色(红色);半径数值比主球小的,则不设置危险球,颜色设置为除红色外随机其他颜色。每当主球半径增加或球刷新,都进行一次危险球判断过程的调用。该过程能够帮助玩家判断主球与被吃球的半径大小关系。
(5)分数显示过程:在画布左上方画出线宽为35像素、长度70像素的黑线作为游戏分数文字的背景,然后在黑线进行分数显示。每当主球成功吃到被吃球时,进行分数的增加和分数显示过程调用,或者开始游戏时需要改变分数,都进行分数显示过程调用。
(6)被吃球随机移动过程:使用计时器,每隔1.5 s,采用循环历遍各个被吃球,对其移动方向和移动速度进行随机设置,使被吃球运动轨迹多变,增加游戏难度和趣味性。
(7)被吃球到达边界处理:当被吃球到达边界时,根据被吃球对边界的入射角度进行反弹。
(8)显示游戏tips过程:打开APP,游戏开始,分数累计到10的倍数时使用对话框进行一些游戏tips展示[6],例如:在开始游戏时进行游戏玩法提醒:“朋友,红色的球能够干掉你!诺,右边那个大球就是遥控杆。”APP打开时则进行随机聊天语句,例如:“欢迎回来,朋友!”或者“看呐!水里有好多球!”等;而分数到达10的倍数时,进行随机鼓励语句,例如:“干得好!就是这样的!”“你就是个天才!”等,增加游戏的趣味性。
(9)开始游戏过程和结束游戏过程:开始游戏过程主要是对主球的初始数值、游戏分数值、计时器、游戏tips、遥控杆、背景音乐等的设置和启用,包括半径、速度、角度、计时值等。游戏结束过程则基本与开始游戏过程想反,包括关闭计时器、关闭背景音乐,禁用主球、被吃球、遥控杆,停止主球和被吃球的移动等内容。
(10)屏幕初始化:被吃球对象列表的填充、进入游戏的tips展示等。
一个好的项目,一个具有趣味性的项目,对于学生的吸引力非常大,学生乐意投在其中,从中可以学习到APPinventor软件设计的完整流程,包括素材处理,软件思路设计、界面设计、逻辑程序设计、调试改错等方面,对学生的设计能力、编程能力能起到很大的提高作用。学生在项目的制作过程中,按照项目的思路和要求进行逐步深入,很好地培养了学生解决问题、创新设计、编程实践的能力。