Android Studio实现飞机大战

news/2024/11/1 22:31:06/

项目目录

  • 一、项目概述
  • 二、开发环境
  • 三、详细设计
  • 四、运行演示

一、项目概述

通过自定义View实现Android飞机大战小游戏,游戏玩法很简单,可以锻炼玩家的反应能力。开启背景音乐进行新的游戏,控制飞机移动来消灭敌机获取更多的分数,在移动过程中避免与敌机发生碰撞。主界面可以查看自己的历史战绩和游戏规则,详细规则如下:

  1. 飞机一直发射子弹,用手指滑动可以改变飞机的位置2. 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果3. 每隔一段时间都会有双发子弹或炸弹等道具奖励4. 获得双发子弹之后,子弹变为双发5. 获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁

二、开发环境

在这里插入图片描述

三、详细设计

我们定义了Sprite类,即精灵类,游戏中的飞机、子弹、奖励道具等都是继承自该类,我们通过moveTo()move()等方法控制精灵的位置,通过beforeDraw()onDraw()afterDraw()实现相应的绘图逻辑。精灵类及其子类继承如下所示:
在这里插入图片描述

GameView是我们自定义的View类,主要重写了onDraw()onTouchEvent()方法。drawGameStarted(Canvas canvas)绘制运行状态的游戏,drawGamePaused(Canvas canvas)绘制暂停状态的游戏,drawGameOver(Canvas canvas)绘制结束状态的游戏,drawScoreAndBombs(Canvas canvas)绘制左上角的得分和左下角炸弹的数量,removeDestroyedSprites()移除销毁的精灵。

@Override
protected void onDraw(Canvas canvas) {//我们在每一帧都检测是否满足延迟触发单击事件的条件if(isSingleClick()){onSingleClick(touchX, touchY);}super.onDraw(canvas);if(status == STATUS_GAME_STARTED){drawGameStarted(canvas);}else if(status == STATUS_GAME_PAUSED){drawGamePaused(canvas);}else if(status == STATUS_GAME_OVER){drawGameOver(canvas);}
}
  • 在某一时刻GameView有三种状态:游戏开始STATUS_GAME_STARTED、游戏暂停STATUS_GAME_PAUSED和游戏结束STATUS_GAME_OVER。在不同的状态下我们会调用不同的绘制方法,这几个方法中都会调用方法postInvalidate(),这样驱动着View不断重绘,进而不断调用onDraw()方法实现游戏的动态效果。

  • 我们也重写了GameView的onTouchEvent()方法。由于View只支持单击事件,而不支持双击事件,所以我们自己定义了一个resolveTouchType()方法,通过这个方法可以合成我们自己想要的事件类型,比如双击事件。我们记录MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP的时间,一次单击事件由ACTION_DOWN和ACTION_UP两个事件合成,假设从ACTION_DOWN到ACTION_UP间隔小于200毫秒,我们就认为发生了一次单击事件。一次双击事件由两个点击事件合成,两个单击事件之间小于300毫秒,我们就认为发生了一次双击事件。在触发了双击事件的时候,我们就会触发炸弹,将屏幕内的敌机都炸毁。当处于ACTION_MOVE状态时,我们就通过event.getX()event.getY()改变战斗机的位置。

  • 我们还为GameView提供了start()、pause()、resume()和destroy()等方法,使其具备类似于Activity的生命周期,方便在Activity中对GameView进行状态管理。

  • 小敌机类,体积小,抗打击能力低;中敌机类,体积中等,抗打击能力中等;大敌机类,体积大,抗打击能力强。当敌机销毁的时候,我们使用了爆炸效果,爆炸从开始到结束一共14个阶段,我们用两帧绘制爆炸的一个阶段,这样完整绘制一个爆炸效果需要28帧,在绘制完最后一个阶段之后,Explosion类会销毁自己。

在这里插入图片描述
在GameActivity中定义Handler对象,一旦接收到what为66的message,立刻获取当前Date对象,设置时间格式,获取message传的score值,调用数据库add()方法插入表中,作为历史成绩。Handler消息机制在自定义View和Activity中进行传值,要比实现接口更加方便。数据库名为plane.db,只有一张表Grade存储历史成绩,add()方法是添加分数,getGrade()获取表中所有分数的列表。

    public static Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 66) {Date date = new Date();SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String score = msg.getData().getString("score");if (dataBaseHelper != null) {dataBaseHelper.add(ft.format(date), score);}}}};

四、运行演示

Android Studio实现飞机大战


🚀这有你错过的精彩内容🚀
Android Studio实现文艺阅读App
Android Studio实现多功能日记本
Android Studio实现志愿者系统
Android Studio实现记单词App
Android Studio实现记账本

http://www.ppmy.cn/news/919296.html

相关文章

css+js实现点击特效效果

话不多说&#xff0c;先上效果图 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

win7安装英文包

01、进入英文包下载界面 网址&#xff1a;https://www.froggie.sk/download.html 02、根据自身系统类型进行选择&#xff08;以win7旗舰版为例&#xff09; 03、下载的安装包&#xff0c;双击安装即可

在Windows 7中快速安装语言包

在Windows 7中快速安装语言包是一件非常容易的事情&#xff0c;下面一一列举操作步骤&#xff1a; 在Windows 7中目前微软提供了34种语言可供用户选择&#xff0c;在Windows Update中选择可用更新。 选择自己所需要的语言&#xff0c;例如我选择简体中文&#xff0c;我们在这里…

Windows 7 SP1 多国语言包(MUI language packs)官方下载

下载地址&#xff1a;Windows 7 SP1 多国语言包(MUI language packs)官方下载

Windows 7语言包下载

URL:http://apps.hi.baidu.com/share/detail/34486597 适用于Windows 7 x86 32位操作系统,SP1在最下面 ar-sa http://download.windowsupdate.com/msdownload/update/software/updt/2009/08/windows6.1-kb972813-x86-ar-sa_210ccc96338a1ff683803eb4034e5f53d6d54c97.exe b…

win7中文语言包环境下安装软件乱码的解决方法

在安装 winrar时&#xff0c;安装 界面出现了很多&#xff1f;&#xff1f;&#xff1f;问号和乱码&#xff0c;下载软件的名字也是乱码&#xff0c;并且安装snagit和迅雷等软件时&#xff0c;界面也是乱码&#xff0c;非常麻烦&#xff0c;经过一番摸索&#xff0c;终于让wi…

Win7 各种语言包下载

那天我在电脑城看见联想的上网本S10-2装的是WIN7 的家庭基础版&#xff0c;我的S10以前装过WIN7旗舰版的&#xff0c;但是感觉反应慢。因为S10-2和S10的配置都差不多&#xff0c;所以我也打算装个家庭基础版玩玩。但是网上怎么搜索都搜索不到&#xff0c;旗舰版倒是一大堆。没办…

win7 安装英文语言包

win7 安装英文语言包 因为某些英文程序字符显示不全&#xff0c;所以考虑把 win7 改为英文语言。直接下载英文语言包安装不成功&#xff0c;经过多次尝试和百度终于找到合适的办法。 下载 Vistalizator.exe, windows6.1-kb2483139-x86-en-us_783d6dd59e2ec8fb0995a059c9c12179…