没有合适的资源?快使用搜索试试~ 我知道了~
J2ME游戏程序开发实例详解
4星 · 超过85%的资源 需积分: 0 140 下载量 148 浏览量
2008-01-17
05:53:32
上传
评论
收藏 147KB DOC 举报
温馨提示
试读
24页
J2ME游戏程序开发实例详解
资源详情
资源评论
资源推荐
一、序言
昨天在网上闲逛,发现一 篇讲解用 delphi 实现华容道游戏的文章,颇受启发.
于是,产生了将华容道游戏移植到手机中去的冲动.现在手机游戏琳琅满目,
不一而足,华容道的实现版 本也很多.正巧不久前笔者对 J2ME 下了一番功夫,
正想借这个机会小试牛刀。选用 J2ME 的原因还有一个就是目前 Java 开发大行
其到,无线增殖业务迅猛 发展,J2ME 的应用日渐活跃起来,也希望我的这篇
文章能够为 J2ME 知识的普及和开发团队的壮大推波助澜。由于长期受 ISO 规
范的影响,这次小试牛刀我 也打算遵照软件工程的要求,并采取瀑布式的开发
模式来规划项目,也希望借此机会向各位没有机会参与正式项目开发的读者介
绍一下软件开发的流程。
这 里我们先定义项目组的人员体制(其实只有我一个人):技术调研、需求分析、
概要设计、详细设计、编码、测试均有笔者一人担任;美工这里我找了个捷径,
盗用 网上现成的图片,然后用 ACDSee 把它由 BMP 转换成 PNG 格式(我出于
讲座的目的,未做商业应用,应该不算侵权吧);至于发布工作,由于缺少
OTA 服 务器,此项工作不做(但是我会介绍这步如何做)。
接下来,我们规划一下项目实现的时间表,以我个人经验,设想如下:技术调
研用 2 天(这部 分解决项目的可行性和重大技术问题,时间会长一些),需求分
析用半天(毕竟有现成的东东可以参照,只要理清思路就行了,况且还有很多以
前用过的设计模式和 写好的代码),概要设计再用半天(有了需求,概要只不够
是照方抓药),详细设计要用 2 天(这一步要把所有的问题想清楚,还要尽可能
的准确描述出来),编码 用 2 天(其实 1 天就够了,技术已经不是问题,多计划
出一天来应付突发事件),测试用 2 天(测试应该至少占全部项目的四分之一,
不过这个项目只是一个 Demo,也太简单了),发布也要用上半天(尽管我们不
去实际发布它,但是还要花点时间搞清楚应该如何做),最后就是项目总结和开
庆功会(时间待定)。
二、利其器
“公欲善其事,必先利其器”,做项目之前第一步是前期调研.我们要做的华容
道这个东东随处可见,我们要调研的是两个方面:
1. 游戏的内容:游戏本身很简单,就是有几个格子,曹操占据其中一个较大的
格子,然后被几个格子包围,这些格子形状不一定相同,但是挡住了曹操移动
的方向.游 戏者需要挪动这些格子最终把曹操移动到一个指定的位置才算是过
关.更具体的分析我们放在后面需求分析和概要设计中讨论。
2. 技术储备:谈到技术,这里简单介绍一下 J2ME.Java 有三个版本,分别是
J2ME(微型版).J2SE(标准版).J2EE(企业版).J2ME 是一 个标准,采用
3层结构设计.最低层是配置层(Con!guration)也就是设备层,其上是简
表层(Pro!le),再上是应用层 (Application).MIDP 就是移动信息设备简表,
目前主流手机支持 MIDP1.0,最新的是 MIDP2.0,它比前一个版本增加了对游
戏的支 持,在 javax.microedition.lcdui.game 包中提供了一些类来处理游
戏中的技术,比如我们后面会用到的 Sprite 类,它是用来 翻转图片的.权衡再
三,笔者决定使用 MIDP2.0 来做开发.首先需要安装一个 J2ME 的模拟器,我
们就用 Sun 公司的 WTK2.0,我觉得 Sun 的东西 最权威.当然你也可以使用
Nokia.Siemens 或是 Motolora 等其他模拟器,但是他们的 JDK 不尽相同,写
出来的程序移植是比较麻烦的.
Sun 公司的 WTK2.0 可以到搜索引擎寻找下载,当然要想成功下载的前提是你
要先注册成为 Sun 的会员(其实这样对你是有好处的).当下来之后就是按照
提示一 步一步的安装.安装好了之后,我们用一个"Hello World"程序开始你
的 J2ME 之旅.我们启动 WTK2.0 工具集中的 KToolBar,然后点击 New
Project 按钮,在弹出的输入框中输入 Project Name 为 HelloWorld,MIDlet
Class Name 为 Hello,然后点击 Create Project,开始生成项目,工具会弹出
MIDP 配置简表,这里接受生成的默认值(以后还可以修改)点击 OK,工具提
示我们把写好的 Java 源程序放到 [WTK_HOME]\apps\HelloWorld\src 目录
之下.我们编辑如下代码,并保存在上述目录之下,文件名为 Hello.java。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Hello extends MIDlet
{
private Display display;
public Hello(){
display =Display.getDisplay(this);
}
public void startApp(){
TextBox t = new TextBox("Hello","Hello",256,0);
display.setCurrent(t);
}
public void pauseApp(){
}
public void destroyApp(boolean unconditional){
}
}
保存好了之后,点击 Build 按钮,工具会为你编译程序,如无意外再点击 Run
按钮,会弹出一个手机界面,剩下的就不用我教了 吧(用鼠标对手机按键一顿
狂点)。呵呵,你的第一个 J2ME 程序已经 OK 了.什么?你还一点都没懂呢
(真是厉害,不懂都能写出 J2ME 程序来,果然是高 手).我这里主要是介绍
WTK2.0 工具的使用,程序并不是目的,不懂的话后面还会有详细的解说,这
里只是带你上路.什么?你不懂 Java!那也没有关 系,后面我再讲得细一点。
跳过 J2ME,我们先来讲点游戏的理论.具体到华容道这个游戏,主要有三个
方面,贴图.游戏操作.逻辑判 断.这里讲讲贴图,其他两方面放在概要设计
和详细设计里讲.所谓的贴图,其实就是画图,就是在要显示图形的位置上输
出一副图片,(要是牵扯到动画就要麻烦 一些,可以使用 TimerTask.Thread
或 Rannable 之类的技术),这副图片可以是事先准备好的也可以是临时处理的.
在 J2ME 中有一个 Image 类,专门用于管理图片,它有 createImage()方法,
可以直接读取图片文件(J2ME 只支持 PNG 格式的图片),也可以截取已有的
图片 的一部分(这样我们可以把很多图片放在一起,然后一张一张的截下来,
好处是节省存储空间和文件读取时间,对于手机这两者都是性能的瓶颈).
J2ME 还有一个 Graphics 类,专门用于绘图,它有 drawImage()方法,可以
把一副图片在指定的位置上显示出来,它还有 drawRect()方法和 setColor()
方法,这两个方法在后面我们进行游戏操作时就会用到,这里先交代一下.有
了图片和绘图的方法,还需要知道把图画到谁身上,J2ME 提 供了一个
Canvas 类,字面意思就是画布,它有一个 paint()方法用于刷新页面,还有一
个 repaint()方法用于调用 paint()方法.听着 有些糊涂是吧,不要紧,我来结
合具体程序讲解一下.为了今后编程的方便,我们创建两个类 Images 和
Draw,Images 用于保存一些常量值和图片, Draw 主要是用于画图,这两个
类的源代码如下。
Images 类的源代码如下:
package huarongroad;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class Images {//保存常量
//绘图位置常量
public static !nal int UNIT = 32;//方块的单位长度
public static !nal int LEFT = 10;//画图的左边界顶点
public static !nal int TOP = 9;//画图的上边界顶点
//地图位置常量
public static !nal int WIDTH = 4;//地图的宽度
public static !nal int HEIGHT = 5;//地图的高度
//地图标记常量
public static !nal byte CAOCAO = (byte) ′a′; <A
href="!le://曹">!le://曹</A>操的地图标记
public static !nal byte MACHAO = (byte) ′b′;//马
超的地图标记
public static !nal byte HUANGZHONG = (byte) ′c
′;//黄忠的地图标记
public static !nal byte GUANYU = (byte) ′d′;//关羽
的地图标记
public static !nal byte ZHANGFEI = (byte) ′e′;//张
飞的地图标记
public static !nal byte ZHAOYUN = (byte) ′f′;//赵
云的地图标记
public static !nal byte ZU = (byte) ′g′;//卒的地图标
记
public static !nal byte BLANK = (byte) ′h′;//空白的
地图标记
public static !nal byte CURSOR = (byte) ′i′;//光标
的地图标记
//地图组合标记常量
public static !nal byte DLEFT = (byte) ′1′; <A
href="!le://组">!le://组</A>合图形左边标记
public static !nal byte DUP = (byte) ′2′; <A
href="!le://组">!le://组</A>合图形上边标记
public static !nal byte DLEFTUP = (byte) ′3′; <A
href="!le://组">!le://组</A>合图形左上标记
//图片常量
public static Image image_base;//基本图片
public static Image image_Zhaoyun;//赵云的图片
public static Image image_Caocao;//曹操的图片
public static Image image_Huangzhong;//黄忠的
图片
public static Image image_Machao;//马超的图片
public static Image image_Guanyu;//关羽的图片
public static Image image_Zhangfei;//张飞的图片
public static Image image_Zu;//卒的图片
public static Image image_Blank;//空白的图片
public static Image image_Frame;//游戏框架的图片
public Images() {//构造函数
}
public static boolean init() {//初始化游戏中用到的图
片
try {
image_base =
Image.createImage("/huarongroad/BITBACK.png"
);
image_Frame =
Image.createImage(image_base, 126, 0, 145,
177,
Sprite.TRANS_NONE);
//Sprite 类是用来翻转图片的,是 MIDP2.0 新新增加的
剩余23页未读,继续阅读
chenroujie
- 粉丝: 63
- 资源: 630
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1