admin 管理员组

文章数量: 1086019


2024年6月2日发(作者:linux 查看文件夹大小命令)

第12卷第20期2012年7月 

科学技术与工程 

Vo1.12 No.20 Ju1.2012 

1671—1815(2012)20—5056—04 

Science Technology and Engineering 

⑥2012 Sci.Tech.Engrg. 

基于J2ME的通用游戏框架设计的研究与实现 

陈 勇 巫宗宾 

(宿迁学院计算机科学系,宿迁223800) 

摘要为了更简单快速地让初学习者学会游戏开发,设计出了一种更完善、易用的游戏框架。对于部分J2SE中的部分基础 

JAVA微型版本 

TP311.52; 

通用框架 RMS 

A 

类进行简化移植,增强菜单控制、NPC设计、A1人智能设计等,能使游戏的开发更为便捷,更为简易。 

关键词

中图法分类号文献标志码

J2ME小游戏即在消费类电子设备上运行的游 

戏。例如个人数字助理(PDA)和移动手持设备 

(MID)上运行的小游戏大多为J2ME小游戏 

手机游戏的类型主要有动 

作、策略、冒险、角色扮演、运动以 

及模拟和益智等游戏。但其基本 

框架都是由下面四部分构成:一 

个完整的J2ME架构,由上至下包 

简表 

(Profile) 

。 

配置 

(Configuration) 

虚拟机 

virtual Machine) 

括4个层次的内容:简表(Pro. 

ifle)、配置(Configuration)、虚拟 

底层操作系统 

(Operating System) 

圜函圜 

CLDC受限设备配置 

机(Virtual Machine)和操作系统 

(Operating System),如图1所示。 

J2ME使用简表和配置定制 

图1 J2ME完 

整架构 

员快速构建游戏程序,由CLDC配置表和基本游戏 

Java运行时环境(JRE)。作为一个完整的JRE,J2ME 

由配置和简表组成,配置决定了使用的JVM,而简表 

通过添加特定于域的类来定义应用程序。 

框架GameCanvas游戏画布类,Layer图层类,Tile— 

Layer类,LayerManager图层管理类,Sprite精灵类 

等,MainMenu主菜单类,TalkAbout对话框类, 

Process进度条类,BaseRMS数据库基类,URLEnco- 

derUTF8编码处理构件,StringTokenizer字符串分割 

困 

图2游戏通用框架 

而游戏设计的基本框架主要由GameCanvas游 

戏画布类,Layer图层类,TileLayer类,LayerManager 

图层管理类,Sprite精灵类等几个基本类构成。对 

于游戏的开发还远远不够简单灵活。故本文提出 

设计更多的更灵活的类来扩展其通用游戏框架。 

处理,TimerTask计数器模块,SplashScreen闪屏模 

块,Skin Treatment皮肤处理,A1人工智能处理类等 

类构成. 

MainMenu主菜单类主负责菜单的构建,各屏幕 

处理类的调用。 

TalkAbout对话框类主要用来处理游戏过程中 

要处理的对话及确认。 

1通用游戏框架设计 

游戏通用框架为方便游戏教学人员和开发人 

2012年4月5日收到 

Process进度条类主要用来处理图片的加载、资 

源加载、关口转换等进度需求。 

BaseRMS数据库基类主要用来处理数据的 

第一作者简介:陈勇(1977一),男,四川乐山人,讲师,硕士,研究 

方向:嵌入式系统。E・mail:ehenyong301@tom.com。 

20期 陈勇,等:基于J2ME的通用游戏框架设计的研究与实现 

存储。 

的自动化处理功能。增加游戏难度的问题,及各种 

uRLEncoderuTF8编码处理构件主用来处理 自动精灵活动的算法加载。 

UTF8编码的问题。 

网络基础构件httpHandler主要用于构建网络 

StringTokenizer字符串分割处理主要用来处理 

游戏的通信,H1_rP协议的处理,信息传输与接收入 

对话语言多条语句输入问题。 

的主要方法。 

SplashScreen闪屏模块主要用于游戏欢迎界面 

处理问题。 

2通用框架主要类的类图 

Skin Treatment皮肤处理主要用于处理游戏中 

以下各个类在游戏中导航、存储、AI、网络应用 

对话框皮肤的换肤问题。 等编程中类的关系如图3。 

A1人工智能处理类主要用于处理非玩家对象 

BaseRMS interface ̄ 

SplashScreen EvelltU¥tener 

earl 黼I_擗0 rdStore:RecordStore  ̄iiiiiiEi ENT ACTION:int=一’{readOnly} 

lnie:{nt 

× 

Hn酬ame:Stdng ! l 蠹 ENT UNOEFtNED inl=0(madOnlv). l 

礴 lay:Display i!i!!iSlaSeRMS(Stdng 糍 ∞ # 3吕EveITtant.ContaIner.ObIectFI):void l 

i榭aae:Image …" … 。""" "…“ … … 

E ∞ ayabIe ∞ace0 糟ultL)atao VOi0 

・ 

l}n'# Imef g9特孵∞椰 forel :Reco脚Store 

 ̄: ̄etRMSNameO Stirng Gamen 

a ̄ ̄ess(Spla8hScreen):void l 辑 鞠IaD’void 

榭鳓帮∞嘞:Void en0:void 

㈣ ¥ ma姆Pr

oce蚓ng【0bject)void 

黼 ∞Ba nt)void “ d裔teDeta0 void 津 礤ma摊proces ̄Ing(Stdng1:jnt 

携 囊女i

。a僦【

 ̄t(

Gr

 l

phI

8潞鲫n

妫》:vo|

d 

十H ………西…—— : ¨

8u柑 a挺}PI。=ce sing(int,Stdng)Stdng 

黼裕 却() void 

int):void “ 

l0 rra Proce sing(intm]):_ntn 

0maleP吣ce ng(strIngDn):Stdng ̄ 

麟箍醚 8料een(Display,DIsplayable,Image,int) Se戗inga 

一_ 蠢 一…… ……一 lot 

L拈 

CotmlandLia培a6 

CountDown 

TimerTask《 d al 截

Sl

 

m S蚋ngTokenlzer 

Enumeratic ;

 

 e }( 椭ma 1d:COmmand n

MalnMeau

ewQ 

 

)lTimandf,.遵H{ 

日:{ 

鳓 :∞  a蛳gcre, en:。p a ̄Screen{rea 。n y, —B0 嚣耋Iin0 《 b mI№隋:String l semctGommand:Command newCommend( 确定. 

一 

s埘ng s 日期iimsChan ̄led:boolean 

臻:∞|d 

’ I 《 嚣l∽ e豁£ ma ̄o m

Po

si

si

t 

io

on!i

cnh:a cint har  nH 嘲稍螂 鲁n捌“辩 ∞e n(}:void 

灞妇 £0e¨m& 

bool

nt

}i 赫

ean 

t ̄ansCN 

l 

 ii!iii;ii1 i0 ̄denu0:void 

磐 l e0: Strina l 糍 巍b ̄et0;void 

n 

l 

辨 p秘; d 

0嘲 en ’iCOde2UTFSByte(5tring):byte ̄ §gl黝 S ∞“ o糖nso:int l 

糍 ¥ S酶 尊鳓:void 

拦 H e 下F8S啊ng2unlcode(string).String 冒 l S麟耪乌 ha ̄oteElements()’boolean }l k 

蠹 I 囊,∞ ̄62Unicode(byteB):StdncI 鞲 {嚣自d霸l撼 : 秘黼 n地下o}祜n9o:boolean l l ReadFi 。 

鳓毛酮础 e2Byte(string):byte[】 糍 

灞辫獬

蛐锺S《擞na 螂 E塘ment():Ob ect

日蓥鞋 F ne卅o nf】:Stdn! 

ect

 

 l

l}

 l 

 

删 鲥 0{readOn r 

… … …… 

C ̄f)vss :器:警 嬲 §趣H臻尊曩al船n噼n(8in拼t1n:g ) String l l撩 }IeO 

糍 辩lM ̄xDelimChar( void 

WalSIlIg I interface ̄ 

一…J ……^ I H嘲c’c nec髓onHan删er Map 

露 l 0疆 ACCEP St

端 必 iK|nTreatmenk:SklnTreatment dng Accept (readOnlvl i)g ̄ndCoIOn int 

撼 霸麟‘ 掌 糕: ∞N隧甜 0pTlON:String= Connection {readOnly} )maeMao:i nl(【lH) 

纛 槲灞oT霉oM—eE ER:int=4{readOnly1 ≈ 00N蕾器晰 NGUAGE:Stdng ”Content—Language {eradOnl vl 巍 醐OVEMENT:i r =2{eradOnly] 

鳓 瓣 0 干OM—LEFT:int=5{madOnly】 目 e0树 蠢 玎。下 P拦:Stdng=”Content-Type”0 adOnl v】 黼 旺 =f )

 .

n(madOr ̄y: 

B ̄OM_RIGHT:int=3{readOnly} “R 08 Stdng=仆x-Online.HO鱼“『舟adOnlv1 鞋戮 暖i难HD=f ),0 n..{n ̄adOnly 

舞 藏 酾l 嫩int锄) =鹂辩c。 £ ENCODING:String ”Content-Encoding”伸ad0nIv】 鞋 麟 曲:im棚睡蜀( ) 0 0.如a y 

潮 coUNT:int 4{readOnly} 拣嚣 c0 琶N曩LENGTH:Stnng= Content—Length”{eradOnly) :int羽m { )

瓣瓣黪a∞s Image(玎) 鼙| S摊《灏}娃E WpE:Stdna ”Content-Tvoa 打ead0nl v1 

0,0舾 , 

糍 l鞲 瓣 蝌l曩DLE—CENTER,int=8{readOn J yJ 簿蟪 基 Stdlig t Date {readOnly} l 柑Map:TiledLayer 

誊 骧 1)L ̄nHataht:Int 

M b U ̄LP.ncoderuTF8 l S SERVER:String=,Sewer'’{readOnly} 科 HEIGHT:int=10{readOnly} 

 ̄aseL3iti':int (’e 一tA ){readOnl y) l整 l滞a ̄onseuate(Http ̄nnection):0bIect 

鞭 

’ 

)d ̄f

瓣 l

蕈l 蓐一

I羲 UM

 uM—c0L:int=’8{eradOnly) 

嵇 l蛳I 臻n辨Neade ̄HttpConnection

ROW:int 

aaltEncName:Stifnq ” 

StdnaI]1:Hashtable 攀眶E WIDTHi int=10(readOnlvt 

bntNeedEncodIno:boolean fI1l anseHbaderPteperty(HttpConnection

aI薅ne 孽睡il ̄tl l f鞠日ue或Heade《Hltp( om1ectIon

Stdna' ̄:StdRQ 

Hashtable1 boolean g  ̄rouna(Ⅺ1or(j int 

酾 城 M ̄RADIX:Int=36(readOn lbml -叫je盛He静derPreoellvt'HitOConnection Strln ̄ 1Stdnal・hnnI 黪g麟M自辩0:TiledLayer 

撵 崭阳at: 黼l 。RADIx:int=2{readOn Y } b日麟 ue ua憾制 tpGonnec ̄ion Object) boolean  ̄tetMapLength():int 

日a} “ l 蝴矗拍ethod(一Hpeonne cli0n,String).boolean l getMabScm Amount()int 

蒜嗡 

越H“ 

 ̄ncodefstr

anGode(str

ing.Stri

inq):St

ng):St

dn# 

dng 

}~……………………………………………………1 ge

Mgb(i

 ab ype㈣

bt) 

int):int 

辍 ̄git(iilt.int):char 

赫嚣鞴n薯 

;iiii!!iii!lUi ̄EficoderUTF8(1 

r十_ 口fap)s:0 :int 

图3通用游戏框架类图设计 

5058 科学技术与工程 

0,0,3,0,3,0,0,4,3,3, 

12卷 

图3主要描述了MainMenu导航器类,Settings 

设置类与BaseRMS数据库基类等的类图结构,这些 

类的主要属性和方法。 

MainMenuScreen导航器界面通过继承List,加 

3,2,3,0,3,0,3,2,2,4,4,4,4,2,2,0,3,0,33,3, 

●●●

- 

}; 

} 

载MainMenu主菜单类其后主要设置一些菜单列 

表,在主类中Midlet中通过方法访问,转向各导航 

页面。 

A1人工智能处理接口中?AI(Artiifcial Intelli. 

gence),即人工智能,有时也称作机器智能或人工 

脑,是指那些由人类制造出来的系统,在面对具体 

事务时,所表现出的类人反应。通常情况下人工智 

BaseRMS主要描述开启数据库open(),关闭数 

据库close(),获取数据库名更新数据getRMSName 

(),加载数据的方法loadData()等。通过Settings 

类的各方法使用BaseRMS类进行一些数据的存储 

工作。Settings类通过getCmnet()方法可以对网络 

访问方式进行HTFP网络连接类型修改。 

TalkAbout对话框类、Process进度条类、Splash— 

Screen闪屏模块等类主要处理程序流程,UTF8编 

码处理 ]、网络连接 ]、事件处理等类具体属性方 

法见图4所示。 

磨cn. ̄om.javachen skin Treatment 

啦豳ActionListener.java 

审 Container.java 

崮逾Font.java 

国Process.java 

审国SkinTreatment.java 

霹麓TalkAbout.java 

南陵WindowFrom.java 

矗J2ME library fJ2ME Wireless Toolkit 2.2 MIDP 2.0 

图4各类在通用框架库中的包图 

3通用框架主要类的代码实现 

其地图类的主要代码,我们可以通过地图类为 

基础,快速地构建各关口的地图加载。 

public class Map{//二维地图使用实例 

public static int[]map0—1eve11:{0,0,0,0,0,0,0,0,0, 

能多指以人类思维模式为准绳,通过计算机模拟实 

现的智能。我们定义其接口为: 

public interface AtLi ̄ener{ 

public abstract void automateProcessing(Object O);//对象处 

理算法方法 

} 

游戏中会设置很多敌方精灵,称为NPC.我们在程序中设置很 

多自动运行的NPC.如下代码所示: 

npc=new NPCSpfite[NPC—CT]; 

npc[0]:new NPCSprite(npclmages,16,16,NPCSpri— 

te.NPC

CANON1,width,heihgt); 

npc[1]=new NPCSprite(npclmages,16,16,NPCSpri— 

te.NPC

CANON2,width,height); 

npc[2]=new NPCSprite(npclmages,16,16,NPCSpri— 

te.NPC

CANON3,width,height); 

网络处理 

//http请求常量 

public static ifnal Stirng RQH—HOST=”X-Online—Host”; 

public static final String RQH_ACCEPT=”Accept”: 

public static final String RQH—.CONTENT—.LANGUAGE 

”Content—Language”: 

public static final String RQH—CONTEN 1’_rrYPE=“Con— 

tent-Type”; 

public static final String RQH——CONNECTION——OPTION 

=”Connection”: 

//http回应常量 

public static final String RSH

DATE=”Date”; 

public static ifnal String RSH

SERVER=”Server”; 

public static final String RSH

MODIFIEDDATE=”Last- 

Modiifed”; 

public static final Stirng RSH

—.

CONTENT

—.

ENCODING 

=”Content—Encoding”: 

public static final String RSHCONTENT

LENGTH=” 

——

Content—Length”; 

public static final Stirng RSH

CONTENT

TYPE=”Con- 

tent—Type”; 

20期 

事件处理: 

陈勇,等:基于J2ME的通用游戏框架设计的研究与实现 5059 

不仅使初学者很快入门,而且能够使用游戏框架快 

速开发出比较完美的手机游戏。 

public interface EventListener{ 

ifnal static public int EVENTUNDEFINED=0; 

inalf static public int EVENT

ACTION:一1; 

_

本文作者创新点:以创新的方式扩展了J2ME 

的游戏类库,在原有五个类的基础上,创建了对游 

戏皮肤、等待界面、人工智能接口、菜单、编码方案、 

public void processEvent(int eventType,Container c,Object 

[]args);//事件处理方法 

} 

H,ITI1P通信接口、数据库处理等类的程序设计。 

4通用框架实现坦克游戏运行图 

参考文献 

1徐洪智.利用Tc实现五子棋游戏.电脑编程技巧与维护, 

2010;(O3):74—_76 

2朱全银,章慧.基于J2ME和J2EE的移动网络游戏系统.计 

算机工程,2008;(16):141~143 

3钟海平,曾玉珠.手机游戏“坦克大战”的开发.电脑编程技巧 

与维护,2009;(03):82—86 

4张新猛,蒋盛益,姜灵敏.基于j2me/socket的手机网络游戏设计 

与实现.微计算机信息,2010;(36):244--246 

5杨秋霞.基于J2ME的手机游戏开发.计算机时代,2005;(05): 

12—14 

6姚盛旺.基于J2ME的手机网络游戏应用研究.武汉:武汉理工 

大学,2006:l_57 

7陈勇.基于J2ME无线应用中的编码转换.电脑开发与应用, 

图5 坦克游戏包结构及坦克游戏运行截图 

2007;(12):67 

8陈勇,张曦煌.基于GPRS通信的J2ME家长信息系统.计算 

5结束语 

机工程与设计,2008;(08):285—287 

本系统基于J2ME规范,构建了通用游戏框架, 

J2ME Game Based on Universal Design Research 

and Implementation Framework 

CHEN Yong.WU Zhong—bing 

(Department of Computer Science,Suqian College,Suqian 223800,P.R.China) 

[Abstract] In order to more quickly and easily SO that students learn early game development.a more compre. 

hensive,user—friendly framework of the game are designed.For some parts of the J2SE base class to simplify migra. 

tion to enhance the menu control,NPC design,AI design,intelligent people can make game development easier

, 

more simple. 

[Key words]J2ME Common framework Record Management System 


本文标签: 游戏 处理 框架 通用 设计