J2ME潜艇大战游戏设计与实现

设计

 
摘要

    本文给出了一个飞机射击类(潜艇)游戏的设计过程以及相应的流程图,并提供了Demo版源代码下载地址,游戏在sun wtk v2.2 下调试通过。

声明:本游戏所用的资源大多不属于作者,代码仅供非商业用途的学习参考。

以下为游戏的几张截图

游戏设计

1 游戏操作流程:

    游戏的初始画面是一个implusive的List列表格式,选择new game以后就可以启动游戏,游戏是以全屏方式开启,但仍有用于暂停/开始和退出的命令响应功能键。在游戏当中启动暂停,海水和海洋生物仍将继续活动,但敌方潜艇和所有鱼雷都将静止下来,玩家的控制也将不起作用,直到游戏被再次启动为止。从游戏状态退出将回到菜单界面,再次选择退出将退出程序。

以下是游戏的总体流程图:

2 算法处理

游戏自身是一个单态结构(singletone),由一个Controller来处理目前应该显现的屏幕和状态。主要的显示类包括主画面,游戏画布,帮助画面和一些辅助的Alert,其中最重要是游戏画面。游戏是在MIDP 2的状态下运行的,所以画面继承了GameCanvas。游戏中的角色图层全部加载在一个远大于手机屏幕大小的图层管理器上。当玩家位置移动时,图层管理器同步计算出玩家的相对位置,移动当前图层的显示位置。

这个游戏的本质就是在midlet启动后把整个画布作为一个线程,每隔25ms扫描一下用户按键操作,每隔50ms扫描一次敌人和鱼雷等物体的运动状态,对于比较苛求的子弹射出实时响应,则继承了keyPressed方法。

在扫描玩家移动操作时,按键编码被传入到玩家潜艇的响应方法。在扫描敌人和鱼雷运动时,分两步完成。

第一步,执行各个物体画面的移动方法。程序并不为每个新增鱼雷或者敌人开启一个新线程,太多线程会造成程序的性能直线下降;而是为每一个物体类型保留一个Vector数组,每当一个新物体产生,他将首先被加入改类型所属的数组中,然后才在图层上画出;当物体消除时,除了在图层上被消除,也需要从响应数组中删除。这样就形成一种注册机制,所有游戏物体的产生和消除都需要向画布注册,画布拥有不同类型物体的所有“名单”,所以,当执行移动命令时,只需要遍历各个类型数组,依次执行其中每个元素的移动方法即可。

第二步,就是一般意义上重画,这里使用flushGraphics()替代了传统的repaint(),由于本游戏是以导入图片为操作对象,图片位置的更改已经在第一步被执行,所以没有怎么涉及到象素级的重画,只是在游戏初始化状态时需要加载各个物体数组所对应的图层到新的图层管理器。

画布触发流程简图:

(由于手上没有rose,只有暂时用EclipseUML的流程图画出草图,若干有问题的地方需要商榷,也希望擅长此到的朋友不吝指正)

3 类结构

以下列出了主要组成类的含义结构,并以游戏画布为中心列出一个类关联图。

Controller: 控制类,用以控制当前屏幕显示哪一个Displayable类。

SubObject: 接口类型。玩家潜艇,敌人潜艇以及鱼雷等可移动图层类型皆扩展于此接口。

Sub: 玩家潜艇。包含了位置,生命值等成员变量以及移动,开火等方法。

EnemySub, MoveableSprite, Tinfish: 敌人潜艇,海洋生物,鱼雷。都是可移动图层类型,一旦产生就在画布中注册,由时间触发器维护其运动和生命状态。

SubCanvas: 游戏主画布。存储着游戏地图信息,游戏状态,玩家信息,同步维护着敌人潜艇,鱼雷,海洋生物的运动和生存状态。

SubCanvas关联类图:

4 源代码

本程序的源代码,包括jad,混淆过的jar和一个rar文件,全部可以在 http://www.hyweb.net/BrowseFiles.aspx?Folder=Public/My%20Project 上下载到,代码中包含了较为详细的注释。这份程序只是一个demo版本,有一些遗留问题(玩家生命值显示,性能优化)还需要进一步完善,有任何好的建议,请一定联系我. ^_^

时间: 2024-10-21 19:49:12

J2ME潜艇大战游戏设计与实现的相关文章

J2ME 潜艇大战游戏设计与实现Demo

设计  J2ME 潜艇大战游戏设计与实现Demo 黄叶 (www.hyweb.net) 摘要 本文给出了一个飞机射击类(潜艇)游戏的设计过程以及相应的流程图,并提供了Demo版源代码下载地址,游戏在sun wtk v2.2 下调试通过. 声明 本游戏所用的资源大多不属于作者,代码仅供非商业用途的学习参考. 以下为游戏的几张截图 设计 1 游戏操作流程: 游戏的初始画面是一个implusive的List列表格式,选择new game以后就可以启动游戏,游戏是以全屏方式开启,但仍有用于暂停/开始和退

State模式在J2ME游戏设计中的应用(需要源代码留下e-mail)

设计|源代码    游戏设计中的状态转换是一个既是非常重要又十分复杂的部分.我前几天做移植的时候看到一个public void keyPressed(int keyCode)中间竟然有着近2000千行的代码,这样的话冗长的代码不仅不符合OO的思更加严重的是会打扰我们的程序思路.这两天运用State模式做了一个J2ME游戏中的状态转换由于只是一个实验的例子所以只做了开始菜单和帮助的转换,在这个框架下再加入其他的状态实际就是十分的简单的了. 现在DEMO中只有两个状态,两种状态下keyPressed

《游戏机制——高级游戏设计技术》一2.4 渐进型游戏

2.4 渐进型游戏 游戏机制--高级游戏设计技术尽管突现特性在游戏中十分重要,但也没有哪个职业游戏设计师能够忽视游戏中的渐进型机制.很多游戏都包含一个故事,以用来驱动游戏玩法,这个故事一般在玩家攻克一个个关卡的过程中叙述出来.这些游戏的单个关卡中通常会有一些清晰明确的任务,以此为玩家设立最终目标,其中还会包含一系列小任务,玩家必须完成小任务才能过关.采取这种方式规划游戏及关卡,可以为玩家带来流畅连贯的体验,同时也常常意味着设计师需要运用多种机制来控制玩家在游戏中如何前进.本书中,我们把这类机制称

游戏设计机制研究 互联网产品设计的12个理念

中介交易 SEO诊断 淘宝客 云主机 技术大厅 我们中的许多人做事难以集中精神,但在游戏的时候却聚精会神,我们中的大部分人做事缺乏毅力,但这些人却可以坚持玩一个游戏直到天昏地暗.研究游戏设计机制以及游戏中所蕴含的心理特征有助于我们设计出更好的游戏,产品,甚至在日常生活中也能根据相应的原则激励自己,顺利达到预期目标.下面我们就分几方面来研究游戏设计机制,以及引申出来的产品设计原则. 1. 推搡效应. 推搡效应 (Pushing effect) ,是指把商品放在目标买主够得着的地方.原本商场企图通过

如何修改得到散弹效果-android飞机大战散弹设计

问题描述 android飞机大战散弹设计 package com.example.beatplane; import java.util.Random; import com.example.beatplane.R; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas;

聊聊游戏设计行业新人最关心的3个问题

  游戏原画和游戏UI的区别是什么?工资待遇如何? 游戏原画在项目中主要是负责角色.场景设计,还有游戏的宣传海报和过场界面等完成度高的宣传画,原画更加看重设计和绘画表现力,在交互方面需求很少,沟通也较少,基本和三维.主美沟通就够了,下面我放了一些我们项目中需要设计的原画稿,方便大家了解原画工作内容. UI 行业我理解主要包括: 游戏UI App UI 网站UI 中国游戏产业在发展了近20年后,现在每年近千亿的产值已经远远将老牌文化产业的电影行业抛在身后,并成为中国文化产业出口的领头羊,中国游戏产

算法设计-猜猜我是谁游戏设计编程思想

问题描述 猜猜我是谁游戏设计编程思想 像微软小冰的读心术类似通过程序给出的几个问题选择是否来推出所猜的人,这要用什么数据结构 解决方案 这个是根据语义匹配等算法实现的.

IOS游戏设计认知度提升方法和免费游戏的盈利

文章描述:要制作iOS游戏,那么在你开始工作之前,你应当知道哪些内容呢?我们在2011年发布了两款iOS游戏:<Garage Inc.>(1月份)和<KULA BLOX >(9月份).近期,我们花了大量时间思考这些经历,从中寻找可借鉴之处,这样下次就会做得更好.以下便是我们总结出的经验. 如果你已经决定要制作iOS游戏,那么在你开始工作之前,你应当知道哪些内容呢?我们在2011年发布了两款iOS游戏:<Garage Inc.>(1月份)和<KULA BLOX &g

手机社交游戏设计:提升用户间的交互性体验

文章描述:手机社交游戏设计中交互理念的渗透. 延长玩家与游戏的生命周期 我从游戏设计中了解最多的除了游戏本身的机制效能,就是游戏化概念对其他产品价值及其衍生属性的影响.从本质上讲,游戏所提供的就是虚拟性的服务,而这层服务从用户获得体验那刻起开始生效,不仅仅是单纯为了一个漂亮的留存数据,更在于这种以时间投入为置换准则的泛娱乐形式能否起到愉悦用户的目的.而付费性一直是一个附属品,一个认可游戏价值的玩家终究能够自然发展为付费玩家,并且他们乐意在投入精力的同时帮助游戏探索和发展,延长玩家和游戏双重层面的