[原创]雷电小游戏app设计
[原创]雷电小游戏app设计
相信雷电是很多人的童年回忆,本文就尝试用android studio做一个简单的雷电小游戏。
游戏界面如下:
项目结构如下:
设计思路:
游戏机制设计
游戏目前的场景比较简单,为我军飞机对战敌军Boss飞机。我军飞机目前只有普通子弹攻击一种方式,我军飞机的移动方式为手指在屏幕上移动控制。为了增加游戏难度,为敌军飞机设计了三种攻击模式:
1)Boss飞机满血量为1000.当Boss飞机血量大于600时,Boss飞机会左右移动,对我军飞机进行规律地激光攻击;
2)Boss飞机血量在[300,600]之间时,Boss飞机移动会加速,会左右移动,追踪我军飞机并进行向无规律地激光攻击;
3)Boss飞机血量小于300时,会启动死亡撞击模式,一边攻击,一边试图撞击我军飞机。死亡撞击演示gif如下:
敌军飞机被击毁后,会掉落物品,游戏中设计了小水晶作为掉落物品,我军飞机获取后处于无敌状态,被光罩笼罩。为后续的设计做铺垫。
总结发现,在上述场景中,出现了飞机、掉落物品、子弹、爆炸效果等概念,将其抽象为类。
工程部分UML图如下:
飞机和敌机相撞,会导致我军飞机被击毁,另外飞机获取物品时也要做碰撞检测、子弹击中飞机时,还是要做碰撞检测。这些逻辑有共通之处,可以抽出一个公共的类,具有检测碰撞的公共方法。这样就避免了在代码到处去写和修改碰撞的逻辑。该公共类如下:
package com.example.demonstar.common;import android.content.Context;
import android.graphics.Bitmap;public class CommonObject {protected int positionX;protected int positionY;protected Bitmap skin;protected Context context;public CommonObject(Context context) {this.context = context;}public CommonObject(Context context, int positionX, int positionY) {this.context = context;this.positionX = positionX;this.positionY = positionY;}public boolean isCollided(CommonObject object) {return this.detectCollision(object) || object.detectCollision(this);}protected boolean detectCollision(CommonObject object) {if (object == null) {return false;}if (isVertexInArea(this.positionX, this.positionY, object)) {return true;}if (isVertexInArea(this.positionX + this.skin.getWidth(), this.positionY, object)) {return true;}if (isVertexInArea(this.positionX, this.positionY + this.skin.getHeight(), object)) {return true;}if (isVertexInArea(this.positionX + this.skin.getWidth(), this.positionY + this.skin.getHeight(), object)) {return true;}return false;}protected boolean isVertexInArea(int abscissa, int ordinate, CommonObject object) {return this.isAbscissaInRange(abscissa, object) && this.isOrdinateInRange(ordinate, object);}protected boolean isAbscissaInRange(int abscissa, CommonObject object) {return abscissa < object.getPositionX() + object.getSkin().getWidth() &&abscissa > object.getPositionX();}protected boolean isOrdinateInRange(int ordinate, CommonObject object) {return ordinate > object.getPositionY() &&ordinate < object.getPositionY() + object.getSkin().getHeight();}public int getPositionX() {return positionX;}public void setPositionX(int positionX) {this.positionX = positionX;}public int getPositionY() {return positionY;}public void setPositionY(int positionY) {this.positionY = positionY;}public Bitmap getSkin() {return skin;}public void setSkin(Bitmap skin) {this.skin = skin;}public Context getContext() {return context;}public void setContext(Context context) {this.context = context;}
}
isCollided(CommonObject object)就是检测碰撞的公共方法。
以上图来说明一下碰撞检测的逻辑:
飞机总是需要一个原始图片去绘制到画布上的,碰撞检测实际上是在检测图片之间有无重叠。考虑我军飞机图片进入敌机图片区域的情形:当我军飞机位图的任意一个顶点位于ABCD的范围时,即可认为检测到碰撞的发生。敌机进入我军飞机HIJK区域时,同样也会发生碰撞。
时间所限,有空再写完。
[原创]雷电小游戏app设计相关推荐
- 基于Java+Swing实现雷电小游戏
基于Java+Swing实现雷电小游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 基于java的雷电游戏基本功能包括:敌方飞机随机飞行.我方飞机手动控制飞行,射击比拼,游戏 ...
- HarmonyOS(鸿蒙)运动手表第二个小游戏app——数字华容道
前言 这次博客是学完鸿蒙应用开发之后,自行开发的鸿蒙小游戏--数字华容道,这篇博客详细地讲了数字华容道的开发思路. 概述 本个demo将从零基础开始完成鸿蒙小游戏APP在可穿戴设备上的编译,此处以运动 ...
- 扫雷小游戏的设计思路以及实现的细致讲解
大家好,今天博主来介绍扫雷小游戏的设计思路以及实现,会很细致的呦,喜欢的话还请给个三连吧! 目录 设计思路 一,基础框架 二,基础框架的填充和完善 代码实现 一,初始化函数 二,埋雷函数 三,展示雷区 ...
- c语言课时设计猜坐标游戏,c语言小游戏课程设计报告.docx
c语言小游戏课程设计报告 中国地质大学 本科生课程论文封面 课程名称c语言课程设计 教师姓名陈喆老师 本科生姓名周宜诺 本科生学号XX 本科生专业土地资源管理 所在院系公共管理学院 类别: 日期: 课 ...
- 微信小游戏的设计和开发
微信平台不但承载了聊天相关的基础属性,同时也有公众号的媒体属性.小程序的工具属性和支付的金融属性,是一个大而全的平台.因此越来越多的开发者基于小程序进行游戏开发,简单易用,支付方便,也是游戏开发者一个 ...
- 基于H5 网页的打豆豆小游戏的设计与实现
目 录 摘 要 I Abstract II 第1章 绪论 1 1.1研究背景及意义 1 1.2研究现状 2 1.3研究主要内容 3 第2章 技术分析 4 2.1 HTML5简介 4 2.2游戏引擎 4 ...
- C++/QT 贪吃蛇小游戏 界面设计
C++/QT 贪吃蛇小游戏 界面设计 前言:本文所写的贪吃蛇是笔者初学QT练手的小项目,做出来的界面较为粗糙.由于很久没有接触C++,程序中类封装的不是很规范.写这篇文章,权当是记录生活了,手动狗头. ...
- 【三子棋小游戏的设计思路以及代码实现】
目录 一,设计思路 二, 代码实现 首先,欢迎各位点进我的文章.话不多说,正如标题一样,接下来,我来给大家讲解三子棋小游戏的设计思路以及代码实现. 一,设计思路 一. 大家应该都 ...
- 基于Java的飞机雷电射击游戏的设计实现(Eclipse开发)
资源下载地址:https://download.csdn.net/download/sheziqiong/86937281 资源下载地址:https://download.csdn.net/downl ...
最新文章
- 高通创投在中国区的投资重点,目前主要聚焦在AI+5G、XR+5G、机器人/自动驾驶+5G、物联网+5G四个方面。
- [case12]演进式架构
- Wake-On-LAN待机或休眠模式中唤醒
- 在Docker启动Cloudera并开始体验
- 计蒜客(三角形的内点)
- Android免Root环境下Hook框架Legend原理分析
- 海量数据实时在线分析QuickBI
- 财务软件开发_财务独立对软件开发人员的重要性
- SpringCloud Eureka自我保护机制介绍及配置
- 网易云深度学习第一课第三周编程作业
- jsp网页实现自动刷新和自动跳转页面
- egg 编码规范_从 Egg.js 到 NestJS,爱码客后端选型之路
- Blueprint:一个让你获取示例代码的Flash Builder扩展
- 计数译码显示电路实验报告总结_译码器及其应用
- 要想成功必须具备的九种手段
- python发展调研报告_实战 | Python自动生成PPT调研报告
- Mac和iphone利用自带邮件客户端添加263企业邮箱
- 如何在前端html获取cookie
- 关于uni.appd打包H5 图片在IOS 上不显示的问题
- 版权登记助手大师小程序开发
热门文章
- 巯基吡啶PEG巯基吡啶,OPSS-PEG-OPSS
- Python手写实现LDA与QDA算法
- python表达式3or5的值为_表达式 3 or 5 的值为
- http 500错误 Java_HTTP状态 500 - 内部服务器错误
- 使用IBM InfoSphere Guardium Encryption Expert保护您的敏感数据
- android获得键盘高度,Android获取软键盘高度
- 广州宇信易诚科技有限公司面试题
- java第一个程序编译失败,零基础java第一个程序HelloWorld,编译,环境变量,运行,注释...
- 基于UA-DETRAC车辆数据集在windows10系统下yolov3模型训练
- php最大公约数辗转相除程序,[转]辗转相除求最大公约数