J2ME游戏开发实例讲解Word下载.docx

上传人:b****3 文档编号:16413506 上传时间:2022-11-23 格式:DOCX 页数:26 大小:30.95KB
下载 相关 举报
J2ME游戏开发实例讲解Word下载.docx_第1页
第1页 / 共26页
J2ME游戏开发实例讲解Word下载.docx_第2页
第2页 / 共26页
J2ME游戏开发实例讲解Word下载.docx_第3页
第3页 / 共26页
J2ME游戏开发实例讲解Word下载.docx_第4页
第4页 / 共26页
J2ME游戏开发实例讲解Word下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

J2ME游戏开发实例讲解Word下载.docx

《J2ME游戏开发实例讲解Word下载.docx》由会员分享,可在线阅读,更多相关《J2ME游戏开发实例讲解Word下载.docx(26页珍藏版)》请在冰豆网上搜索。

J2ME游戏开发实例讲解Word下载.docx

javax.microedition.lcdui.*;

public 

class 

Hello 

extends 

MIDlet

{

private 

Display 

display;

Hello(){

display 

=Display.getDisplay(this);

}

void 

startApp(){

TextBox 

new 

TextBox("

Hello"

"

256,0);

display.setCurrent(t);

pauseApp(){

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;

 

javax.microedition.lcdui.game.*;

Images 

{//保存常量

//绘图位置常量

static 

final 

int 

UNIT 

32;

//方块的单位长度

LEFT 

10;

//画图的左边界顶点

TOP 

9;

//画图的上边界顶点

//地图位置常量

WIDTH 

4;

//地图的宽度

HEIGHT 

5;

//地图的高度

//地图标记常量

byte 

CAOCAO 

(byte) 

'

a'

;

<A 

href="

file:

//曹"

>file:

//曹</A>操的地图标记

MACHAO 

b'

//马超的地图标记

HUANGZHONG 

c'

//黄忠的地图标记

GUANYU 

d'

//关羽的地图标记

ZHANGFEI 

e'

//张飞的地图标记

ZHAOYUN 

f'

//赵云的地图标记

ZU 

g'

//卒的地图标记

BLANK 

h'

//空白的地图标记

CURSOR 

i'

//光标的地图标记

//地图组合标记常量

DLEFT 

1'

//组"

//组</A>合图形左边标记

DUP 

2'

//组</A>合图形上边标记

DLEFTUP 

3'

//组</A>合图形左上标记

//图片常量

Image 

image_base;

//基本图片

image_Zhaoyun;

//赵云的图片

image_Caocao;

//曹操的图片

image_Huangzhong;

//黄忠的图片

image_Machao;

//马超的图片

image_Guanyu;

//关羽的图片

image_Zhangfei;

//张飞的图片

image_Zu;

//卒的图片

image_Blank;

//空白的图片

image_Frame;

//游戏框架的图片

Images() 

{//构造函数

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新新增加的支持游戏的特性

image_Zhaoyun 

UNIT, 

UNIT,

image_Caocao 

image_Huangzhong 

image_Machao 

image_Guanyu 

image_Zhangfei 

image_Zu 

image_Blank 

UNIT,UNIT,

return 

true;

}catch 

(Exception 

ex) 

false;

  Draw类的源代码如下:

Draw 

//绘制游戏中的图片

Draw(Canvas 

canvas) 

paint(Graphics 

g, 

img, 

x, 

y) 

//在地图的x,y点绘制img指定的图片

paint(g, 

y, 

Images.UNIT);

//把地图x,y点转化成画布的绝对坐标,绘图

catch 

{return 

unit) 

switch 

(img) 

case 

Images.CAOCAO:

//画曹操

//变成绝对坐标,并做调整

g.drawImage(Images.image_Caocao, 

Images.LEFT 

unit,

Images.TOP 

Graphics.TOP 

Graphics.LEFT);

break;

Images.GUANYU:

//画关羽

g.drawImage(Images.image_Guanyu, 

Images.HUANGZHONG:

//画黄忠

g.drawImage(Images.image_Huangzhong, 

Images.MACHAO:

//画马超

g.drawImage(Images.image_Machao, 

Images.ZHANGFEI:

//画张飞

g.drawImage(Images.image_Zhangfei, 

Images.ZHAOYUN:

//画赵云

g.drawImage(Images.image_Zhaoyun, 

Images.ZU:

//画卒

g.drawImage(Images.image_Zu, 

Images.BLANK:

//画空白

g.drawImage(Images.image_Blank, 

Images.CURSOR:

//画光标

g.drawRect(Images.LEFT 

unit,Images.UNIT,Images.UNIT);

  其中Images类存的是绘图位置常量(也就是在画图时每个格子的长度和相对坐标原点位置要进行的调整)、地图位置常量(地图的长、宽),地图标记常量(人物对应的记号),地图组合标记常量(后面会细说),图片常量(存放人物的图片);

Draw类主要负责在制定的位置画出人物图片。

下面我来说说Images类中的地图标记常量和地图组合标记常量。

为了能够灵活的安排各个关面的布局,我们决定把游戏布局的信息存储在外部文件中,然后程序启动后把它读进来。

这样我们制定了一套存储图片的代码,这就是地图标记常量,如上面Images类中定义的Caocao(曹操)用a字符来表示,当程序读到a字符时就能将它转化成曹操对应的图片,并在读到a字符的位置上进行显示。

但是从实际观察中我们发现所有的图片并不是统一大小的,有的占4个格子,有的占2个格子,还有的占1个格子,而且即便同是占两个格子的图片还有横、竖之分。

有鉴于此,我们引入了地图组合标记常量,就是说在遇到占有多个格子的时候,值1(也就是Images.LEFT)表示它的左边是一个真正的地图标记,值2(也就是Images.UP)表示它的上边是一个真正的地图标记,值1(也就是Images.LEFTUP)表示它的左上边是一个真正的地图标记。

地图组合标记常量其实就是用来占位置的,与实际显示无关,当后面我们将到移动时还会再来分析组合标记的使用。

  Draw类主要是用来在画布上画出图形,它有两个paint方法,这是很常见的函数重载。

但是程序中实际上只用到了4个参数的paint方法,它直接获得要画图片的相对坐标位置信息,然后调用5个参数的paint方法。

5个参数的paint方法将相对坐标位置信息转换成绝对位置,并实际调用Graphics.drawImage()方法,将Images中的图片画了出来。

这种实现方法的好处是灵活和便于扩展,但你需要画图的位置并不能够对应到格子中的相对坐标位置时,你就可以直接调用5个参数的paint方法,而不必再去修改这各类;

但你添加新的图片时,只要在Images中增加对应的常量,然后向Draw中5个参数的paint方法添加一条处理就可以了。

写到这里,两天的时间刚好用完。

三、需求分析

  这部分叫做需求分析,听起来挺吓人的,其实就是搞清楚我们要做什么,做成什么样,那些不做。

下面我引领着大家共同来完成这一步骤。

首先,我们要做一个华容道的游戏,华容道的故事这里不再赘述了,但其中的人物在这里限定一下,如上面Images类里的定义,我们这个版本只提供曹操(Caocao)、关羽(Guanyu)、张飞(Zhangfei)、赵云(Zhaoyun)、黄忠(Huangzhong)、马超(Machao)和卒(Zu)。

我们这里也限定一下游戏的操作方法:

首先要通过方向键选择一个要移动的区域(就是一张图片),被选择的区域用黑色方框框住;

选好后按Fire键(就是确定键)将这块区域选中,被选中的区域用绿色方框框住;

然后选择要移动到的区域,此时用红色方框框住被选择的区域;

选好要移动到的区域之后按Fire键将要移动的区域(图片)移到要移动到的区域,并去掉绿色和红色的方框。

这里需要强调的概念有选择的区域、选中的区域、要移动的区域和要移动到的区域,这四个概念请读者注意区分,当然也应当把这一部分记入数据字典之中。

为了使文章的重点突出(介绍如何制作一个J2ME的收集游戏),我们这里限定一些与本主题无关的内容暂不去实现:

过关之后的动画(实现时要用到TimerTask或Thread类,后续的系列文章中我会详细介绍动画方面的知识)、关面之间的切换(其实很简单,当完成任务之后重新再做一边)、暂停和保存等操作(这部分的内容介绍的资料很多,我也写不出什么新的东东来,难免抄袭,故此免掉)。

  需求分析基本完成,离下午还有一段时间,马上动手用ACDSee把从网上找来的BMP文件,调整其大小为271*177(我的这个图片是两个部分合在一起,所以比手机实际屏幕大了),另存为PNG格式。

半天时间刚刚好,不但搞清楚了要做的东东,还把要用的图片准备好了。

  四、概要设计

  概要设计是从需求分析过渡到详细设计的桥梁和纽带,这一部分中我们确定项目的实现方法和模块的划分。

我们决定将整个项目分成五个部分,分别是前面介绍的Images、Draw,还有Map和Displayable1和MIDlet1。

Images和Draw类功能简单、结构固定,因此很多项目我们都使用这两各类,这里直接拿来改改就能用了,前面已经介绍过这里不再赘述。

Map类是用来从外部文件读入地图,然后保存在一个数组之中,这部分的内容是我们在本阶段讨论的重点。

Displayable1是一个继承了Canvas类的画布,它用来处理程序的主要控制逻辑和一部分控制逻辑所需的辅助函数,主要函数应该包括用来绘图的paint()函数、用来控制操作的keyPressed()函数、用来控制选择区域的setRange()函数、用来控制选择要移动到区域的setMoveRange()函数、用来移动选中区域的Move()函数和判断是否完成任务的win()函数,更具体的分析,我们放到详细设计中去细化。

MIDlet1实际上就是一个控制整个J2ME应用的控制程序,其实也没有什么可特别的,它和我们前面介绍的"

程序大同小异,这里就不展开来说

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1