




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE22目录TOC\o”1-3”\h\z\u第一章绪论 1HYPERLINK\l”_Toc251573639"1.1研究背景 1HYPERLINK\l”_Toc251573640”1.2研究内容 12。1J2ME简介 3HYPERLINK\l”_Toc251573643”2.2J2ME体系结构 32.3移动信息设备简表概述 4_Toc251573647”2。3。3CLDC和MIDP库中的类 4_Toc251573649"2。4.1MIDPAPI概述 5HYPERLINK\l”_Toc251573650"2.4.2MIDlet应用程序 52。4。3使用定时器 6HYPERLINK\l”_Toc251573652”2。4.4永久性数据(RMS) 7HYPERLINK\l”_Toc251573653”2.4。5存储集(RecordStore) 8HYPERLINK\l”_Toc251573654"2.4。6记录 92。4.7异常 102。5。1UI基础 10HYPERLINK\l”_Toc251573658"2。5。2高级UI 11HYPERLINK\l”_Toc251573659"2.5。3低级UI 11_Toc251573661"3。1贪吃蛇游戏的规则简介以及开发环境 13HYPERLINK\l”_Toc251573662"3。1.1贪吃蛇游戏的规则简介 133.1.2开发环境 13HYPERLINK\l”_Toc251573664”3。2详细设计 13HYPERLINK\l”_Toc251573665"3。2.1代码设计 14HYPERLINK\l”_Toc251573666"第四章程序的调试与运行 19HYPERLINK\l”_Toc251573667"4。1游戏的调试 194.2游戏的运行环境 20HYPERLINK\l”_Toc251573669"结束语 21RMS中发生的事件的接口,比如记录增加,修改和删除。2。4。5存储集(RecordStore)记录存储集即一个记录存储的机制,表2-8中展示了完整的API.表2-8记录存储API方法描述存储集访问方法StaticRecordStoreopenRecordStroe(StringrecordName,blooeancreateIfNecessary)打开一个存储集或者在它不存在的时候创建一个存储集。VoidcloseRecordStore()关闭一个存储集。StaticvoiddeleteRecordStore(StringrecordStoreName)删除一个存储集。LonggetLastModified()获取存储集最后被修改的时间。StringgetName()获取存储集的名称。intgetNumrecords()返回存储集当前记录的数量。intgetSize()返回存储集使用的总字节数.intgetSizeAvailable()获取空闲空间。intgetVersion()获取存储集的版本号。
续表2-8记录存储APIStaticString[]listRecordStores()获取MID中你可以访问的所有的记录存储集的字符串数组。记录访问方法intaddRecord(byte,intoffset,intnumBytes)向存储集中加入一条新的记录.byte[]getRecord(intrecordId)用ID来获取一条记录。intgetRecord(intrecorded,byte[]buffer,intoffset)把一条记录读取到buffer中。VoiddeletRecord(intrecorded)删除与recordId相关的记录。VoidsetRecord(intrecorded,byte[]newData,intoffset,intnumBytes)使用新的字节数组与recordId相关联的内容。IntgetNextRecordID()在插入后获取下一个记录的ID。IntgetRecord(intrecorded)返回按字节计算的记录存储集当前的数据大小.RecordEnumerationenumerateRecords(RecordFilterfilter,RecordComparator,bool--eankeepUpdataed)返回一个RecordEnumerator对象。它是用来在一个记录集合中枚举的(使用comparator参数)。与时间有关的方法VoidaddRecordListener(RecordListenerlistener)加入一个监听器对象,它可以在有这个记录存储集消息的时候被调用。VoidremoveRecordLisrener(RecordListenerlistener)移除原来用addRecordListener方法加入的监听器对象。记录存储集在与MIDlet包范围,也就是说同一个包的任何MIDlet都可以访问这个包中的记录存储集,其他包中的MIDlet甚至不能感知到别的包里记录存储集的存在。2。4。6记录一个记录就是一个字节数组,可以在里面写任何格式的数据.可以用DataInputStream、DataOutputStream往记录中写入数据,也可以用ByteArrayInputStream和ByteArrayOutputStream。在记录存储集中记录是以一种类表的结构存储,如下图2—2所示:
IDRecorddata(bytearray)1“John"2“64997”3[.pngimagedata]—_图2-2RecorddataStore“A”每一个记录和它相关的字节数组都有一个整数主键唯一来标识,RMS会成为记录设定ID.头一个写入的ID是1,每次增加一条记录它的ID就增加1,上图展示了一个记录集的简单用法.在这个例子中,玩家的名字(字符串“John”)存储在记录1中,记录2保存最高分,记录3是先前从网络上下载的缓存的图象。2.4.7异常 RMS异常都是因为不正确的环境造成的,对于这些异常需要编写代码来处理问题(RecordStoreNotFoundException、RecondStoreNotOpenException、InvalidRecordIDExcepaion的情况),或者只能接受它。2.5用户界面(LCDUI)在创建游戏时,MIDP允许我们使用两种截然不同的界面系统——高级UI和低级UI。2。5。1UI基础LCDUI的核心是screen的概念,它代表MID上的一个display,在任何一个时间点,只能有一个screen可见。在LCDUI中有3种类型的screen:低级UI可以通过Canvas类访问;Form显示一组简单的UI组件,或者说控件;复杂组件(Complexcomponents)。2。5.2高级UI高级UI提供了MID的一个抽象接口,通过它可以获得大量的功能。使用高级API首先创建组件把它们加入到屏幕,然后与它们相交互.高级UI一般划分为两大类:屏幕和组件。屏幕(screen)screen是一个完整类组件,它管理整个屏幕。Form是一个特殊的screen,可以在Form中由少量几个组件来构造一个screen。列表(List)List是一个可以给用户显示一组备选项的组件。这个类实现了Javax.microedition。lcdui.Choice接口,ChoiceCroupitem也实现了这个接口。文本框(TestBox)TestBox组件是微型世界的字处理器,它只能输入多行的文字。它可以让玩家输入多行文字、剪切、复制以及从剪切板粘帖、过滤输入的数据。警告(Alert)可以使用它来显示一个提示信息(因为它是一个screen,所以它接管整个屏幕)。Form和ItemForm是一种可以包含一个或者多个下面这些从Item类派生出来的组件的screen—-StringItem、ImageItem、TextField、ChoieGroup、DataField和Gauge。StringItem类运用StringItem类在Form上加入简单的文字消息。2。5。3低级UI 低级UI提供了一个工具包来移动和绘制图形、显示文字、获取直接的按键事件等.Canvas类Canvas又称画布,是一个Displayable对象,所有绘图操作都画在它上面。Graphics类Graphics类工具在Canvas中承担基本的二维绘图。二维绘图工具drawLine采用4个参数—-直线起点的x、y坐标值和直线终点x、y的坐标值,例如:graphics.drawLine(50,0,100,0);这行代码会从位置(50,0)到(100,0)绘制一条直线。绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象,可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形.4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。弧是使用6个参数来绘制的,前3个参数是弧所在的整个圆的外切矩形。剩下的两个参数是startAngle和arcAngle。Angle是度数,0为右侧(在三点的位置)的地方,180是左侧(在九点的位置)的位置。绘制文字可以使用方法drawChar、drawChars、drawString和drawSubstring在Canvas上面绘制文字。图象和裁剪裁剪让人可以把图象输出限制到显示设备的一个特定区域中,例如,如果将输出限制在一个从(10,10)开始到(50,50)的区域中,那么从那个时候起,没有图像会出现在显示设备上这个区域之外的任何地方.事件响应实现一个或者多个按键事件响应方法:keyPressde、keyRleased和keyRepeated。第三章手机游戏开发过程3。1贪吃蛇游戏的规则简介以及开发环境3.1。1贪吃蛇游戏的规则简介在贪吃蛇游戏中,玩家操作由小方块连接而成的蛇,去吃随机散落在画面内的小方块,每吃一块就增加一小方块长度,要是撞壁以及撞自己的尾,就属于失败,如无失败则直到通关为止。屏幕的长度的行向为11单位,纵向为18单位。在这个范围内,玩家通过操作方向键来控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种HYPERLINK”/"\t”_blank”手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。3。1.2开发环境(1)开发的硬件环境:CPUC1.7HZ/Maxor40G/DDR256M/CD—ROW40X(2)开发软件:JDK1.3和J2MEWTK3.2详细设计本游戏的操作流程(如图3-1):用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下[开始]按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下[开始]按钮,游戏就暂停了,在暂停的情况下再按[开始]按钮,游戏继续运行。任何时候按[退出]按钮,游戏MIDlet都会终止.图3-1操作流程3。2。1代码设计(1)游戏地图代码设计游戏地图是蛇的活动范围和食物随机散落的范围,游戏的容器为行向为11单位,纵向为18单位,如下代码:privatefinalintiX=10; //地图的开始坐标privatefinalintiY=10; // privatefinalintSWIDTH=16; //图标的宽度privatefinalintiCells=11; //地图的列数privatefinalintiRows=18; //地图的行数privatefinalintiBoxW=SWIDTH*iCells; //地图的宽采用二维绘图工具:二维绘图工具drawLine采用4个参数-—直线起点的x、y坐标值和直线终点x、y的坐标值,例如:graphics.drawLine(50,0,100,0);这行代码会从位置(50,0)到(100,0)绘制一条直线。绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象。可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。(2)贪吃蛇和食物的代码设计屏幕的长度为行向为11单位,纵向为18单位;在这个范围内(如图3。3),玩家操作方向键控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果.图3-3游戏区域贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分.食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,每次只出现唯一的一个,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下:publicintgetCell(){ returniCell; } publicintgetRow(){ returniRow; }publicvoidshow(){sLabel.setVisible(true);}publicbooleanisVisible(){returnsLabel。isVisible();}publicvoidhide(){sLabel。setVisible(false);}protectedvoidsetPosition(introw,intcell){ iCell=cell; iRow=row;sLabel.setBounds(cell*SWIDTH,row*SWIDTH,SWIDTH,SWIDTH);} publicvoidmoveUp(){ if(iRow>0) setPosition(——iRow,iCell); else setTouch(); } publicvoidmoveDown(){ if(iRow〈iBoxH-1) setPosition(++iRow,iCell); else setTouch(); } publicvoidmoveLeft(){ if(iCell>0) setPosition(iRow,—-iCell); else setTouch(); } publicvoidmoveRight(){ if(iCell〈iBoxW—1) setPosition(iRow,++iCell); else setTouch(); } staticbooleangetTouch(){ returnisTouch; } staticvoidsetTouch(){ isTouch=true; } staticvoidsetImTouch(){ isTouch=false; } publicSnakeclone(){ Snaketem=newSnake(); tem。setPosition(this.getRow(),this。getCell()); returntem; }
(3)操作控制代码设计MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上移。其代码如下:publicvoidmove(){ hide(); if(aoSnakes[0].getRow()==Food.getRow()&&aoSnakes[0]。getCell()==Food.getCell()) eat(); SnaketempSnakes[]=newSnake[iLen-1]; for(inti=0;i〈tempSnakes.length;i++){ tempSnakes[i]=aoSnakes[i].clone(); } switch(heading){ case37: aoSnakes[0]。moveLeft(); break; case38: aoSnakes[0]。moveUp(); break; case39: aoSnakes[0]。moveRight(); break; case40: aoSnakes[0].moveDown(); break; default: break;整个游戏的流程控制体现在游戏画布对象的paint()方法里.paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和GameOver画面的绘制相当简单,游戏暂停画面的绘制也相当容易,就是设立标志,让paint()执行的时候无需真正执行重绘动作。
第四章程序的调试与运行4。1游戏的调试在手机游戏方面,游戏的控制和图片的设置是游戏的基本能力,为了方便玩家操作游戏,把玩家常用的操作键设为游戏最常用的控制键,并通过J2ME简单有效的编码,使玩家可以重新设置自己的熟悉的键。本游戏不设立关卡,而是随着游戏积分的增加,游戏将自动增加游戏的难度,如加快游戏速度和随小蛇长度的增加,游戏的操作难度也会增大。如玩家进入游戏(如图4—1),操作小蛇,图4—1游戏界面图去吃随机散落在游戏区内的食物,每吃一个食物就增加小蛇一个单位长度,并随着长度的增加,游戏的速度将增加,而小蛇的长度增加也会增加玩家的操作难度.如果玩家操作小蛇碰壁或者由于小蛇长度太长而蛇头撞到小蛇的身体任何部位,均属于失败,玩家得重新游戏开始(如图4—2)。但游戏将自动纪录你的得分,并且保存你的游戏最高得分。图4—2游戏失败的两种情况4。2游戏的运行环境目标硬件环境:1:显示:96*54象素,1位颜色,大约1:1的象素比例;2:输入:(a)单手键盘或者小键盘;(b)双手的QWERTV键盘;(c)触摸屏。3)内存(a)128KB非易失性内存,供MIDP组件使用;(b)8KB的非易失性内存,供应用程序生成的永久数据使用;(c)32KB的易失性内存,供Java堆使用.4)网络
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东菏泽巨野县2024-2025学年小升初数学模拟试卷含解析
- 山西临汾霍州三中重点中学2024-2025学年初三高中生物试题竞赛模拟(二)生物试题含解析
- 电子真空器件在量子通信领域的应用考核试卷
- 玩具设计的人机交互与用户体验优化考核试卷
- 电机在工业锅炉的燃烧效率考核试卷
- 电光源的种类及其特点考核试卷
- 制刷行业法律法规与标准制定考核试卷
- 护腕在羽毛球运动中的抗拉伸性能考核试卷
- 困境妇女儿童与家庭服务项目设计与管理
- 专题10 中国重点、热点区域(讲练)-2025年中考《地理》二轮复习(全国版)
- 大学物理:电磁感应与电磁场
- 2024年青岛中小学教师招聘真题
- 2024年四川省眉山市中考地理+生物试卷(含答案解析)
- 第27课 改革开放与建设中国特色社会主义【课件】-中职高一上学期高教版(2023)中国历史
- SJ∕T 11614-2016 电动汽车驱动电机系统用金属化薄膜电容器规范
- 凌云3安装调试手册
- (高清版)JTGT 3610-2019 公路路基施工技术规范
- 《火力发电厂贮灰场防渗技术导则》
- 围手术期的营养治疗
- 幼儿园游戏活动评价
- (正式版)SHT 3075-2024 石油化工钢制压力容器材料选用规范
评论
0/150
提交评论