贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分。食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,每次只出现唯一的一个,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下: copyright paper51.com publicint getCell(){ copyright paper51.com
returniCell; http://www.paper51.com } copyright paper51.com public intgetRow(){ http://www.paper51.com
returniRow; 内容来自论文无忧网 www.paper51.com
} 内容来自www.paper51.com public void show(){ paper51.com sLabel.setVisible(true); copyright paper51.com } http://www.paper51.com
public boolean isVisible(){ 内容来自论文无忧网 www.paper51.com return sLabel.isVisible(); copyright paper51.com
} 内容来自www.paper51.com public void hide(){ http://www.paper51.com
sLabel.setVisible(false); http://www.paper51.com } paper51.com protected voidsetPosition(int row, int cell){ http://www.paper51.com iCell= cell; copyright paper51.com
iRow = row; 内容来自www.paper51.com sLabel.setBounds(cell*SWIDTH, row*SWIDTH, SWIDTH, SWIDTH); paper51.com } 内容来自www.paper51.com public voidmoveUp(){ 内容来自www.paper51.com if(iRow>0) copyright paper51.com setPosition(--iRow,iCell); http://www.paper51.com else http://www.paper51.com setTouch(); 内容来自论文无忧网 www.paper51.com
} 内容来自论文无忧网 www.paper51.com public voidmoveDown(){ copyright paper51.com if(iRow<iBoxH-1) http://www.paper51.com setPosition(++iRow,iCell); 内容来自www.paper51.com
else copyright paper51.com setTouch(); paper51.com
} 内容来自论文无忧网 www.paper51.com
public voidmoveLeft(){ paper51.com if(iCell>0) paper51.com setPosition(iRow,--iCell); copyright paper51.com else http://www.paper51.com setTouch(); 内容来自www.paper51.com } paper51.com
public voidmoveRight(){ copyright paper51.com if(iCell<iBoxW-1) 内容来自www.paper51.com setPosition(iRow,++iCell); copyright paper51.com else copyright paper51.com setTouch(); copyright paper51.com } 内容来自www.paper51.com
staticboolean getTouch(){ 内容来自论文无忧网 www.paper51.com returnisTouch; copyright paper51.com
} 内容来自论文无忧网 www.paper51.com static voidsetTouch(){ 内容来自论文无忧网 www.paper51.com
isTouch= true; http://www.paper51.com } 内容来自论文无忧网 www.paper51.com static voidsetImTouch(){ 内容来自www.paper51.com isTouch= false; copyright paper51.com } 内容来自www.paper51.com publicSnake clone(){ 内容来自论文无忧网 www.paper51.com Snaketem = new Snake(); copyright paper51.com tem.setPosition(this.getRow(),this.getCell()); 内容来自www.paper51.com returntem; copyright paper51.com } 内容来自论文无忧网 www.paper51.com (3)操作控制代码设计 paper51.com
MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上移。其代码如下: paper51.com public voidmove(){ paper51.com hide(); http://www.paper51.com if(aoSnakes[0].getRow()==Food.getRow()&&aoSnakes[0].getCell()==Food.getCell()) http://www.paper51.com eat(); 内容来自www.paper51.com SnaketempSnakes[] = new Snake[iLen-1]; 内容来自www.paper51.com for(inti=0;i<tempSnakes.length;i++){ 内容来自www.paper51.com tempSnakes[i]= aoSnakes[i].clone(); 内容来自论文无忧网 www.paper51.com } http://www.paper51.com switch(heading){ 内容来自论文无忧网 www.paper51.com case37: paper51.com aoSnakes[0].moveLeft(); paper51.com break; http://www.paper51.com
case38: http://www.paper51.com aoSnakes[0].moveUp(); 内容来自论文无忧网 www.paper51.com break; paper51.com
case39: 内容来自论文无忧网 www.paper51.com aoSnakes[0].moveRight(); http://www.paper51.com
break; 内容来自www.paper51.com case40: paper51.com aoSnakes[0].moveDown(); 内容来自www.paper51.com break; http://www.paper51.com
default: paper51.com break; http://www.paper51.com
整个游戏的流程控制体现在游戏画布对象的paint()方法里。paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和Game Over画面的绘制相当简单,游戏暂停画面的绘制也相当容易,就是设立标志,让paint()执行的时候无需真正执行重绘动作。 内容来自论文无忧网 www.paper51.com 第四章 程序的调试与运行 内容来自www.paper51.com 4.1游戏的调试 http://www.paper51.com 在手机游戏方面,游戏的控制和图片的设置是游戏的基本能力,为了方便玩家操作游戏,把玩家常用的操作键设为游戏最常用的控制键,并通过J2ME简单有效的编码,使玩家可以重新设置自己的熟悉的键。本游戏不设立关卡,而是随着游戏积分的增加,游戏将自动增加游戏的难度,如加快游戏速度和随小蛇长度的增加,游戏的操作难度也会增大。如玩家进入游戏(如图4-1),操作小蛇, 内容来自论文无忧网 www.paper51.com
http://www.paper51.com |