鉴于大家对Java类作品十分关注,我们编辑小组在此为大家搜集整理了“JAVA+J2ME贪吃蛇小游戏的设计与实现”一文,供大家参考学习
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
第三章手机游戏开发过程 3.1 贪吃蛇游戏的规则简介以及开发环境 3.1.1贪吃蛇游戏的规则简介 在贪吃蛇游戏中,玩家操作由小方块连接而成的蛇,去吃随机散落在画面内的小方块,每吃一块就增加一小方块长度,要是撞壁以及撞自己的尾,就属于失败,如无失败则直到通关为止。 屏幕的长度的行向为11单位,纵向为18单位。在这个范围内,玩家通过操作方向键来控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。 3.1.2开发环境 (1)开发的硬件环境:CPU C1.7HZ/Maxor 40G/DDR 256M/CD-ROW 40X (2)开发软件:JDK1.3和J2MEWTK 3.2 详细设计 本游戏的操作流程(如图3-1):用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下[开始]按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下[开始]按钮,游戏就暂停了,在暂停的情况下再按[开始]按钮,游戏继续运行。任何时候按[退出]按钮,游戏MIDlet都会终止。 图 3-1操作流程 3.2.1代码设计 (1)游戏地图代码设计 游戏地图是蛇的活动范围和食物随机散落的范围,游戏的容器为行向为11单位,纵向为18单位,如下代码: private final int iX = 10; //地图的开始坐标 private final int iY = 10; // private final int SWIDTH = 16; //图标的宽度 private final int iCells = 11; //地图的列数 private final int iRows = 18; //地图的行数 private final int iBoxW = 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个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分。食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,每次只出现唯一的一个,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下: public int getCell(){ return iCell; } public int getRow(){ return iRow; } public void show(){ sLabel.setVisible(true); } public boolean isVisible(){ return sLabel.isVisible(); } public void hide(){ sLabel.setVisible(false); } protected void setPosition(int row, int cell){ iCell = cell; iRow = row; sLabel.setBounds(cell*SWIDTH, row*SWIDTH, SWIDTH, SWIDTH); } public void moveUp(){ if(iRow>0) setPosition(--iRow,iCell); else setTouch(); } public void moveDown(){ if(iRow<iBoxH-1) setPosition(++iRow,iCell); else setTouch(); } public void moveLeft(){ if(iCell>0) setPosition(iRow,--iCell); else setTouch(); } public void moveRight(){ if(iCell<iBoxW-1) setPosition(iRow,++iCell); else setTouch(); } static boolean getTouch(){ return isTouch; } static void setTouch(){ isTouch = true; } static void setImTouch(){ isTouch = false; } public Snake clone(){ Snake tem = new Snake(); tem.setPosition(this.getRow(),this.getCell()); return tem; }
(3)操作控制代码设计 MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上移。其代码如下: public void move(){ hide(); if(aoSnakes[0].getRow()==Food.getRow()&&aoSnakes[0].getCell()==Food.getCell()) eat(); Snake tempSnakes[] = new Snake[iLen-1]; for(int i=0;i<tempSnakes.length;i++){ tempSnakes[i] = aoSnakes[i].clone(); } switch(heading){ case 37: aoSnakes[0].moveLeft(); break; case 38: aoSnakes[0].moveUp(); break; case 39: aoSnakes[0].moveRight(); break; case 40: aoSnakes[0].moveDown(); break; default: break; 整个游戏的流程控制体现在游戏画布对象的paint()方法里。paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和Game Over画面的绘制相当简单,游戏暂停画面的绘制也相当容易,就是设立标志,让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)网络 (a)双响无线网络,可能间歇性连接; (b)通常是很有限的带。
第五章 总结 本次毕业设计所开发的手机游戏,实现了手机游戏的一些基本和必需的功能。如游戏的界面设置,游戏动画的设置,玩家的控制键设置,游戏的保存和游戏纪录的保存,游戏的开始和暂停等功能。但游戏功能还存在着很多不足,首先,对游戏的动画设计不够熟悉,技巧性不强,界面的设置也不够美观。这些对于玩家来说是非常重要,将直接决定本游戏的生存能力。其次,这款游戏还没直接下载到手机上去实现,只是通过模拟器在PC机上实现。另外此次所使用的开发工具都是用的JDK的较低版本,有些功能不能实现。这次游戏的功能没能做到十全十美,是由于自身能力的不足和时间的限制,没有对游戏的开发进行进一步研究,还有很多地方需要改进。
目 录
|
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |