第十课 坦克大战

今日任务:

将经典游戏《坦克大战》还原于scratch程序中,让学生体验真实游戏的设计流程和思路。

(1)玩家可以操控一辆己方坦克进行上下左右移动,在移动过程中,坦克会被障碍物阻挡无法逾越,必须绕道,玩家可以按下A或B键发射子弹,为了避免子弹的连发,程序中添加了防止连发的指令;当玩家的子弹击中障碍物,障碍物会短暂消失,然后还会再度出现,同时,当子弹击中了地方坦克,地方坦克会消失,一会儿还会随机出现。

(2)地方坦克会在第三个不同的位置随机出现,并且可以边移动边发射子弹,敌方子弹击中障碍物会击毁障碍物,同时,敌方坦克击中castle或者击中己方坦克,游戏gameover!

本课重难点:

(1)如何实现己方坦克通过判断炮管的位置向不同方向发射子弹?

(2)敌方坦克在地图中应该如何移动?

(3)敌方坦克碰到障碍物应该作何反应?

(4)敌方坦克向不同方向开火问题如何解决?

(5)我方坦克、敌方坦克击中不同目标的判断?

(6)游戏失败的定义?

../../../_images/TK1.png

任务拆解:

../../../_images/TK2.png

程序分析:

(1)背景:可分为正常背景和失败背景;

(2)己方坦克:Xtron的上下左右键控制坦克的移动;A或B键控制坦克发射子弹;发射子弹的瞬间判断坦克的朝向,可以实现向四个不同的方向发射子弹;被障碍物阻挡做出反应;

(3)敌方坦克:在屏幕指定位置出现;在屏幕上移动,移动过程中碰到障碍物和边缘做出反应;可以向四个不同的方向发射子弹;

(4)障碍物:被击中后一段时间内消失不再出现;阻挡坦克。

动手操作:

第一步:搞定背景,共两个背景1和2;1为白色背景,2为game over背景!

../../../_images/TK3.png

第二步:搞定己方坦克(Sprite1)。

../../../_images/TK4.png

首先完成Sprite1的绘制工作:

../../../_images/TK5.png

然后搞定Sprite1的脚本:

(1)控制己方坦克上下左右移动的脚本,不解释。

../../../_images/TK6.png

(2)向不同方向开火的脚本的解决方案。

../../../_images/TK7.png

(3)在移动中碰到障碍物或者被敌方坦克子弹击中的解决方案。

../../../_images/TK8.png

第三步:己方坦克(Sprite1)发射子弹解决方案。

../../../_images/TK9.png ../../../_images/TK10.png ../../../_images/TK11.png ../../../_images/TK12.png

第四步:障碍物解决方案。

../../../_images/TK13.png ../../../_images/TK14.png

第五步:敌方坦克解决方案。

../../../_images/TK15.png ../../../_images/TK16.png

第六步:己方坦克子弹解决方案。

../../../_images/TK17.png ../../../_images/TK18.png ../../../_images/TK19.png

第七步:castle“老巢”解决方案。

../../../_images/TK20.png ../../../_images/TK21.png

学案中没有列举出更多的程序,比如另外两个敌方坦克、敌方坦克子弹和其他障碍物的脚本,大同小异,请自行设计!

课后反思:

(1)该游戏中没有设置胜利的条件,思考一下?

(2)如何实现坦克朝着castle的方向移动攻击,而不是漫无目的的闲逛?

(3)作为一个游戏来说,没有添加计时器和积分变量显然是不合适的,自行添加吧!