软件介绍:

操作系统:Microsoft Windows XP

程序语言:Java 2

开 发 包:Java(TM) 2 Standard Edition (5.0)

Sun Micro. J2ME   Wireless Tool Kit 2.2

IDE:    Eclipse 3.01

本程序需要解决的主要技术问题

1.  游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。

2.  游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。

3. 玩家飞机的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;敌人飞机的运行算法也要进行相关的设置,已免游戏过于简单。

4.对于双方发射的子弹应该赋予不同的速度,同时,程序应该设定敌人飞机的子弹不与敌人的飞机进行碰撞检测,已增加游戏的可玩性。

5. 双方的飞机在前进时也需要考虑到是否碰撞到对方飞机,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要进行相关的碰撞检测。

6.为了增加界面的美观,在程序中添加了白云。由于手机屏幕大小有限,所以白云的数量和出现的位置要经过相关的设置,才能实现白云不规则出现的效果。

7.  游戏的地图不可能通过绘图来解决。否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上程序的原则和Java的优势。

8.  Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。

9.  游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的考虑。

以上相关技术细节和整体流程将分别在以下小节阐述。

程序流程

MIDlet suite是MIDP应用程序的最小单位,JAM负责将手机内的MIDlet suite以图形化的方式呈现,让用户能够选取欲执行的MIDlet suite,一旦选取了某个MIDlet suite,操作系统就会激活KVM执行里面的MIDlet。MIDlet及相关的支持类组成了MIDP应用程序的实际内容。而

每个MIDlet都必须继承javax.microedition.midlet.MIDlet这个抽象类。在MIDP规范中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。这三种状态的转换关系如图3-1所示:MIDlet有三个状态,分别是pause、active和destroyed。在启动一个MIDlet的时

候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。在active状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。值得一提的是destroyApp(boolean unconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。

本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单,在开始游戏后将先从外部文件载入地图文件,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。

游戏开始后先绘制地图,并将各个对象实例化。在主程序运行的线程中,游戏中所有的对象都应该运行在同一个线程下。当敌人或者用户的子弹达到射程范围后,并不删除子弹对象,而是使用setVisable(false)使其不能显示,当用户或敌人在次发射子弹时,只需使用setVisable(true)设置成可以显示即可。在屏幕重绘的主程序中,将在每次的循环中判断若干事件,以便程序进入相关的分支执行相关的反应代码。如:玩家剩余飞机数是为0、敌人、玩家飞机是否被击中、屏幕上相关信息的绘制等。

程序为需要完成独立功能的模块设置了单独的类。lzhhdm类继承自Midlet,gameScrenn类、MenuScreen类继承自GameCanvas,mybullets继承自Sprite类。载入程序后首先启动的是程序介绍的信息画面。点击ok后调用MenuScreen类实现菜单。

如果选择进入游戏,则调用gameScreen类,并且中止MenuScreen类中的线程运行,已提高运行速度。

Mybullets类为玩家子弹类。

游戏界面

游戏代码

代码

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.*;

public class lzhhdm extends MIDlet implements CommandListener {

public Display display;

private Image splashLogo;

private boolean isSplash=true;

public Form a;

private Alert alert;

int length;

private MenuScreen menuscreen;

private gameScreen gamescreen;

private Command ok,back;

private byte[] byteInputData;

public lzhhdm()

{

}

protected void startApp() throws MIDletStateChangeException {

display=Display.getDisplay(this);

menuscreen=new MenuScreen(this);

if(isSplash)

{  a=null;

a=new Form("览桥风光V1.0");

ok=new Command("ok",Command.OK,1);

a.append(new StringItem(null,"....."));

a.addCommand(ok);

a.setCommandListener(this);

display.setCurrent(a);

}

}

protected void menuscreenShow()

{

display.setCurrent(menuscreen);

}

protected void menuscreensecond() {

menuscreen=new MenuScreen(this);

MenuScreen.mainmenu[0]="重新开始";//玩完一遍或挂了后在玩一遍 菜单第一项改为 重新开始

display.setCurrent(menuscreen);

}

protected void pauseApp() {}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void helShow()

{  a=null;

a=new Form("览桥风光V1.0");

back=new Command("返回",Command.BACK,1);

a.append(new StringItem(null,"操作方式:上 2 下 8 左 4 右 6 开火 5"));

a.append(new StringItem(null,"弹药数:一次最多打三组"));

a.addCommand(ok);

a.setCommandListener(this);

display.setCurrent(a);

}

protected void renwuShow()

{

a=null;

a=new Form("览桥风光V1.0");

back=new Command("返回",Command.BACK,1);

a.append(new StringItem(null,"游戏名称:览桥风光"));

a.append(new StringItem(null,"版本号:V1.00"));

a.append(new StringItem(null,"制作者:信息电子技术学院01计算机5班 刘泽华 学号:7"));

a.addCommand(ok);

a.setCommandListener(this);

display.setCurrent(a);

操作说明

在电脑中使用模拟器的步骤如下:

1   使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称MIDlet类名相同。

2   新建项目后,将Eclipse工作区下的.java文件拷入src文件夹,将.class文件拷入class文件夹(需要新建),将pic文件夹拷入res文件夹,点击生成,如一切正常。

3   选择项目-包-生成包。

4   生成的jar和jad文件存储在lzhhdm/bin目录下。

5    运行Motorola SDK v4.2 for J2ME,使用MOTOA760手机模拟器进行测试。点击Lanuc按纽,即可以进行游戏了。

电脑键盘的方向键上、下、左、右可以控制玩家飞机的运动,回车可以发射子弹。

可以将鼠标移动到相应的按纽处单击,以测试相应的按纽。

【计算机毕设】JAVA010打飞机游戏设计相关推荐

  1. java毕业设计——基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码)——打飞机游戏

    基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME+sqlserver的打飞机游戏设计与实现,文章末尾附有本毕业设计的 ...

  2. android 飞机源码,基于安卓Android平台的飞机游戏设计与实现毕业论文+项目源码...

    摘   要 本课题是基于Android平台开发的飞机游戏,本游戏主要是针对现实生活中比较忙碌并且没有自己业余生活的人开发的,随着社会的发展,人们的生活也越来越快,压力也在不断的加大,反而没有了自己的休 ...

  3. 3d游戏计算机怎么配置要求吗,游戏设计专业需要怎样的电脑配置?

    中端的 cpu:E3 1230 V3:主板:技嘉B85 内存:8G:显卡:GTX760(影驰或者索泰) 电源:航嘉额定450W功率:在算上机箱+散热器大概4500左右. 高端的 CPU:i7 4790 ...

  4. mfc 怎么让键盘上下左右控制图片移动_[源码和文档分享]基于MFC的陨石撞飞机游戏设计与实现...

    摘 要 用MFC设计一个陨石撞飞机的平面游戏,陨石不断下落,飞机通过键盘的上下左右键移动以躲避陨石.当陨石撞到飞机时,显示游戏结束提示对话框.设计开始要对开发环境VC 6.0的熟悉,需要学会如何添加资 ...

  5. 基于MFC的陨石撞飞机游戏设计与实现

    摘 要 用MFC设计一个陨石撞飞机的平面游戏,陨石不断下落,飞机通过键盘的上下左右键移动以躲避陨石.当陨石撞到飞机时,显示游戏结束提示对话框.设计开始要对开发环境VC 6.0的熟悉,需要学会如何添加资 ...

  6. 计算机毕设Node.js+Vue游戏盒子系统(程序+LW+部署)

    项目运行 环境配置: Node.js最新版+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue. 项目技术: Express框架 + Node.js+ Vue 等 ...

  7. python小游戏毕设 坦克大战小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3.1 环境配置 3.2 Pygame介绍 4 具体实现 4.1 实现游戏主循环 4.2 制作游戏开始和结束界面 5 最后 0 项目简 ...

  8. python小游戏毕设 塔防小游戏设计与实现 (源码)

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 Pygame介绍 4 原理和实现 4.1 环境配置 4.2 游戏界面说明 4.3 游戏主逻辑 4.4 游戏开始界面 4.5 游戏选择界面 4.6 ...

  9. 【python小游戏毕设】炸弹人小游戏设计与实现

    文章目录 0 前言 1 课题背景 2 实现效果 3 Pygame介绍 4 具体实现 4.1 环境配置 4.2 创建游戏类 4.3 墙和背景类 4.4 水果类 4.3 角色类 4.4 炸弹类 4.5 地 ...

最新文章

  1. 医院病案档案管理系统php_医疗产品经理必懂:医院业务流程及系统
  2. Linux学习:vim 的 3 种命令模式及基本操作
  3. 【转】集合类说明及区别
  4. 苹果是c语言安卓是什么语言,主流app是用什么语言开发的苹果和安卓的主流开...
  5. [Java] 蓝桥杯ADV-185 算法提高 五次方数
  6. 蚂蚁金服分布式链路跟踪组件 SOFATracer 总览 | 剖析
  7. 关于block的回调使用-防止内存泄露问题
  8. 【历史上的今天】8 月 23 日:万维网面世 30 周年;微信公众平台正式上线;计算机先驱诞生日
  9. 姑娘们 你们够漂亮 但是一定还不够美丽
  10. CentOS下常用软件开机自启动脚本
  11. 【解决】Python程序运行时所占内存越来越大
  12. 变形金刚2中的各个角色,及车型(带图)第一篇。
  13. FME大规模转换OSM PBF数据
  14. 5款非常好用的设计工具,推荐第一款在线设计工具
  15. 远程服务器访问 JupyterLab
  16. 英语练习32 Poor Amy
  17. excel的数据通过pyecharts生成图表,插入ppt
  18. java中@Repeatable的理解
  19. 深度分析区块链技术主要用途
  20. 【鲁棒优化、大M法、CCG算法】计及风、光、负荷不确定性两阶段鲁棒优化(Matlab代码实现)

热门文章

  1. Go :测试简单的布尔和数字常量(附完整源码)
  2. 管理软件风险,防患于未然
  3. 光明日报:当教育遇上区块链,会擦出什么火花
  4. 卷积神经网络学习——第二部分:卷积神经网络训练的基本流程
  5. java调用oracle视图_oracle中视图
  6. Python之进制转换
  7. 网宿科技携手亚马逊云科技,助力云计算成为真正的生产力
  8. centos关闭防火墙命令
  9. Linux服务器7 --- 多路IO复用+线程池服务端模型(高并发)分析
  10. prefetch 和preload_prefetch和preload