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