问题描述
本人急需一个j2me小游戏源代码,希望可以共享一下
解决方案
解决方案二:
importjava.util.*;importjavax.microedition.lcdui.*;/***贪吃蛇游戏*/publicclassSnakeCanvasextendsCanvasimplementsRunnable{/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/int[][]snake=newint[200][2];/**已经使用的节点数量*/intsnakeNum;/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/intdirection;/*移动方向*//**向上*/privatefinalintDIRECTION_UP=0;/**向下*/privatefinalintDIRECTION_DOWN=1;/**向左*/privatefinalintDIRECTION_LEFT=2;/**向右*/privatefinalintDIRECTION_RIGHT=3;/**游戏区域宽度*/intwidth;/**游戏区域高度*/intheight;/**蛇身单元宽度*/privatefinalbyteSNAKEWIDTH=15;/**是否处于暂停状态,true代表暂停*/booleanisPaused=false;/**是否处于运行状态,true代表运行*/booleanisRun=true;/**时间间隔*/privatefinalintSLEEP_TIME=300;/**食物的X坐标*/intfoodX;/**食物的Y坐标*/intfoodY;/**食物的闪烁控制*/booleanb=true;/**Random对象*/Randomrandom=newRandom();publicSnakeCanvas(){//初始化init();width=this.getWidth();height=this.getHeight();//启动线程newThread(this).start();}/***初始化开始数据*/privatevoidinit(){//初始化节点数量snakeNum=7;//初始化节点数据for(inti=0;i<snakeNum;i++){snake[i][0]=100-SNAKEWIDTH*i;snake[i][1]=40;}//初始化移动方向direction=DIRECTION_RIGHT;//初始化食物坐标foodX=100;foodY=100;}protectedvoidpaint(Graphicsg){//清屏g.setColor(0xffffff);g.fillRect(0,0,width,height);g.setColor(0);//绘制蛇身for(inti=0;i<snakeNum;i++){g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);}//绘制食物if(b){g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);}}privatevoidmove(intdirection){//蛇身移动for(inti=snakeNum-1;i>0;i--){snake[i][0]=snake[i-1][0];snake[i][1]=snake[i-1][1];}//第一个单元格移动switch(direction){caseDIRECTION_UP:snake[0][1]=snake[0][1]-SNAKEWIDTH;break;caseDIRECTION_DOWN:snake[0][1]=snake[0][1]+SNAKEWIDTH;break;caseDIRECTION_LEFT:snake[0][0]=snake[0][0]-SNAKEWIDTH;break;caseDIRECTION_RIGHT:snake[0][0]=snake[0][0]+SNAKEWIDTH;break;}}/***吃掉食物,自身增长*/privatevoideatFood(){//判别蛇头是否和食物重叠if(snake[0][0]==foodX&&snake[0][1]==foodY){snakeNum++;generateFood();}}/***产生食物*说明:食物的坐标必须位于屏幕内,且不能和蛇身重合*/privatevoidgenerateFood(){while(true){foodX=Math.abs(random.nextInt()%(width-SNAKEWIDTH+1))/SNAKEWIDTH*SNAKEWIDTH;foodY=Math.abs(random.nextInt()%(height-SNAKEWIDTH+1))/SNAKEWIDTH*SNAKEWIDTH;booleanb=true;for(inti=0;i<snakeNum;i++){if(foodX==snake[i][0]&&snake[i][1]==foodY){b=false;break;}}if(b){break;}}}/***判断游戏是否结束*结束条件:*1、蛇头超出边界*2、蛇头碰到自身*/privatebooleanisGameOver(){//边界判别if(snake[0][0]<0||snake[0][0]>(width-SNAKEWIDTH)||snake[0][1]<0||snake[0][1]>(height-SNAKEWIDTH)){returntrue;}//碰到自身for(inti=4;i<snakeNum;i++){if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1]){returntrue;}}returnfalse;}/***事件处理*/publicvoidkeyPressed(intkeyCode){intaction=this.getGameAction(keyCode);//改变方向switch(action){caseUP:if(direction!=DIRECTION_DOWN){direction=DIRECTION_UP;}break;caseDOWN:if(direction!=DIRECTION_UP){direction=DIRECTION_DOWN;}break;caseLEFT:if(direction!=DIRECTION_RIGHT){direction=DIRECTION_LEFT;}break;caseRIGHT:if(direction!=DIRECTION_LEFT){direction=DIRECTION_RIGHT;}break;caseFIRE://暂停和继续isPaused=!isPaused;break;}}/***线程方法*使用精确延时*/publicvoidrun(){try{while(isRun){//开始时间longstart=System.currentTimeMillis();if(!isPaused){//吃食物eatFood();//移动move(direction);//结束游戏if(isGameOver()){break;}//控制闪烁b=!b;}//重新绘制repaint();longend=System.currentTimeMillis();//延时if(end-start<SLEEP_TIME){Thread.sleep(SLEEP_TIME-(end-start));}}}catch(Exceptione){}}}
importjava.util.Random;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Graphics;importjavax.microedition.midlet.MIDlet;publicclassSnakeMidletextendsMIDlet{//SnakeCanvasdisplayable=newSnakeCanvas();SnakeCanvasdisplayable=newSnakeCanvas();publicSnakeMidlet(){Display.getDisplay(this).setCurrent(displayable);}publicvoidstartApp(){}publicvoidpauseApp(){}publicvoiddestroyApp(booleanunconditional){}}
碰撞有点小错,自己改吧
解决方案三:
就在csdn下吧
解决方案四:
好多的,自己搜一下啊
解决方案五:
re引用3楼tiewantn的回复:
好多的,自己搜一下啊
解决方案六:
额!资源好少啊、、、、、、、、
解决方案七:
自己写一个,不是很难的用vector如果怕vector效率低,自己写一个容器就可以了
解决方案八:
假如运行,打包后再上传,我觉得会好些!
解决方案九:
vector在JDK现在的版本好像不经常用的,用collection怎么实现呢?
解决方案十:
2楼的游戏很经典。
解决方案十一:
在下,小白,请问下载了代码要怎么用阿,求大虾指点~