AppInventor射击游戏.docx
《AppInventor射击游戏.docx》由会员分享,可在线阅读,更多相关《AppInventor射击游戏.docx(23页珍藏版)》请在冰豆网上搜索。
AppInventor射击游戏
Android应用程序开发
结课报告
软件名称:
AppInventor2
班级:
xxxx
学号:
xxxx
学生:
xxxx
指导教师:
xxxx
2015年4月24日
1综述
1.1应用介绍
<<虫虫来袭>>是一款单人射击游戏。
游戏中玩家扮演一个女孩,面对不断出现的虫子,进行射击。
随着分数的增加,虫子的速度越来越快,关卡上升,出现不同的大Boss。
女孩必须躲过虫子的冲撞才能存活下来。
1.2开发的目的与目的
GoogleAppInventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式。
对于Android初学者或是机器人开发者来说是一大福音。
他们不大需要太华丽的界面,只要使用基本元件例如按钮、文字输入输出即可。
非常适合学习与有兴趣的学生进行开发创造。
1.3类似的产品
游戏中,单人射击游戏很多。
但是利用AppInventor编程环境开发的却少之又少。
本次课程设计试一次尝试,AppInventor到底能开发出什么样水准的游戏出来。
1.4开发环境
AI2中文版在线开发
1.5开发环境的搭建
1.登陆网址:
2.找到中文版在线开发
3.进入:
contest.appinventor.mit.edu/login/
4.利用进行注册选择中文即可进行中文版开发。
2开发详解
2.1开发所用到的素材展示
游戏所用到的素材
素材名
类型
用途
素材名
类型
用途
back1~back12.png
图片
游戏界面的背景图片(随机)
Boss1~boss20.png(随机)
图片
小怪的贴图
Boom1~boom5.png
图片
爆炸效果的图片(渐进)
bossHP.png
图片
Boss血量的贴图
BossZidan.png
图片
BOSS的子弹贴图
Class.png
图片
关卡的贴图
HP.png
图片
女孩血量的贴图
Ic.jpg
图片
应用图标的图片
nvhai.png
图片
女孩的贴图
NO1.png
图片
排行榜第一名贴图
NO2.png
图片
排行榜第二名贴图
NO3.png
图片
排行榜第三名贴图
nvhaiZidan.png
图片
女孩子弹的贴图
SC.png
图片
分数的贴图
scoreBack.png
图片
排行榜页面背景
Zaoze1.png
图片
怪物出现位置贴图
Zaoze2.png
图片
怪物出现位置贴图
Baozha.mp3
音效
子弹爆炸音效
zidanM.mp3
音效
子弹发射音效
nvhaiM.mp3
音效
女孩受伤音效
Screen1BackMusic.mp3
音乐
主菜单界面音乐
mainBack.mp3
音乐
游戏界面音乐
BossTimeMusic.mp3
音乐
Boss出现的音乐
scoreBackMusic.mp3
音乐
排行榜界面音乐
settleBackMusic.mp3
音乐
设置界面的音乐
素材截图
2.2主界面的设计
2.2.1主界面的效果预览图
2.2.2主界面的前端设计
主界面组件设计如下所示:
主菜单界面用到的控件有7个,分别是:
Layout:
垂直布局,Label:
gameName,Button:
start
Button:
settle,Button:
exit,音频播放器:
backMusic,微数据库:
database
这是游戏的主菜单界面,点击开始,设置,排行榜分别跳转到相应界面:
main(游戏界面),settle(设置界面),score(排行榜界面)。
点击退出键则退出应用。
具体控件的属性设置依照屏幕大小自行调整。
2.2.3主界面的逻辑设计
按钮的点击函数:
逻辑界面主要处理按钮的点击事件,根据相应的屏幕名称调用“打开屏幕”的动作,打开相应的界面。
Screen1的初始化函数:
条件语句处理调用数据库中标签“music”的值,此值用来记录settle界面中设置的音乐是否允许播放。
如果此值为1,或者还未记录(返回值1,表明第一次打开此界面,默认允许播放音乐),则播放此界面的背景音乐“Screen1BackMusic.mp3”。
2.3游戏界面的设计
2.3.1游戏界面的效果预览图
在此有必要先介绍一下游戏规则,以便更好的理解逻辑的设计:
1.开始时女孩血量为10,初始化计分板信息。
2.小怪从四角的云朵里出现,随机进行移动,一次只出现一个小怪。
3.女孩可以进行移动,可以点击屏幕的任何地方,进行射出子弹的操作。
每次只能射出已发子弹。
4.小怪的移动速度随着分数的增加而加快。
5.当分数达到10的倍数时,BigBoss出现,血量,速度根据关卡增加。
6.BigBoss出现时小怪不出现,计分板不记录分数,背景音乐改变。
7.当BigBoss死亡时,游戏出现小怪,计分继续。
8.当女孩血量减少到0时,弹出对话框,提示是否继续或终止游戏。
9.选择对话框相应选项进行相应的操作。
2.3.2游戏界面的控件设计
设计界面如下图:
控件使用情况:
Main界面的控件个数为9(layoutmain计分板)+10(CanvasGround画布)+9(其他)=28:
1.其中计分板中有四个图像控件,四个标签。
2.画布中有nvhai(女孩),BigBoss(大怪),zaoze1~zaoze4(记录虫虫出现的位置,四角个一个),
Zidan(子弹),boss(小怪),boom(记录爆炸图像位置)共九个图像精灵。
3.ISwin(对话框):
用于显示结束游戏的消息。
4.MovezidanClock(计时器):
用于跟踪nvhai的位置,更新子弹的位置坐标。
属性设置为:
计时间隔:
10
启用计时:
true
一直计时:
true
5.setBoomImage(计时器):
用于更新爆炸的图片,实现帧动画效果。
属性设置为:
计时间隔:
1
启用计时:
false
一直计时:
false
6.nvhaiM,zidanM,baozhaM(三个音效控件):
分别控制女孩受伤时,子弹发射时,子弹击中怪物时发出音效。
最小间隔设为:
500
7.MainMusic,BossTimeMusic(两个音乐播放器):
分别控制默认背景音效与BigBoss出现时的背景音效。
属性设置:
循环播放:
true
只在前台播放:
true(界面被压回会自动停止)
8.scoredatabase(微数据库):
用来读取数据库中的信息,判断是否播放背景音。
关于数据库的使用文章最后会给出说明。
2.3.3游戏界面的逻辑设计
概览31块逻辑块:
由于main界面的实现函数较多,我将以实际的游戏流程解释说明所有函数:
先来看几个全局变量的定义:
HP:
女孩的血量信息,初始化为10.
BigBossHP:
大怪的血量信息,初始化为0.
MAXHP:
最大血量10.
CLASS:
关卡初始化为1.
Point:
分数初始化为0.
先看定义的几个过程,之所以写成过程函数,因为他们经常被调用,写成函数能有效减少代码量。
1.初始化main界面的函数:
关于标签“music”的作用,之后有解释。
2.initMain函数用到的函数:
初始化计分板,设置计分板,初始化女孩,初始化子弹,初始化小怪如下:
由于都是进行一般的属性值设置,仔细阅读各个属性的初始值,关系到事件的响应条件。
现在主要关注函数的调用:
Initzidan中调用函数zidanBacktoNvhai函数,使zidan(图像精灵)始终在nvhai位置上,并初始时不显示。
函数如下:
3.几个重要的事件处理:
(1)女孩移动事件,涉及函数:
当nvhai精灵被拖动时,改变位置,并利用计时器始终更新zidan的位置跟随nvhai。
判断子弹速度表明:
当子弹速度不为零,说明在运动中,此时子弹不响应任何操作。
(2)子弹的发射事件:
判断子弹速度,如果子弹在飞行中(速度不为零),触发操作。
调用标签值“sound”,读取是否开启音效,进行相应操作。
之后几个函数中有类似控制音效或者音乐的操作。
(3)各个精灵到达边界事件:
需要说明的是子弹到达边界后,立即初始化操作,移动到nvhai所在的位置。
保证没回子弹都是从nvhai精灵位置处发射。
(4)Zidan的碰撞事件:
说明:
子弹碰到小怪或者BigBoss,执行不同的操作。
首先判断是否播放音效,之后调用playBoomImage函数播放爆炸画面。
此细节在(8)中有详解。
如果子弹碰到小怪,则初始化zidan,boss(小怪),Point值加一,设置计分板,调用ISBigBoss判断是否应该出现BigBoss。
如果子弹碰到BigBoss,初始化子弹,减少BigBossHP值,判断BigBossHP是否为零,是则停止隐藏BigBoss,改变音乐,并初始化小怪initBoss。
相应函数如下:
playBoomImage,ISBigBoss分别在(8),(5)中讲解。
(5)BigBoss的生命周期:
在(4)中调用ISBigBoss函数,就是判断分数是否达到出现BigBoss的情况。
如果达到,则停止小怪活动,初始化BigBoss,设置随机贴图,设置随机位置,设置显示状态,速度等属性。
(6)Nvhai的碰撞事件:
当女孩被Boss或者BigBoss碰到后,播放音效,HP减少,更新计分板的值,判断是否结束游戏,HP=0时存储分数数据库。
saveScore函数操作:
在数据库中设置三个标签,依次进行比较,储存游戏成绩。
排行榜只显示前三名。
getISwin显示对话框,如下(7)中所示。
(7)对话框事件:
显示对话框,并进行选择完成完成的事件操作:
选择“是”则初始化main,重新游戏。
选择“不要”则返回Screen1屏幕。
(8)爆炸播放帧动画:
播放帧动画的部分利用了控件setBoomImage(计时器),playBoomImage函数调用boom精灵到发生子弹碰撞的位置,显示图片为boom1,之后利用计时器间隔1ms的时间切换图片,依次播放5图片,展示爆炸效果。
之后设置setBossImage状态为false,boom状态为false,等待下一次调用。
至此main所有逻辑31块逻辑块均已展示完毕。
函数调用关系很繁琐,每一时刻的精灵们的状态至关重要,是展示正常游戏所必须完全了解的,否则极容易出错。
2.4设置界面的设计
2.4.1设置界面的效果预览图
2.4.2设置界面的控件设计
设置界面需要的控件:
一个垂直布局下的四个水平布局。
第一个水平布局显示文字:
设置
中间两个水平布局分别左右各一个占位标签,中间一个按钮,显示音乐音效设置。
第四个水平布局占位用。
一个微数据库:
注意,一个应用只有一个微数据库,main界面的database与排行榜界面的database,虽然名字不同,但是是一个数据库,共用标签值。
一个音乐播放器:
播放背景音乐
2.4.3设置界面的逻辑设计
设置界面共四个逻辑块。
任务相对较为简单:
Settle回压函数:
返回到主菜单界面。
Settle初始化函数:
根据微数据库中标签“music”的值,决定是否播放背景音乐。
同时设置musicButton,soundButton的图片值。
按钮点击事件:
两个按钮分别转换标签“music”,“sound”的值,从而达到点击一次,进行开关的效果,每次点击后,都要更新微数据库的标签值(1表示允许播放,0表示不允许播放),以供其他界面使用。
同时更新按钮的图片值,使之符合设置意图。
同时更新当前页面的音乐播放设置。
2.5排行榜界面的设计
2.5.1排行榜界面的效果预览图
2.5.2排行榜界面的控件设计
此界面所用到的控件有:
标签:
显示文本“排行榜”
垂直布局:
三个水平布局
每个水平布局下一个图像控件,一个标签控件。
图像控件显示王冠图片,标签显示分数。
微数据库scoredatabase:
读取分数数据使用。
音频播放器:
播放背景音乐。
2.5.3排行榜界面的逻辑设计
Score初始化操作:
读取数据库中的三个值,分别为第一名,第二名,第三名的成绩。
通过设置文本值显示出来。
值的存储是在main界面的saveScore函数中进行的实现。
判断是否进行背景音乐的播放。
Score压回事件:
返回到Screen1界面。