安卓飞行射击游戏实训报告_第1页
安卓飞行射击游戏实训报告_第2页
安卓飞行射击游戏实训报告_第3页
安卓飞行射击游戏实训报告_第4页
安卓飞行射击游戏实训报告_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、天津电子信息职业技术学院结课报告课程名称:手机游戏开发实训课程代码:126352系 别:软件技术系专 业:游戏软件专业班 级:游戏s12-1班姓 名:李名蔚学 号:08任课教师:张桓完成时间:2013年12月30日至2013年1月10日 目录第一章 任务简介1.1开发背景。11.2开发技术及当前发展趋势。21.3软硬件开发环境和开发工具。31.3.1软件环境。31.3.2硬件环境。3第二章 系统设计2.1界面设计。42.2 功能设计。5第三章 系统实现3.1主类。63.2mysurfaceview类。63.3boom类。153.4boss类。163.5bullet类。18 3.6 enemy类

2、。20 3.7gamebg类。233.8gamemenu类。233.9player类。253.10 游戏运行效果。28第四章 小结。28安卓飞行射击游戏开发实训第一章:任务简介1.1开发背景相信android(安卓)已经为人们熟知,经过2011年的洗礼,android智能手机火速上位,甚至说现在手机系统由ios和android平分也不为过。随着android智能手机在中国内地的风靡,基于android平台的应用开发也逐渐成为it开发的大热门。游戏是智能机不可或缺的应用之一,“水果忍者”、“愤怒的小鸟”等android游戏应用的成功,让人看到手机游戏在android平台上的巨大发展空间。基于此,

3、采用eclipse和android adt作为集成开发平台,开发本android游戏app。随着科技的发展,现在手机的功能已不仅仅是简单的接打电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的飞机小游戏。 虽然现在市面上存在着各种各样的游戏版本,可是飞机游戏其市场还是相当大的。因为它的特殊在于人们在玩游戏的时候的过程中使爱不释手。随着游戏关卡不断提高,其难度也更大,刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺

4、利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。1.2开发技术及当前发展趋势android一词的本义指“机器人”,同时android也是google于2007年11月5日宣布的基于linux平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。2008年9月22日,美国运营商t-mobile usa在纽约正式发布第一款基于android的手机t-mobile g1。该款手机为宏达电制造,是世界上第一部使用android操作系统的手机,支持wcdma/hspa网

5、络,理论下载速率7.2mbps,并支持 wi-fi。在随后的几个月越来越多的厂商也开始宣布将提供android手机。android是一个真正意义上的开放性移动设备综合平台。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。谷歌与开放手机联盟合作开发了 android,这个联盟由包括中国移动、摩托罗拉、高通、宏达和 t-mobile 在内的 30 多家技术和无线应用的领军企业组成。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用

6、之间的通用性和互联性将在最大程度上得到保持。所有的android应用之间是完全平等的。在开发之初,android平台就被设计成一个由一系列应用所组成的平台。所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的api。撇开这个核心引擎,android的所有其他的东西都是“应用”。因此,用户甚至可以将系统中默认的电话拨号软件替换成其他第三方的电话拨号软件。你也可以改变主界面显示窗口的内容,或者将手机中任意的应用替换成你所需要的其他应用。比如图 1 3 就是android手机中缺省拨号器,应用开发人员可以很容易的开发自己拨号程序,然后用自

7、己的拨号程序将系统的拨号程序替代,图 1 4 就是我们自己开发的拨号程序将系统的拨号程序替代后在进行拨号后的结果,这些功能在别的手机平台几乎都是不可能的。android打破了应用之间的界限,比如开发人员可以把web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。例如 图 1 5 所示的google latitude程序就是将联系人和位置应用结合在一起的一个创新应用。此外应用程序不仅可以通过标准api 访问核心移动设备功能,互联网,应用程序还可以声明它们的功能可以供其他应用程序使用,比如前面图 1 4 中的拨号程序就是通过声明其具有拨号功能来实现播,而这一实现只需要一句

8、简单的声明就可以,具体如下所示,更详细的内容我们将在第三章中讲到。android平台为开发人员提供了大量的实用库和工具,开发人员可以很快速的创建自己的应用。美国知名的互联网统计公司comscore近日刚刚发布了今年三月至五月的美国智能手机市场调研报告,这份最新的报告显示 ,全美目前共有4910万用户使用智能手机,其中有8.1%的用户为近三个月来新增用户。作为打拼多年的老品牌,黑莓仍然以41.7的市占率稳居全美智能手机占有率排行版首位,其后的苹果和微软的是市占率分别为24.4%和13.2% ,特别值得一提的是,谷歌android平台的占有率以13%的市占率紧随微软的13.2%之后,android

9、平台的整体市占率增加了4%,而如果将时间跨度限制到3月至5月的这三个月内,android平台市占率增长数字甚至接近了45%。在国内,android社区十分红火,这些社区为android在中国的普及做了很好的推广作用,同时也为android 相关产品的消费提供了市场。国内厂商和运营商也纷纷加入了android阵营,包括中国移动,中国联通,华为通讯,联想等大企业。同时不仅仅局限于手机,国内厂家也陆续推出了采用android系统的mid(平板电脑)产品,比较著名的包括由rockchip和蓝魔推出的同时具备高清播放和智能系统的音悦汇w7。我们可以预见android也将会被广泛应用在国产智能上网设备上,

10、将进一步扩大andorid系统的应用范围。1.3软硬件开发环境和开发工具开发语言:java1.3.1软件环境该游戏采用eclipse集成android adt为开发平台进行app开发。eclipse是一个开放的源代码的、基于java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。虽然大都数用户很乐于eclipse当作java集成开发环境(ide)来使用,但eclipse的目标却不仅限于此。eclipse还包括插件开发环境,这个组件主要针对希望扩展eclipse的软件开发人员,因为它允许他们构建与eclipse环境无缝集成的工具。由于eclipse中的每样

11、东西都是插件,对于eclipse中的每样东西都是插件,对于给eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 基于eclipse的应用程序的插件开发诸如siemens公司的plm产品teamcenter的插件级开发。 android专门针对eclipse开发做了adt(android developer tools)开发插件,因此该应用使用eclipse开发完全可行。1.3.2硬件环境自用搭载开发环境的个人电脑自用安卓手机 华为c8813(系统4.0.3)第二章 系统设计2.1界面设计游戏初始界面游戏场景游戏结束游戏胜利2.2 功能设计

12、1.开始游戏 数据初始化 场景加载 玩家所操纵的主角拥有3点血量移动速度为52.击败敌人 游戏中随机会出现两种普通敌人 鸭子 移动速度3 苍蝇 移动速度25 血量皆为1 他们也会释放子弹攻击主角 主角在被攻击后会进入短暂的无敌状态并扣除一点血量3.击败boss 游戏的最后会出现boss猪 移动速度为3 拥有100的血量 并且会进入一定时间的属性高强的疯狂状态 同样他也会攻击主角 攻击方式要远强于杂兵4.游戏结束 玩家血量降0后会游戏结束5.游戏胜利 玩家在击败boss后会取得游戏的胜利2.2 类设计boom类 设定boss的爆炸效果boss类 设定boss的各项属性和疯狂状态下的各项属性bul

13、let类 设定主角 敌人及boss的子弹enemy类 设定敌人杂兵的各项属性gamebg类 设定游戏背景画面gamemenu类 设定游戏的菜单 mainactivity类 主类 设定游戏的全屏化mysurfaceview类 surfaceview游戏框架 游戏的主体框架构建游戏逻辑 调用各个类player类 设定玩家所操纵的主角的属性 属性大致分为 血量 移动速度 子弹速度 第3章 系统实现3.1主类主类 设定游戏的全屏化package feiji.himi;import android.app.activity;import android.os.bundle;import android.

14、view.window;import android.view.windowmanager;public class mainactivity extends activity public static mainactivity instance;public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);instance = this;this.getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, window

15、manager.layoutparams.flag_fullscreen);requestwindowfeature(window.feature_no_title);setcontentview(new mysurfaceview(this);3.2mysurfaceview类surfaceview游戏框架 游戏的主体框架 构建游戏逻辑 调用各个类package feiji.himi;import java.util.random;import java.util.vector;import android.content.context;import android.content.res

16、.resources;import android.graphics.bitmap;import android.graphics.bitmapfactory;import android.graphics.canvas;import android.graphics.color;import android.graphics.paint;import android.view.keyevent;import android.view.motionevent;import android.view.surfaceholder;import android.view.surfaceview;im

17、port android.view.surfaceholder.callback;public class mysurfaceview extends surfaceview implements callback, runnable private surfaceholder sfh;private paint paint;private thread th;private boolean flag;private canvas canvas;public static int screenw, screenh;public static final int game_menu = 0;pu

18、blic static final int gameing = 1;public static final int game_win = 2;public static final int game_lost = 3;public static final int game_pause = -1;public static int gamestate = game_menu;private resources res = this.getresources();private bitmap bmpbackground;private bitmap bmpboom;private bitmap

19、bmpboosboom;private bitmap bmpbutton;private bitmap bmpbuttonpress;private bitmap bmpenemyduck;private bitmap bmpenemyfly;private bitmap bmpenemyboos;private bitmap bmpgamewin;private bitmap bmpgamelost;private bitmap bmpplayer;private bitmap bmpplayerhp;private bitmap bmpmenu;public static bitmap b

20、mpbullet;public static bitmap bmpenemybullet;public static bitmap bmpbossbullet;private gamemenu gamemenu;private gamebg background;private player player;private vector vcenemy;private int createenemytime = 50;private int count;private int enemyarray = 1, 2 , 1, 1 , 1, 3, 1, 2 , 1, 2 , 2, 3 , 3, 1,

21、3 , 2, 2 , 1, 2 , 2, 2 , 1, 3, 1, 1 , 2, 1 , 1, 3 , 2, 1 , -1 ;private int enemyarrayindex;private boolean isboss;private random random;private vector vcbullet;private int countenemybullet;private vector vcbulletplayer;private int countplayerbullet;private vector vcboom;private boss boss;public stat

22、ic vector vcbulletboss;public mysurfaceview(context context) super(context);sfh = this.getholder();sfh.addcallback(this);paint = new paint();paint.setcolor(color.white);paint.setantialias(true);setfocusable(true);setfocusableintouchmode(true);this.setkeepscreenon(true);public void surfacecreated(sur

23、faceholder holder) screenw = this.getwidth();screenh = this.getheight();initgame();flag = true;th = new thread(this);th.start();private void initgame() if (gamestate = game_menu) bmpbackground = bitmapfactory.decoderesource(res, r.drawable.background);bmpboom = bitmapfactory.decoderesource(res, r.dr

24、awable.boom);bmpboosboom = bitmapfactory.decoderesource(res, r.drawable.boos_boom);bmpbutton = bitmapfactory.decoderesource(res, r.drawable.button);bmpbuttonpress = bitmapfactory.decoderesource(res, r.drawable.button_press);bmpenemyduck = bitmapfactory.decoderesource(res, r.drawable.enemy_duck);bmpe

25、nemyfly = bitmapfactory.decoderesource(res, r.drawable.enemy_fly);bmpenemyboos = bitmapfactory.decoderesource(res, r.drawable.enemy_pig);bmpgamewin = bitmapfactory.decoderesource(res, r.drawable.gamewin);bmpgamelost = bitmapfactory.decoderesource(res, r.drawable.gamelost);bmpplayer = bitmapfactory.d

26、ecoderesource(res, r.drawable.player);bmpplayerhp = bitmapfactory.decoderesource(res, r.drawable.hp);bmpmenu = bitmapfactory.decoderesource(res, r.drawable.menu);bmpbullet = bitmapfactory.decoderesource(res, r.drawable.bullet);bmpenemybullet = bitmapfactory.decoderesource(res, r.drawable.bullet_enem

27、y);bmpbossbullet = bitmapfactory.decoderesource(res, r.drawable.boosbullet);vcboom = new vector();vcbullet = new vector();vcbulletplayer = new vector();gamemenu = new gamemenu(bmpmenu, bmpbutton, bmpbuttonpress);background = new gamebg(bmpbackground);player = new player(bmpplayer, bmpplayerhp);vcene

28、my = new vector();random = new random();boss = new boss(bmpenemyboos);vcbulletboss = new vector();public void mydraw() try canvas = sfh.lockcanvas();if (canvas != null) canvas.drawcolor(color.white);switch (gamestate) case game_menu:gamemenu.draw(canvas, paint);break;case gameing:background.draw(can

29、vas, paint);player.draw(canvas, paint);if (isboss = false) for (int i = 0; i vcenemy.size(); i+) vcenemy.elementat(i).draw(canvas, paint);for (int i = 0; i vcbullet.size(); i+) vcbullet.elementat(i).draw(canvas, paint); else boss.draw(canvas, paint);for (int i = 0; i vcbulletboss.size(); i+) vcbulle

30、tboss.elementat(i).draw(canvas, paint);for (int i = 0; i vcbulletplayer.size(); i+) vcbulletplayer.elementat(i).draw(canvas, paint);for (int i = 0; i vcboom.size(); i+) vcboom.elementat(i).draw(canvas, paint);break;case game_pause:break;case game_win:canvas.drawbitmap(bmpgamewin, 0, 0, paint);break;

31、case game_lost:canvas.drawbitmap(bmpgamelost, 0, 0, paint);break; catch (exception e) / todo: handle exception finally if (canvas != null)sfh.unlockcanvasandpost(canvas);public boolean ontouchevent(motionevent event) switch (gamestate) case game_menu:gamemenu.ontouchevent(event);break;case gameing:b

32、reak;case game_pause:break;case game_win:break;case game_lost:break;return true;overridepublic boolean onkeydown(int keycode, keyevent event) if (keycode = keyevent.keycode_back) if (gamestate = gameing | gamestate = game_win | gamestate = game_lost) gamestate = game_menu;isboss = false;initgame();e

33、nemyarrayindex = 0; else if (gamestate = game_menu) mainactivity.instance.finish();system.exit(0);return true;switch (gamestate) case game_menu:break;case gameing:player.onkeydown(keycode, event);break;case game_pause:break;case game_win:break;case game_lost:break;return super.onkeydown(keycode, eve

34、nt);public boolean onkeyup(int keycode, keyevent event) if (keycode = keyevent.keycode_back) if (gamestate = gameing | gamestate = game_win | gamestate = game_lost) gamestate = game_menu;return true;switch (gamestate) case game_menu:break;case gameing:player.onkeyup(keycode, event);break;case game_p

35、ause:break;case game_win:break;case game_lost:break;return super.onkeydown(keycode, event);private void logic() switch (gamestate) case game_menu:break;case gameing:background.logic();player.logic();if (isboss = false) for (int i = 0; i vcenemy.size(); i+) enemy en = vcenemy.elementat(i);if (en.isde

36、ad) vcenemy.removeelementat(i); else en.logic();count+;if (count % createenemytime = 0) for (int i = 0; i enemyarrayenemyarrayindex.length; i+) if (enemyarrayenemyarrayindexi = 1) int x = random.nextint(screenw - 100) + 50;vcenemy.addelement(new enemy(bmpenemyfly, 1, x, -50); else if (enemyarrayenem

37、yarrayindexi = 2) int y = random.nextint(20);vcenemy.addelement(new enemy(bmpenemyduck, 2, -50, y); else if (enemyarrayenemyarrayindexi = 3) int y = random.nextint(20);vcenemy.addelement(new enemy(bmpenemyduck, 3, screenw + 50, y);if (enemyarrayindex = enemyarray.length - 1) isboss = true; else enem

38、yarrayindex+;for (int i = 0; i vcenemy.size(); i+) if (player.iscollsionwith(vcenemy.elementat(i) player.setplayerhp(player.getplayerhp() - 1);if (player.getplayerhp() = -1) gamestate = game_lost;countenemybullet+;if (countenemybullet % 40 = 0) for (int i = 0; i vcenemy.size(); i+) enemy en = vcenem

39、y.elementat(i);int bullettype = 0;switch (en.type) case enemy.type_fly:bullettype = bullet.bullet_fly;break;case enemy.type_duckl:case enemy.type_duckr:bullettype = bullet.bullet_duck;break;vcbullet.add(new bullet(bmpenemybullet, en.x + 10, en.y + 20, bullettype);for (int i = 0; i vcbullet.size(); i

40、+) bullet b = vcbullet.elementat(i);if (b.isdead) vcbullet.removeelement(b); else b.logic();for (int i = 0; i vcbullet.size(); i+) if (player.iscollsionwith(vcbullet.elementat(i) player.setplayerhp(player.getplayerhp() - 1);if (player.getplayerhp() = -1) gamestate = game_lost;for (int i = 0; i vcbul

41、letplayer.size(); i+) bullet blplayer = vcbulletplayer.elementat(i);for (int j = 0; j vcenemy.size(); j+) if (vcenemy.elementat(j).iscollsionwith(blplayer) vcboom.add(new boom(bmpboom, vcenemy.elementat(j).x, vcenemy.elementat(j).y, 7); else boss.logic();if (countplayerbullet % 10 = 0) vcbulletboss.

42、add(new bullet(bmpbossbullet, boss.x + 35, boss.y + 40, bullet.bullet_fly);for (int i = 0; i vcbulletboss.size(); i+) bullet b = vcbulletboss.elementat(i);if (b.isdead) vcbulletboss.removeelement(b); else b.logic();for (int i = 0; i vcbulletboss.size(); i+) if (player.iscollsionwith(vcbulletboss.ele

43、mentat(i) player.setplayerhp(player.getplayerhp() - 1);if (player.getplayerhp() = -1) gamestate = game_lost;for (int i = 0; i vcbulletplayer.size(); i+) bullet b = vcbulletplayer.elementat(i);if (boss.iscollsionwith(b) if (boss.hp = 0) gamestate = game_win; else b.isdead = true;boss.sethp(boss.hp -

44、1);vcboom.add(new boom(bmpboosboom, boss.x + 25, boss.y + 30, 5);vcboom.add(new boom(bmpboosboom, boss.x + 35, boss.y + 40, 5);vcboom.add(new boom(bmpboosboom, boss.x + 45, boss.y + 50, 5);countplayerbullet+;if (countplayerbullet % 20 = 0) vcbulletplayer.add(new bullet(bmpbullet, player.x + 15, play

45、er.y - 20, bullet.bullet_player);for (int i = 0; i vcbulletplayer.size(); i+) bullet b = vcbulletplayer.elementat(i);if (b.isdead) vcbulletplayer.removeelement(b); else b.logic();for (int i = 0; i vcboom.size(); i+) boom boom = vcboom.elementat(i);if (boom.playend) vcboom.removeelementat(i); else vcboom.elementat(i).logic();break;case game_pause:break;case game_win:break;case game_lost:break;public void run() while (flag) long start = system.currenttimemillis();mydraw();logic();long end = system.currenttimemillis();try if (end - start 50)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论