基于J2ME平台的手机游戏贪吃蛇程序的设计与实现_第1页
基于J2ME平台的手机游戏贪吃蛇程序的设计与实现_第2页
基于J2ME平台的手机游戏贪吃蛇程序的设计与实现_第3页
基于J2ME平台的手机游戏贪吃蛇程序的设计与实现_第4页
基于J2ME平台的手机游戏贪吃蛇程序的设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录绪论41 课题总体介绍41.1 课题背景41.2国内外概况41.3研究内容52 开发平台与技术概述52.1开发环境52.2WTK、ECLIPSE与JAM的介绍52.3JAVA语言介绍63 J2ME及其体系结构概述73.1 J2ME简介73.2 J2ME 体系结构73.3 移动信息设备简表概述73.3.1 MIDP的目标硬件环境7 MIDP应用程序8 CLDC和MIDP库中的类84 手机游戏开发过程84.1 贪吃蛇游戏的规则简介84.2详细设计94.3代码设计94.3.1游戏地图代码设计94.3.2操作控制代码设计194.3.3进入游戏画面极其字体设计224.3.4分数记录255 总结29致

2、谢29参考文献30基于J2ME平台的贪吃蛇游戏的设计与实现摘 要随着通信技术的发展和手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对于丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。J2ME(Java 2 Micro Edition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术,它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案。以J2ME为开发平台,利用Java提供的强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且

3、能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的全过程。【关键词】:手机游戏 嵌入式开发 永久性数据 MIDP应用程序 Design and Implementation of Snake Game Based on J2ME AbstractAlong with the development of mobile communication technology and the increasing popularity of mobile devices, Java function in the real

4、ization, Java applications that make mobile value-added services gradually reflect its influence, to enrich peoples life content, provide quick information plays an important role. J2ME (Java 2 Micro happen) is in recent years, with different equipment, especially the rapid development of mobile com

5、munications equipment and the birth of a new development of technology, it positioned in the consumer electronics applications, the intelligent, diversification of equipment, provides innovative solutions. For development platform, in J2ME using Java provide powerful tools, not only can cellphones r

6、ealize static HTML technology can computing processing, data storage, the servers and communications, and other functions, but also can develop all kinds of mobile games. Based on the introduction of the J2ME and its system structure based on the snake game for example, describes the aid MIDlet clas

7、s library development J2ME the whole process of mobile gaming.【key words】 : Mobile games Embedded development Permanent data MIDP application program绪论Java自从20世纪90年代早期诞生以来,以其强大的功能迅速为广大程序员们所接受。J2ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE和J2EE共同组成Java技术的三个重要的分支。J2ME实际上是一系列规范的集合,由JCP组织制定相关的Java Specification R

8、equest(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。比如MIDP2.0规范就是在JSR118中制定的。可能接触过J2ME的开发者会觉得说J2ME是一系列的规范不准确吧。因为我们在开发中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等内容。其实这并不矛盾,因为这些就是在相关规范中制定的。1 课题总体介绍1.1 课题背景 随着近年来科学技术的迅猛发展,计算机技术已近慢慢的向微型化、便携化等方向发展。

9、如今,人们对于嵌入式的研究的深入,诞生了各种基于多功能操作系统的手机,使得这些手机上可以安装各种各样的软件,实现功能和性能上的扩展和提高。目前大部分手机分为智能手机(SmartPhone)和非智能手机。智能手机包括以诺基亚和三星手机为代表的Symbian S60操作系统,以摩托罗拉为代表的Linux操作系统,以多普达、HTC(宏达)为代表的Windows Mobile操作系统,还有最近兴起的基于Google操作系统Android的新上市的手机。非智能手机包括诺基亚的S40平台、摩托罗拉早期的P2k平台等等。随着移动通信技术的发展和无线数据业务的进步以及人们对移动传播方式的日趋依赖,无线终端在人

10、们日常生活中的使用也逐渐得到普及,手机已被赋予了除通话以外的其他许多功能。研究发现,在700 名受访对象中,60的人会在家中玩手机游戏,而且其中 60每天不止玩一次,每天的时间在 15 到 20 分钟。而诺基亚做的一项研究发现,玩家玩手机游戏的时间平均为 28 分钟。种种调查数据可以证明全世界手机游戏市场的繁荣,如今没有人会怀疑手机游戏的美好未来,全新的手机游戏领域已逐渐聚焦了众多软件开发商的目光。手机游戏的市场空间进一步增大。在日本以及韩国,手机游戏已经贡献了大笔收;美国以及欧洲市场同样很乐观;而在南美洲以及其他国家和地区,市场规模也在不断扩大。当JAVA平台发展到JAVA 2的版本以后,为

11、了适应不同级别计算机硬件的开发需要,JAVA平台形成了三个主要分支:l Java 2, Standard Edition(J2SE):是为台式机而设计的,主要运行在Linux, Solaris, 或Microsoft Windows等操作系统上。l Java 2, Enterprise Edition (J2EE):则是一个适合分布式的、多用户、企业级应用系统运转的平台。它以J2SE为基础,增加了处理服务器端计算的功能。l Java 2, Micro Edition (J2ME):和J2SE不同,它既不算是一个软件也不能算是一则规范。准确地说,J2ME是为了支持象PDA、手机等小型的嵌入式或移

12、动设备而推出的一系列的技术和规范的总称。它借用了J2SE类库的一部分,使用了更少的API,而且其J2ME采用的JAVA虚拟机(JVM)比J2SE的JVM也要小得多。 本课题研究的是基于J2ME的手机贪吃蛇游戏,利用EclipseIDE工具和Sun Java ME SDK 3.0,JAVA语法和J2ME系统的API来实现。主要研究的对象是: 1.面向对象的编程技巧;2.J2ME的低级、高级界面的开发; 4.多线程技术的应用; 5.简单人工智能的实现。2 开发平台与技术概述 操作系统:Microsoft Windows XP 程序语言:Java 2 开发包:Sun Java(TM) Wireles

13、s Toolkit for CLDC WTK、ECLIPSE与JAM的介绍(1) WTK 的全称是Sun J2ME Wireless Toolkit Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是, 2.0, 2.1和2.2。每个版本都包括英语,日语,简体中文,繁体中文4个语种包

14、。WTK是Sun提供的一个开发工具包。目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品,如SonyEricsson,Nokia Developers suit等,都属于此种类型;而通过JBuilder, Eclipse等IDE,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。(2)Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。Ecl

15、ipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成Eclipse Platform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。 JAVA语言介绍(1)面向对象 面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相

16、互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。(2)平台无关性 Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C+具有一定程度的源代码级平台无关,表明用C或C+写的应用程序不用修改只需重新编译就可以在不同平台上运行。(3)分布式 分布式包括数据分布和操作分布。数据分布是指数据可以分散在网

17、络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。(4)可靠性和安全性 Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C+,但它消除了许多C+不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界,最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误

18、处理任务便于恢复。(5)多线程 线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。3 J2ME及其体系结构概述3.1 J2ME简介现在JAVA-JAVA2 Platform大致可分为J2SE、J2EE、J2ME三类。J2SE为JAVA-JAVA2 Platform 的标准版,通常在PC上使用的JAVA。J2EE是在J2SE的API上,扩展了给企业使用EJB与Servlet等主要使用在服务器上的功能。而J2ME则是面向家电和通信工具等微小设备。J2ME的目标是微小设备,这类设备有许多种类,在这些设备的J2ME当中,定义了CDC(Connected Device

19、Configuration),CLDC(Connected Limited Device Configuration)这两个Configuration。CDC是以能用在个人网关、下一代移动电话、PDA(个人数字助理)、家电设备、POS终端、车辆导航系统等上运行为前提设计出来的。CLDC,是以能使用在移动电话、PDA(个人数字助理)、家电设备、POS终端等上面为前提设计出来的。3.2 J2ME 体系结构配置和简表:配置定义了一个设计在一系列类似硬件上运行的Java平台的能力。J2me的目标是家电与嵌入式设备,这类设备有很多种类,对应这些设备的J2me当中,定义了CDC(连接设备配置)和CLDC(

20、受限接设备配置)两个配置,配置所提供的类函数只有Java.lang, Java.io,Java.util包等J2SE等核心类的子集。CLDC是与手机相关的,它实际是定义一个设备制造商用来实现Java运行环境的标准,第三方开发者只需要遵循这个标准。CLDC主要影响Java开发和软件发布的以下方面: 1)目标设备的特性;2)安全模型:安全模型有两个部分,虚拟机和应用程序安全。虚拟机安全层的目的是保护下面的设备不受任何执行代码可能引起的损害。3.3 移动信息设备简表概述3 MIDP的目标硬件环境1)显示 :96*54象素,1位颜色,大约1:1比例;2)输入: (a)单手键盘或者小键盘;(b)双手的Q

21、WERTV键盘;(c)触摸屏。 3)内存: (a)128KB非易失性内存,供MIDP组件使用;(b)8KB的非易失性内存,供应用程序生成的永久数据使用;(c)32KB的易失性内存,供Java堆使用。4)网络:(a)双响无线网络,可间歇性连接;(b)通常是很有限的带宽。3 MIDP应用程序 在MIDP上运行的Java程序被称为MIDlet。MIDlet是服从一些关于它运行环境和程序打包的一些规则。其运行环境是启动MIDlet,这是设备内置应用管理器的任务。应用程序能访问到下面的一些资源:(1)震动文件中的所有文件。(2)MIDlet描叙文件的内容(JAD)。3 CLDC和MIDP库中的类 打包:

22、MIDlet应用一般采用震动文件的形式。这个文件应该包含运行应用程序需要的类和所有的资源文件,它也应该包含一个叫manifest.mf的清单文件。保存在震动文件中的清单文件是一个简单的文本文件,包含属性值。应用程序描叙(JADs)在移动电话网络上传送大量的数据,需要有一个描叙文件让用户在没有下载整个包之前来查看一下MIDlet震动的细节。4 手机游戏开发过程4.1 贪吃蛇游戏的规则简介贪吃蛇游戏的规则简介在贪吃蛇游戏中,玩家操作由小方块连接而成的蛇,去吃随机散落在画面内的小方块,每吃一块就增加一小方块长度,要是撞壁以及撞自己的尾,就属于失败,如无失败则直到通关为止。屏幕的长度的行向为11单位,

23、纵向为18单位。在这个范围内,玩家通过操作方向键来控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。图4.1游戏运行界面本游戏的操作流程:用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下启动按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下启动按钮开始,游戏就暂停了,在暂停的情况下再按开始按钮,游戏继续运行。任何时候按EXIT按钮退出,游戏MIDlet都会终止。图4.2 程序流程图游戏地图代码设计 游戏地图是蛇的活动范围和食物随机散落的范围,游戏的容器为行向为11单位,纵向为18单位,如下代码:pr

24、ivate final int iX = 10;/地图的开始坐标 private final int iY = 10;/private final int SWIDTH = 16;/图标的宽度 private final int iCells = 240;/地图的列数 private final int iRows = 320;/地图的行数 private final int iBoxW = SWIDTH*iCells;/地图的宽采用二维绘图工具:二维绘图工具drawLine采用4个参数直线起点的x、y坐标值和直线终点x、y的坐标值,例如:graphics.drawLine(50,0,100,

25、0);这行代码会从位置(50,0)到(100,0)绘制一条直线。绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象。可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。贪吃蛇和食物的代码设计屏幕的长度为行向为320单位,纵向为240单位;在这个范围内,玩家操作方向键控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的

26、组成部分。食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下:import javax.microedition.lcdui.*;import java.util.Random;import javax.microedition.lcdui.game.*;public class SnakeGameSprite extends GameCanvas implements Runnable public boolean isPlay;public static int Width, Height;

27、 private Snakes snakes;static final int SNAKES_NUM = 50;private Threadthread;private int CanvasWidth = getWidth(); private int CanvasHeight = getHeight();public static longupdates= 0;public static Random rand;public intsnake_n= 3;public int eatfood = 0;private int maxRand = 1000;private int map_bg_x

28、 ;private int map_bg_y ;private int map_bg_w = 16;private int map_bg_h = 16; private int level= 1;public boolean addsnake_n= false;private int win=32;public int sleeptime;public SnakeGameSound snakegamesound;public SplashScreen splashscreen; private final SnakesMID midlet;private int soundmax=1; pub

29、lic boolean over = false; public boolean picOver = false; long startTime=0; private GameOverScreen gameover; public Image image; public MenuList menulist; public int tempcontinue=0; private Display display; private int map_bg;private Image imgGameBg= new Image4;/*建立一个if类的图像数组Gif*/private Gifgold= ne

30、w Gif5;private Gif cat= new Gif2;private Font font = Font.getFont( Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_SMALL ); private int Snake_N,Time_N; SnakeGameSprite(SnakesMID midlet,int Snake_N,int Time_N) super(true);setFullScreenMode(true);/*设置全屏模式,如何是放在Height=getHeight的后面则不会是全全屏*/this.midlet = mi

31、dlet;this.Time_N=Time_N;sleeptime=Time_N;Width=getWidth();Height=getHeight(); load();startTime = System.currentTimeMillis() - 0; private void load() rand= new Random( System.currentTimeMillis() );/用CurrentTimeMillis方法检测一段程序代码运行时所花费的时间/*装载一系列图片*/try /*装载蛇图*/ Image img2= Image.createImage(/snake_n.png

32、); snakes = new Snakes(img2,img2.getWidth(),img2.getHeight(); snakes.setSnakesNum(SNAKES_NUM); snakes.setCanvasSize(CanvasWidth,CanvasHeight);/*装载食物图蘑菇*/ for( int i=0; igold.length; i+ ) goldi= new Gif(gold, 12, 16, 15 );/gold:名字,5:5张图,19和15就是图像的高宽的像素 /*装载食物图-猫*/ for( int i=0; icat.length; i+ ) cati

33、= new Gif(cat, 6, 21, 16 );/cat:名字,10:10张图,21和16就是图像的高宽的像素 /*装载背景图*/Image temp_bg1 = Image.createImage(/bg_tile_0.png);Image temp_bg2 = Image.createImage(/bg_tile_0a.png);int bgmap = rand.nextInt(maxRand);/取0到1000的随机数,因为maxGraphics bg;for( int i=0; i100)bg.drawImage(temp_bg1, -i*16, 0, bg.LEFT|bg.TO

34、P);/被绘制的图像,X轴Y轴,基点elsebg.drawImage(temp_bg2, -i*16, 0, bg.LEFT|bg.TOP);/*装载障碍物*/bg = null;/释放实例化对象可以使用bg=nul; temp_bg1 = null;/释放实例化对象可以使用temp=nul; temp_bg2 = null;/释放实例化对象可以使用temp=nul; System.gc();/释放实例化对象语句 catch(Exception e) e.printStackTrace(); rePlay( level );/snakes.initSnakes();/*装载线程,预执行*/pu

35、blic void start() /*开始由SingActive决定声音的进入与否*/if(midlet.SingActive=true)snakegamesound.getInstance().loadResourse(soundmax);/snakegamesound.getInstance().start();isPlay=true;thread =new Thread(this);thread.start();/*当用户按下拨号键时游戏暂停下来*/ public void keyPressed(int keyCode) if (keyCode = FIRE) tempcontinue

36、+=1; if(tempcontinue%2!=0) stop(); snakegamesound.getInstance().stop(); else start(); / midlet.GameCanvasMenu_Continue(); /*获得键盘的动作*/private void input()int keyStates=getKeyStates(); if (keyStates & LEFT_PRESSED) != 0) snakes.move(2); else if (keyStates & RIGHT_PRESSED) != 0) snakes.move(3); else if

37、 (keyStates & UP_PRESSED) != 0) snakes.move(0); else if (keyStates & DOWN_PRESSED) != 0) snakes.move(1); /*按#键代码暂停游戏*/ else if (keyStates & KEY_POUND) !=0) midlet.pauseApp(); public void stop() isPlay=false;/*线程开始执行* * throws InterruptedException */public void run()Graphics g=getGraphics();/获取Graphi

38、cs对象while(isPlay) long start =System.currentTimeMillis();input();/获得键盘输入paint(g); /绘制背景和蛇isCollide();long end=System.currentTimeMillis();/获取执行完毕的事件int duration=(int)(end-start);if(sleeptime50)sleeptime=50;if(durationsleeptime)/如果执行时间小于循环预定时间,则等待到循环时间 try/wait(3000);/start();Thread.sleep(sleeptime-du

39、ration);catch(InterruptedException ie)/*判断蛇是否与自己重合*/public void isCollide()for (int i = 4;i=snakes.snake_n;i+)if(snakes.snakes00=snakes.snakesi0&snakes.snakes01=snakes.snakesi1)rePlay(level); isPlay=false; snakegamesound.getInstance().stop(); over=true; midlet.GameCanvasGameOver(midlet.TotalEatfood,

40、over);/*负责各种图形的最终绘制*/public void paint(Graphics g) g.setColor(0x000000); g.fillRect(0, 0, Width, Height);/*绘制背景*/ for( int i=0; imap_bg_x; i+ )/绘制背景(草地)for( int j=0; jmap_bg_y; j+ )g.drawImage(imgGameBg map_bgij , j*map_bg_h, i*map_bg_w, g.LEFT|g.TOP); /*绘制食物gold*/ for( int i=0; igold.length; i+ )/调

41、用类GIF里的PAINT()来绘制gold图形 goldi.paint(g); /*绘制食物cat*/ for( int i=0; icat.length; i+ )/调用类GIF里的PAINT()来绘制cat图形 cati.paint(g); /*蛇与四墙碰撞*/if( snakes.getX()Width | snakes.getY()Height )/蛇头碰到边就重来 rePlay(level); isPlay=false; snakegamesound.getInstance().stop(); over=true; midlet.GameCanvasGameOver(midlet.T

42、otalEatfood,over); /*如果蛇与食物-蘑菇发生碰撞*/for( int i=0; iwin) /*让声音停止*/ snakegamesound.getInstance().stop(); isPlay=false; midlet.Win_SplashScreen(); goldi.setPos();/碰着食物则重新定位食物的位置 /*如果蛇与食物-猫发生碰撞*/for( int i=0; icat.length; i+ ) if( isIntersect(snakes.getX(),snakes.getY(),8,8, cati.pos_x,cati.pos_y,cati.w

43、, cati.h ) snakes.snake_n-=3;/蛇的身体自动减3 eatfood-=3;/记录当前屏幕上吃食物的总数 midlet.TotalEatfood-=3;/记录吃食物的总数 /*不能让蛇的长度、吃食物的量、吃食物的总数小于*/ if(snakes.snake_n=1) snakes.snake_n=1; if(eatfood=0) eatfood=0; if(midlet.TotalEatfood=0) midlet.TotalEatfood=0; cati.setPos();/碰着食物猫则重新定位食物的位置 /*绘制蛇及字体*/ /*绘制字体靠左*/g.setColor

44、( 0xf0FF00 );/黄色g.setFont( font );g.drawString( eat:+eatfood, 1, 2, 0 );/字体,坐标,坐标,方位/*绘制字体靠右*/g.setColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 3, 2, 0 );/字体,坐标,坐标,方位/*绘制字体靠上*/g.setColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 2, 1, 0 );/字体,坐标,坐标,方位/*绘制字体靠下*/g.se

45、tColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 2, 3, 0 );/字体,坐标,坐标,方位/*绘制字体居中*/ g.setColor( 0xFF0000 ); g.setFont( font ); g.drawString( eat:+eatfood, 2, 2, 0 );/字体,坐标,坐标,方位 snakes.draw(g); flushGraphics();/将缓冲屏幕上的内容绘制到手机屏幕上/*碰撞检测函数*/ boolean isIntersect(int x1,int y1, int w1, int

46、h1, int x2, int y2, int w2, int h2)/判断蛇的头是否和食物重合在做的动作 if( Math.abs(x2-x1) (w1+w2)/2 & Math.abs(y2-y1) (h1+h2)/2 )/Math.abs(x2-x1):返回一个数字的绝对值 return true; else return false; /*增加蛇的长度*/ public void addSnake(boolean addsnake_n) addsnake_n=true; /*把草地分在数组mapij中*/public void rePlay( int level ) map_bg_x=

47、 Height/16;/把宽高分成16*16的小块背景(X轴要多少块)map_bg_y= Width/16;/(Y轴要多少块)map_bg = new intmap_bg_xmap_bg_y;/扑满整个背景要多少张图片的总数for( int i=0; imap_bg_x; i+ )/绘制背景,从Y轴开始绘制for( int j=0; jmap_bg_y; j+ )int r = rand.nextInt(maxRand);/取0到1000的随机数,因为max /例:int i = rand.nextInt(9); 0-9随即数 可以用 Math.random()*9; for( int k=0

48、; kimgGameBg.length; k+ )/从返回的随机数中抽取 /其中的一幅出来作背景(imgGameBg.length是4)if( r k+1 ) )/向右移K+1位,例:b=ai;向右移n位相当于除以2的n次方 / b1=ai;向左移n位相当于乘以2的n次方map_bgij = k;snakes.initSnakes();操作控制代码设计图4.3 游戏运行画面MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandLi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论