为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

j2me游戏开发

2011-11-19 22页 pdf 3MB 37阅读

用户头像

is_317599

暂无简介

举报
j2me游戏开发 特别说明 此资料来自百度文库(http://wenku.baidu.com/) 您目前所看到的文档是使用的抱米花百度文库下载器所生成 此文档原地址来自 感谢您的支持 抱米花 http://blog.sina.com.cn/lotusbaob http://wenku.baidu.com/view/7297b710f18583d0496459a4.html j2me游??发:J2ME游??发实例?解 ?狂代? ht...
j2me游戏开发
特别说明 此资料来自百度文库(http://wenku.baidu.com/) 您目前所看到的文档是使用的抱米花百度文库下载器所生成 此文档原地址来自 感谢您的支持 抱米花 http://blog.sina.com.cn/lotusbaob http://wenku.baidu.com/view/7297b710f18583d0496459a4.html j2me游??发:J2ME游??发实例?解 ?狂代? http://CrazyCoder.cn/ ?:http:/CrazyCoder.cn/Java/Article7922.html   、序言   昨天在网上?逛发?篇?解用delphi实?华容道游?文章?受启发.于是?生了?华容道游?移植到手机中去冲动.?在手机游?琳琅?目不而足华容道实?版本也很多.正巧不久前笔者?J2ME下了番功夫正想借?个机会小?牛刀?用J2ME原因?有个就是目前Java?发大行其到无?增殖业务迅猛发展J2ME?用日?活跃起?也希望我?篇文章能够?J2ME知?普及和?发团?(Team)?大推波助?由于长期受ISO?范?准影响?次小?牛刀我也打算遵照?件Software要求并采取瀑布式?发模式??划?目也希望借此机会向各位?有机会参和正式?目?发?者介?下?件Software?发流程   ?里我?先定义?目?人?体制(其实只有我个人):技??研、需求分析、概要设?、??设?、??、??均有笔者人担任;美工?里我找了个捷??用网上?成?片然后用ACDSee把它由BMP??成PNG格式(我出于?座目未做商业?用??不算侵?吧);至于发布工作由于缺少OTA服务器此?工作不做(但是我会介??步如何做)   接下?我??划下?目实??间以我个人经?设想如下:技??研用2天(?部分解决?目可行性和重大技????间会长些)需求分析用半天(?竟有?成东东可以参照只要理清思路就行了况且?有很多以前用?设?模式和?好代?)概要设?再用半天(有了需求概要只不够是照方抓药)??设?要用2天(?步要把所有??想清楚?要?可能准确描述出?)??用2天(其实1天就够了技?已经不是??多?划出天??付突发事件)??用2天(????至少占全部?目 4分的不??个?目只是个Demo也太??了)发布也要用上半天(?管我?不去实际发布它但是?要花点?间搞清楚??如何做)最后就是?目整理总?和?庆功会(?间待定)    2.利其器   “公欲善其事必先利其器”做?目的前第步是前期?研.我?要做华容道?个东东随处可见我?要?研是两个方面:   1、游??容:游?本身很??就是有几个格子曹操占据其中个?大格子然后被几个格子包??些格子形?不定相同但是?住了曹操移动方向.游?者需要挪动?些格子最?把曹操移动到个指定位置才算是??.更具体分析我?放在后面需求分析和概要设?中??   2、技??备:?到技??里??介?下J2ME.Java有 3个版本分?是J2ME(微型版).J2SE(?准版).J2EE(企业版 ).J2ME是个?准采用3??构设?.最低?是配置?(Configuration)也就是设备?其上是?表?(Profile),再上是?用?(Application).MIDP就是移动信息设备?表目前主流手机支持MIDP1.0最新是MIDP2.0,它比前个版本增加了?游?支持在javax.microedition.lcdui.game包中提供了些类?处理游?中技?比如我?后面会用到Sprite类它是用?翻??片.?衡再 3笔者决定使用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]appsHelloWorldsrc目?的下.我???如下代?并保存在上述目?的下文件名?Hello.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public Hello extends MIDlet { private Display display; public Hello{ display =Display.getDisplay(this); } public void startApp{ TextBox t = TextBox(\"Hello\",\"Hello\",256,0); display.Current(t); } public void pauseApp{ } public void destroyApp(boolean unconditional){ } }   保存好了的后点?Build按?工具会?你??如无意外再点?Run按?会?出个手机界面剩下就不用我教了吧(用鼠??手机按??狂点)呵呵你第个J2ME已经OK了.什么?你?点都?懂呢(真是?害不懂都能?出J2ME?果然是高手).我?里主要是介?WTK2.0工具使用并不是目不懂?后面?会有??解??里只是?你上路.什么?你不懂Java!那也?有?系后面我再?得?点   跳?J2ME我?先??点游?理?.具体到华容道?个游?主要有 3个方面??.游?操作.??判?.?里????其他两方面放在概要设?和??设?里?.所???其实就是画?就是在要?示?形位置上输出副?片(要是?扯到动画就要麻?些可以使用TimerTask.Thread或Rannable的类技?)?副?片可以是事先准备好也可以是??处理.在J2ME中有个Image类,?门用于管理?片它有createImage思路方法可以直接?取?片文件(J2ME只支持PNG格式?片)也可以截取已有?片部分(?样我?可以把很多?片放在起然后??截下?好处是?省存?空间和文件?取?间?于手机?两者都是性能瓶?).   J2ME?有个Graphics类?门用于??它有drawImage思路方法可以把副?片在指定位置上?示出?它?有drawRect思路方法和Color思路方法?两个思路方法在后面我??行游?操作?就会用到?里先交代下.有了?片和??思路方法?需要知道把?画到?身上J2ME提供了个Canvas类字面意思就是画布它有个pa思路方法用于刷新页面?有个repa思路方法用于pa思路方法.听着有些糊涂是吧不要?我??合具体?解下.?了今后?程方便我??建两个类Images和Draw,Images用于保存些常量值和?片Draw主要是用于画??两个类源代?如下 Images类源代?如下: package huarongroad; import javax.microedition.lcdui.*; import javax.microedition.lcdui.game.*; public Images {//保存常量 //??位置常量 public final UNIT = 32;//方块?位长度 public final LEFT = 10;//画?左边界?点 public final TOP = 9;//画?上边界?点 //地?位置常量 public final WIDTH = 4;//地??度 public final HEIGHT = 5;//地?高度 //地???常量 public final CAOCAO = () ?a?; <A href=\"file://曹\">file://曹操地??? public final MACHAO = () ?b?;//马超地??? public final HUANGZHONG = () ?c?;//黄忠地??? public final GUANYU = () ?d?;//?羽地??? public final ZHANGFEI = () ?e?;//?飞地??? public final ZHAOYUN = () ?f?;//?云地??? public final ZU = () ?g?;//卒地??? public final BLANK = () ?h?;//空白地??? public final CURSOR = () ?i?;//光?地??? //地??合??常量 public final DLEFT = () ?1?; <A href=\"file://?\">file://?合?形左边?? public final DUP = () ?2?; <A href=\"file://?\">file://?合?形上边?? public final DLEFTUP = () ?3?; <A href=\"file://?\">file://?合?形左上?? //?片常量 public Image image_base;//基本?片 public Image image_Zhaoyun;//?云?片 public Image image_Caocao;//曹操?片 public Image image_Huangzhong;//黄忠?片 public Image image_Machao;//马超?片 public Image image_Guanyu;//?羽?片 public Image image_Zhangfei;//?飞?片 public Image image_Zu;//卒?片 public Image image_Blank;//空白?片 public Image image_Frame;//游?框架?片 public Images {//构造 } public 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 = Image.createImage(image_base, 0, 0, UNIT, 2 * UNIT, Sprite.TRANS_NONE); image_Caocao = Image.createImage(image_base, UNIT, 0, 2 * UNIT, 2 * UNIT, Sprite.TRANS_NONE); image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT, 2 * UNIT, Sprite.TRANS_NONE); image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT, 2 * UNIT, Sprite.TRANS_NONE); image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNIT, 2 * UNIT, UNIT, Sprite.TRANS_NONE); image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT, UNIT, 2 * UNIT, Sprite.TRANS_NONE); image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT, Sprite.TRANS_NONE); image_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,UNIT, UNIT, Sprite.TRANS_NONE); true; }catch (Exception ex) { false; } } }   Draw类源代?如下: package huarongroad; import javax.microedition.lcdui.*; public Draw { //?制游?中?片 public Draw(Canvas canvas) {//构造 } public boolean pa(Graphics g, img, x, y) { //在地?x,y点?制img指定?片 try { pa(g, img, x, y, Images.UNIT);//把地?x,y点?化成画布??坐??? true; } catch (Exception ex) { false; } } public boolean pa(Graphics g, img, x, y, unit) { try { switch (img) { Images.CAOCAO://画曹操 //变成??坐?并做?整 g.drawImage(Images.image_Caocao, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.GUANYU://画?羽 g.drawImage(Images.image_Guanyu, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.HUANGZHONG://画黄忠 g.drawImage(Images.image_Huangzhong, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.MACHAO://画马超 g.drawImage(Images.image_Machao, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.ZHANGFEI://画?飞 g.drawImage(Images.image_Zhangfei, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.ZHAOYUN://画?云 g.drawImage(Images.image_Zhaoyun, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.ZU://画卒 g.drawImage(Images.image_Zu, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.BLANK://画空白 g.drawImage(Images.image_Blank, Images.LEFT + x * unit, Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT); ; Images.CURSOR://画光? g.drawRect(Images.LEFT + x * unit, Images.TOP + y * unit,Images.UNIT,Images.UNIT); ; } true; }catch (Exception ex) { false; } } }   其中Images类存是??位置常量(也就是在画??每个格子长度和相?坐?原点位置要?行?整)、地?位置常量(地?长、?)地???常量(人物???号)地??合??常量(后面会??)?片常量(存放人物?片);Draw类主要??在制定位置画出人物?片下面我???Images类中地???常量和地??合??常量?了能够灵活安排各个?面布局我?决定把游?布局信息存?在外部文件中然后启动后把它???   ?样我?制定了套存??片代??就是地???常量如上面Images类中定义Caocao(曹操)用a?表示??到a?就能?它?化成曹操???片并在?到a位置上?行?示但是从实际?察中我?发?所有?片并不是统大小有占4个格子有占2个格子?有占1个格子而且即便同是占两个格子?片?有?、?的分有?于此我?引入了地??合??常量就是?在遇到占有多个格子?候值1(也就是Images.LEFT)表示它左边是个真正地???值2(也就是Images.UP)表示它上边是个真正地???值1(也就是Images.LEFTUP)表示它左上边是个真正地???地??合??常量其实就是用?占位置和实际?示无??后面我??到移动??会再?分析?合??使用   Draw类主要是用?在画布上画出?形它有两个pa思路方法?是很常见重?但是中实际上只用到了4个参?pa思路方法它直接?得要画?片相?坐?位置信息然后5个参?pa思路方法5个参?pa思路方法?相?坐?位置信息??成??位置并实际Graphics.drawImage思路方法?Images中?片画了出??种实?思路方法好处是灵活和便于?展但你需要画?位置并不能够??到格子中相?坐?位置?你就可以直接5个参?pa思路方法而不必再去修改?各类;但你添加新?片?只要在Images中增加??常量然后向Draw中5个参?pa思路方法添加条处理就可以了 ?到?里两天?间?好用完    3、需求分析   ?部分叫做需求分析听起?挺吓人其实就是搞清楚我?要做什么做成什么样那些不做下面我引?着大家共同?完成?步?首先我?要做个华容道游?华容道故事?里不再?述了但其中人物在?里限定下如上面Images类里定义我??个版本只提供曹操(Caocao)、?羽(Guanyu)、?飞(Zhangfei)、?云(Zhaoyun)、黄忠(Huangzhong)、马超(Machao)和卒(Zu)我??里也限定下游?操作思路方法:首先要通?方向???个要移动?域(就是??片)被???域用黑色方框框住;?好后按Fire?(就是确定?) ??块?域?中被?中?域用?色方框框住;然后??要移动到?域此?用?色方框框住被???域;?好要移动到?域的后按Fire??要移动?域(?片)移到要移动到?域并去掉?色和?色方框?里需要强?概念有???域、?中?域、要移动?域和要移动到?域? 4个概念??者注意?分?然也??把?部分?入?据字典的中   ?了使文章重点突出(介?如何制作个J2ME收集游?)我??里限定些和本主?无??容?不去实?:??的后动画(实??要用到TimerTask或Thread类后?系列文章中我会??介?动画方面知?)、?面的间切?(其实很???完成任务的后重新再做边)、?停和保存等操作(?部分?容介??料很多我也?不出什么新东东??免抄?故此免掉) 需求分析基本完成离下午?有段?间马上动手用ACDSee把从网上找?BMP文件?整其大小?271*177(我?个?片是两个部分合在起所以比手机实际屏幕大了)另存?PNG格式半天?间??好不但搞清楚了要做东东?把要用?片准备好了    4、概要设?   概要设?是从需求分析?渡到??设?桥梁和???部分中我?确定?目实?思路方法和模块划分我?决定?整个?目分成 5个部分分?是前面介?Images、Draw?有Map和Displayable1和MIDlet1Images和Draw类功能??、?构固定因此很多?目我?都使用?两各类?里直接拿?改改就能用了前面已经介???里不再?述Map类是用?从外部文件?入地?然后保存在个的中?部分?容是我?在本?段??重点Displayable1是个?承了Canvas类画布它用?处理主要控制??和部分控制??所需?助主要??包括用???pa、用?控制操作keyPressed、用?控制???域Range、用?控制??要移动到?域MoveRange、用?移动?中?域Move和判?是否完成任务win更具体分析我?放到??设?中去?化MIDlet1实际上就是个控制整个J2ME?用控制其实也?有什么可特?它和我?前面介?\"Hello World\"大同小异?里就不展???了后面会?出它全部代?   Map类主要??有个Grid 2?用?存放华容道地????有个read_map用?从外部文件?取地??容填充Grid?据?构再就是要有个draw_map用?把Grid?据?构中地??容??成?片?示出?(?然要Draw类pa思路方法)?到?取外部文件笔者知道有两种思路方法:种是?统定义个InputStream?象然后用getClass.getResourceAsStream思路方法取得输入流然后再从输入流中取得外部文件?容例如 InputStream is = getClass.getResourceAsStream(\"/filename\"); (is != null) { a = () is.read; }   ?里?注意文件名中根路?是相?于便以后文件放置位置而不是源文件(java)第 2种思路方法是使用onnector.openInputStream思路方法然后打???是Resource但是?种思路方法笔者反复??都?能?通?告是缺少Resource??估?第 2种思路方法用到J2ME某些?展类包此处不再深究由于以前已经做?些类似华容道?样地??里直接?出Map类代?后面就不再??解?Map类了以便于我?可以集中精力处理Displayable1中?? Map类代?如下: package huarongroad; import java.io.InputStream; import javax.microedition.lcdui.*; public Map { //处理游 ?地???从外部文件加?地??据存放地??据并按照地??据?制地? public Grid;//存放地??据 public Map {//构造??化地??据存??构 this.Grid = [Images.HEIGHT][Images.WIDTH]; //用 2?存放地??据注意第?是?直坐?第 2?是水平坐? } public read_map( i) { <A href=\"file://从\">file://从外部文件加?地??据并存放在存??构中返回值是光?点位置 //参?是加?地?文件等? a = [2];//光?点位置0是水平位置1是?直位置 try { InputStream is = getClass.getResourceAsStream( \"/huarongroad/level\".concat(String.valueOf(i))); (is != null) { for ( k = 0; k < Images.HEIGHT; k) { for ( j = 0; j < Images.WIDTH; j) { this.Grid[k][j] = () is.read; ( this.Grid[k][j] Images.CURSOR ) { //判?出光?所在位置 a[0] = j;//光?水平位置 a[1] = k;//光??直位置 this.Grid[k][j] = Images.BLANK;//?光?位置设成空白背景 } } is.read;//?取回车(13),忽略掉 is.read;//?取?行(10),忽略掉 } is.close; } { //?取文件失? a[0] = -1; a[1] = -1; } }catch (Exception ex) { //打?文件失? a[0] = -1; a[1] = -1; } a; } public boolean draw_map(Graphics g) { //Draw类??思路方法?制地? try { for ( i = 0; i < Images.HEIGHT; i) { for ( j = 0; j < Images.WIDTH; j) { Draw.pa(g, this.Grid[i][j], j, i);//?制地? } } true; }catch (Exception ex) { false; } } }   ?于像华容道?样小型地?可以直接用手工??制地??容比如: fa1c 2232 bd1e 2gg2 gihg   但是如果遇到像坦克大?或超??莉那样地?就必?另外?发个地???器了(我会在后?文章中介?用vb??发个地???器) 5、??设?   ??设?是?发?程中至?重要个??好在我?在前面各个?段中已经搭建好了?目所需些工具?在?个?段中我?只需集中精力设?好Displayable1中??(两天?间?然不只干?点活?要把其他几个类设?修改下)   Displayable1?个类??处理控制??首先它需要有表示?前?面变量level、表示?前光?位置变量loc、表示要移动?域变量SelectArea、表示要移动到?域变量MoveArea、表示是否已有?域被?中而准备移动变量Selected和Map类例子MyMap然后我?根据用户按????处理??消息我?要实?keyPressed在中我?处理按?上下左右和?中(Fire)?里处理需要我展????后面我很快会把?部分??展?   接下?是实?pa我?打算在?部分中反复重画背景、地?和???域?个必?处理好?域被?中的后画笔?色切?具体?就是在?有?中任何?域?要用黑色画笔??重要移动?域?使用?色画笔???要移动到?域?改用?色画笔(?然附加?流程?是必不可少)   再下面要实?Range和MoveRange?两个用?设置要移动?域和要移动到?域我思路就是利用前面在 Images类中介??地??合??常量?移动到地??合??常量?根据?点地?中值做逆向变?找到相?地???常量然后设置相?loc、SelectArea和MoveArea,其中MoveRange?用到了个?助isInRange,isInRange是用?判??定点是否在已?中要移动?域的?,如果isInRange返回值是假并且?点处值不是空白就表明要移动到?域侵犯了其他以被占用?域有了Range和MoveRangeMove就水到渠成了,Move?要移动?域移动到要移动到?域,在移动?程中分? 3步?行:   第.复制要移动?域;   第 2.?复制出要移动?域复制到要移动到?域(?两步分??行目是防止在复制?程中覆盖掉要移动?域);   第 3.用isInRange2判??定点是否在要移动到?域?,?不在要移动到?域?点设置成空白   下面我???分析下keyPressed实?思路方法:首先,keyPressed要处理按?上下左右和?中(Fire),在处理?需要用Canvas类getGameAction??按??值??成游?方向,?样可以提高游?兼容性(??J2ME实?,其方向??值不定是相同)   接下?,分?处理 4个方向和?中.?按下向上?,先判?是否已经?定了要移动?域(即this.selected是否?真),如果?有?中要移动?域??光?向上移动格,然后Range设置??要移动?域,再repa刷新屏幕,否?如果已经?中了要移动?域,就?光?向上移动格,然后MoveRange判?是否能够向上移动已?中?域,如果能移动就repa刷新屏幕,如果不能移动就?光?向下退回到原?位置   ?按下向下?,先判?是否已经?定了要移动?域,如果?有?中要移动?域?判??前所处?域是否?两个格高,如果是两个格高?向下移动两格,如果是个格高?向下移动格,接着再Range设置??要移动?域,而后repa刷新屏幕,否?如果已经?中了要移动?域,就?光?向下移动格,然后MoveRange判?是否能够向下移动已?中?域,如果能移动就repa刷新屏幕,如果不能移动就?光?向上退回到原?位置.按下向左?情况完全类似向上情况,按下向右?情况完全类似向下情况,因此?里不再?述,??情况?参见源代?   ?按下?中??,先判?是否已经?中了要移动?域,如果已经?中了要移动?域就Move完成由要移动?域到要移动到?域移动?程,接着repa刷新屏幕,然后?已????置成false,??win判?是否完成了任务,否?如果??有?定要移动?域?再判??前?中?域是否?空白,如果不是空白就??中??置成true,然后刷新屏幕.?里介?个?门技巧,在? 发遇到复????候,可以构造格打印??所?心?据?构打印出?以利??,?里我?就构造个PrGrid,?个?粹是?了??的用,效果?得不?.至此我?完成了??前全部工作    6.??   整个?目共有 5个类,有 4个类代?前面已经介??了,而且是在其他?目中使用?相?成熟代?.?在只需全力去实?Displayable1类.Displayable1类代?如下: package huarongroad; import javax.microedition.lcdui.*; public Displayable1 extends Canvas implements CommandListener { private loc = [2]; <A href=\"file://光\">file://光??前位置0是水平位置1是?直位置 private SelectArea = [4];//被?定?域即要移动?域 private MoveArea = [4];//要移动到?域 private Map MyMap = Map;//地?类 private boolean selected;//是否已经?中要移动?域?志 private level;//但前?面 public Displayable1 {//构造 try { jbInit;//JBuilder定义化 }catch (Exception e) { e.prStackTrace; } } private void Init_game{ //化游??取地?设置???域清空要移动到?域 this.loc = MyMap.read_map(this.level);//?取地?文件并返回光?位置 //0?水平位置1??直位置 this.SelectArea[0] = this.loc[0];//化?中?域 this.SelectArea[1] = this.loc[1]; this.SelectArea[2] = 1; this.SelectArea[3] = 1; this.MoveArea[0] = -1;//化要移动到?域 this.MoveArea[1] = -1; this.MoveArea[2] = 0; this.MoveArea[3] = 0; } private void jbInit throws Exception {//JBuilder定义化 <A href=\"file://初\">file://化例子变量 this.selected = false;//设置?有被?中要移动?域 this.level = 1; Images.init;//化?片常量 Init_game;//化游??取地?设置???域清空要移动到?域 CommandListener(this);//添加命令?听?是Displayable例子思路方法 addCommand( Command(\"Exit\", Command.EXIT, 1));//添加“退出”按? } public void commandAction(Command command, Displayable displayable) { //命令处理 (command.getCommandType Command.EXIT) {//处理“退出” MIDlet1.quitApp; } } protected void pa(Graphics g) { //画?用于?制用户画面即?示?片勾画?中?域和要移动到?域 try { g.drawImage(Images.image_Frame, 0, 0, Graphics.TOP | Graphics.LEFT);//画背景 MyMap.draw_map(g);//按照地??容画? ( this.selected ) g.Color(0,255,0);//如果被?中改用?色画出被?中?域 g.drawRect(this.SelectArea[0] * Images.UNIT + Images.LEFT, this.SelectArea[1] * Images.UNIT + Images.TOP, this.SelectArea[2] * Images.UNIT, this.SelectArea[3] * Images.UNIT);//画出???域 <A href=\"file://如\">file://如果被?中就用?色 <A href=\"file://否\">file://否?使用黑色 g.Color(255,255,255);//恢复画笔?色 (this.selected) {//已经?中了要移动?域 g.Color(255, 0, 255);//改用?色 g.drawRect(this.MoveArea[0] * Images.UNIT + Images.LEFT, this.MoveArea[1] * Images.UNIT + Images.TOP, this.MoveArea[2] * Images.UNIT, this.MoveArea[3] * Images.UNIT);//画出要移动到?域 g.Color(255, 255, 255);//恢复画笔?色 } }catch (Exception ex) { } .out.prln(Runtime.getRuntime.freeMemory); .out.prln(Runtime.getRuntime.totalMemory); } private void Range { //设置移动后能够?中?域 //?整?前光?位置到地?主位置即??人物信息位置 (this.MyMap.Grid[this.loc[1]][this.loc[0]] Images.DLEFT) { this.loc[0] -= 1;//向左? } (this.MyMap.Grid[this.loc[1]][this.loc[0]] Images.DUP) { this.loc[1] -= 1;//向上? } (this.MyMap.Grid[this.loc[1]][this.loc[0]] Images.DLEFTUP) { this.loc[0] -= 1;//向左? this.loc[1] -= 1;//向上? } this.SelectArea[0] = this.loc[0];//设置光?水平位置 this.SelectArea[1] = this.loc[1];//设置光??直位置 //设置光??度 (this.loc[0] + 1 < Images.WIDTH) { this.SelectArea[2] = this.MyMap.Grid[this.loc[1]][this.loc[0] + 1] != () ?1? ? 1 : 2; } { this.SelectArea[2] = 1; } //设置光?高度 (this.loc[1] + 1 < Images.HEIGHT) { this.SelectArea[3] = this.MyMap.Grid[this.loc[1] + 1][this.loc[0]] != () ?2? ? 1 : 2; } { this.SelectArea[3] = 1; } } private boolean MoveRange { //设置要移动到?域能够移动返回true,否?返回false for ( i = 0; i < this.SelectArea[2]; i) { for ( j = 0; j < this.SelectArea[3]; j) { (this.loc[1] + j >= Images.HEIGHT || this.loc[0] + i >= Images.WIDTH || (!isInRange(this.loc[0] + i, this.loc[1] + j) && this.MyMap.Grid[this.loc[1] + j][this.loc[0] + i] != Images.BLANK)) { false; } } } this.MoveArea[0] = this.loc[0]; this.MoveArea[1] = this.loc[1]; this.MoveArea[2] = this.SelectArea[2]; this.MoveArea[3] = this.SelectArea[3]; true; } private boolean isInRange( x, y) { //判??定(xy)点是否在?定?域的?x是水平坐?y是?直坐? (x >= this.SelectArea[0] && x < this.SelectArea[0] + this.SelectArea[2] && y >= this.SelectArea[1] && y < this.SelectArea[1] + this.SelectArea[3]) { true; } { false; } } private boolean isInRange2( x, y) { //判??定(xy)点是否在要移动到?域的?x是水平坐?y是?直坐? (x >= this.MoveArea[0] && x < this.MoveArea[0] + this.MoveArea[2] && y >= this.MoveArea[1] && y < this.MoveArea[1] + this.MoveArea[3]) { true; } { false; } } protected void keyPressed( keyCode) { //处理按下??事件?是Canvas例子思路方法 switch (getGameAction(keyCode)) {//?按?值?化成方向常量 Canvas.UP://向上 (!this.selected) {//??有?定要移动?域 (this.loc[1] - 1 >= 0) {//向上?有移动空间 this.loc[1]--;//向上移动下 Range;//设置光?移动?域?能?光?移动到地?主位置 repa;//重新?? } } {//已经?定了要移动?域 (this.loc[1] - 1 >= 0) {//向上?有移动空间 this.loc[1]--;//向上移动下 (MoveRange) {//能够移动?能够设置要移动到?域 repa;//重新?? } {//不能移动 this.loc[1];//退回? } } } ; Canvas.DOWN://向下 (!this.selected) {//??有?定要移动?域 (this.loc[1] + 1 < Images.HEIGHT) {//向下?有移动空间 (this.MyMap.Grid[this.loc[1] + 1][this.loc[0]] Images.DUP){//??片有两个格高 this.loc[1];//向下移动下 (this.loc[1] + 1 < Images.HEIGHT) {//向下?有 <A href=\"file://移\">file://移动空间 this.loc[1];//向下移动下 Range;//设置光?移动?域 <A href=\"file://?\">file://?能?光?移动到地?主位置 repa;//重新?? } {//向下?有移动空间 this.loc[1]--;//退回? } } {//??片只有个格高 this.loc[1];//向下移动下 Range;//设置光?移动?域 <A href=\"file://?\">file://?能?光?移动到地?主位置 repa;//重新?? } } { } } {//已经?定了要移动?域 (this.loc[1] + 1 < Images.HEIGHT) {//向下?有移动空间 this.loc[1];//向下移动下 (MoveRange) {//能够移动?能够设置要移动到?域 repa;//重新?? } {//不能移动 this.loc[1]--;//退回? } } } ; Canvas.LEFT://向左 (!this.selected) {//??有?定要移动?域 (this.loc[0] - 1 >= 0) {//向左?有移动空间 this.loc[0]--;//向左移动下 Range;//设置光?移动?域?能?光?移动到地?主位置 repa;//重新?? } } {//已经?定了要移动?域 (this.loc[0] - 1 >= 0) {//向左?有移动空间 this.loc[0]--;//向左移动下 (MoveRange) {//能够移动?能够设置要移动到?域 repa;//重新?? } {//不能移动 this.loc[0];//退回? } } } ; Canvas.RIGHT://向右 (!this.selected) {//??有?定要移动?域 (this.loc[0] + 1 < Images.WIDTH) {//向右?有移动空间 (this.MyMap.Grid[this.loc[1]][this.loc[0] + 1] Images.DLEFT) {//??片有两个格? this.loc[0];//向右移动下 (this.loc[0] + 1 < Images.WIDTH) {//向右?有 <A href=\"file://移\">file://移动空间 this.loc[0];//向右移动下 Range;//设置光?移动?域 <A href=\"file://?\">file://?能?光?移动到地?主位置 repa;//重新?? } {//向右?有移动空间 this.loc[0]--;//退回? } } {//??片只有个格? this.loc[0];//向右移动下 Range;//设置光?移动?域 <A href=\"file://?\">file://?能?光?移动到地?主位置 repa;//重新?? } } { } } {//已经?定了要移动?域 (this.loc[0] + 1 < Images.WIDTH) {//向右?有移动空间 this.loc[0];//向右移动下 (MoveRange) {//能够移动?能够设置要移动到?域 repa;//重新?? } {//不能移动 this.loc[0]--;//退回? } } } ; Canvas.FIRE: (this.selected) {//已经?定了要移动?域 Move;//?要移动?域移动到??中?域 repa;//重新?? this.selected = false;//清除已?定要移动?域?志 ( win) { .out.prln(\"win\"); } } {//??有?定要移动?域 (this.MyMap.Grid[this.loc[1]][this.loc[0]] Images.BLANK) {//要移到位置是个空白 } {//要移到位置不是空白 this.selected = true;//设置已?定要移动?域?志 } repa;//重新?? } ; } } private boolean win{ <A href=\"file://判\">file://判?是否已经救出了曹操 ( this.MyMap.Grid[Images.HEIGHT - 2 ][Images.WIDTH - 3 ] Images.CAOCAO ) true; false; } private void PrGrid(String a) { <A href=\"file://打\">file://打印?前地??容用于?? .out.prln(a); for ( i = 0; i < Images.HEIGHT; i) { for ( j = 0; j < Images.WIDTH; j) { .out.pr( (char)this.MyMap.Grid[i][j]); } .out.prln(\"\"); } } private void Move { <A href=\"file://?\">file://?要移动?域移动到??中?域 (this.MoveArea[0] -1 || this.MoveArea[1] -1 || this.SelectArea[0] -1 || this.SelectArea[1] -1) {//?有?中?域 } {//已经?中了要移动?域和要移动到?域 temp = [this.SelectArea[3]][this.SelectArea[2]]; <A href=\"file://复\">file://复制要移动?域?块?域可能会被覆盖掉 for ( i = 0; i < this.SelectArea[2]; i) { for ( j = 0; j < this.SelectArea[3]; j) { temp[j][i] = this.MyMap.Grid[this.SelectArea[1] +j] [this.SelectArea[0] + i]; } } <A href=\"file://PrGrid\">file://PrGrid(\"1\"); // ??信息 <A href=\"file://?\">file://?要移动?域移动到??中?域(即要移动到?域) for ( i = 0; i < this.SelectArea[2]; i) { for ( j = 0; j < this.S
/
本文档为【j2me游戏开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索