⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snakecanvas.java

📁 j2me快乐蛇0.2版代码,内有经典版贪食蛇和新版
💻 JAVA
字号:
import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.Canvas;import java.util.Vector;import java.util.Random;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import java.lang.Thread;import javax.microedition.media.Player;import javax.microedition.media.Manager;import javax.microedition.media.MediaException;import java.io.IOException;import java.io.InputStream;public class SnakeCanvas extends GameCanvas implements Runnable{	private mmenuCanvas parent;	private Vector snake;	private POINT food;	private int score,lv;	private int dir,sel;	private Random rnd;	private Graphics g;	private boolean pauseReq,alive;	private GameOpt option=null;	private Player player=null;	public SnakeCanvas(mmenuCanvas p,GameOpt go) {		super(true);		option=go;		parent=p;		this.setFullScreenMode(true);		score=0;		lv=0;		rnd=new Random(System.currentTimeMillis());		snake=new Vector();		snake.addElement(new POINT(7,22));		snake.addElement(new POINT(6,22));		snake.addElement(new POINT(5,22));		dir=RIGHT;		pauseReq=false;		g=getGraphics();		food=new POINT();		try {     		InputStream is=getClass().getResourceAsStream("eat1.wav");     		player= Manager.createPlayer(is,null);     		player.realize();     		//player.start(); 		} catch (MediaException pe) { 			System.out.println(pe.getMessage()); 		} catch (IOException ioe) { 			System.out.println(ioe.getMessage()); 		}	}	public void run() {		boolean k1,k2;		int i;		alive=true;		POINT tp=new POINT();;		long time,lastFlush=0;		int key,nextDir;		genFood();		g.setColor(0xfffffff);		g.fillRect(0,0,128,160);		g.setColor(0);		g.fillRect(2,3,124,139);		g.fillTriangle(118,152,125,152,121,159);		g.drawChar('0',21,142,g.TOP|g.LEFT);		g.setColor(0xfffffff);		g.fillRect(4,5,120,135);		nextDir=RIGHT;		while(true){			if(pauseReq){				k1=false;				sel=0;				g.setColor(0xffffff);				g.fillRect(20,20,90,48);				g.setColor(0);				g.drawRect(20,20,90,48);				g.drawString("***PAUSE***",21,20,g.TOP|g.LEFT);				g.drawString("     Back",20,36,g.TOP|g.LEFT);				g.drawString("     Quit",20,52,g.TOP|g.LEFT);				if(sel==0) g.drawChar('>',27,36,g.TOP|g.LEFT);				else g.drawChar('>',27,52,g.TOP|g.LEFT);				this.flushGraphics();				while(pauseReq){					key=getKeyStates();					k2=(key&UP_PRESSED)!=0||(key&DOWN_PRESSED)!=0;					if(k1==true&&!k2){						k1=false;						g.setColor(0xffffff);						g.fillRect(20,20,90,48);						g.setColor(0);						g.drawRect(20,20,90,48);						g.drawString("***PAUSE***",21,20,g.TOP|g.LEFT);						sel=1-sel;						g.drawString("     Back",20,36,g.TOP|g.LEFT);						g.drawString("     Quit",20,52,g.TOP|g.LEFT);						if(sel==0) g.drawChar('>',27,36,g.TOP|g.LEFT);						else g.drawChar('>',27,52,g.TOP|g.LEFT);						this.flushGraphics();					}else if(k2) k1=true;					if((key&FIRE_PRESSED)!=0){						if(sel==0) pauseReq=false;						else{							player.close();							player=null;							parent.backToMenu();							return;						}					}				}				lastFlush=0;				System.gc();				try{					player.start();				}catch(MediaException me){}			}			key=getKeyStates();			if((key&UP_PRESSED)!=0){				if(dir!=DOWN) nextDir=UP;			}else if((key&DOWN_PRESSED)!=0){				if(dir!=UP) nextDir=DOWN;			}else if((key&LEFT_PRESSED)!=0){				if(dir!=RIGHT) nextDir=LEFT;			}else if((key&RIGHT_PRESSED)!=0){				if(dir!=LEFT) nextDir=RIGHT;			}			if((key&FIRE_PRESSED)!=0)lastFlush-=1;			time=System.currentTimeMillis();			if((time-lastFlush)>1500/(lv+4)){				lastFlush=time;					dir=nextDir;				tp.setPoint(((POINT)snake.firstElement()).x,((POINT)snake.firstElement()).y);				switch(dir){				case UP:						tp.y-=1;					break;				case DOWN:					tp.y+=1;					break;				case LEFT:					tp.x-=1;					break;				case RIGHT:					tp.x+=1;					break;				}				if(tp.x==-1||tp.y==-1||tp.x==40||tp.y==45){					alive=false;				}				for(i=4;i<snake.size();i++){					if(POINT.samePoint((POINT)snake.elementAt(i),tp)) alive=false;				}				if(!alive){					g.setColor(0xffffff);					g.fillRect(30,30,90,20);					g.setColor(0);					g.drawRect(30,30,90,20);					g.drawString("You Lose!",35,32,g.TOP|g.LEFT);					this.flushGraphics();					while(true){						key=getKeyStates();						if((key&FIRE_PRESSED)!=0) {							player.close();							player=null;							parent.backToMenu();							return;						}					}				}				if(POINT.samePoint(tp,food)){					genFood();					snake.addElement(new POINT());					if(snake.size()%5==0) lv++;					g.setColor(0xffffff);					g.fillRect(20,142,50,16);					g.setColor(0);					g.drawString(Integer.toString(snake.size()-3),21,142,g.TOP|g.LEFT);					if(option.sound){							try{							//player.setLoopCount(-1);							player.start();						}catch(Exception me){}					}				}				g.setColor(0xffffff);				g.fillRect(4,5,120,135);				g.setColor(0);				g.fillRect(4+3*food.x,5+3*food.y,3,3);				g.fillArc(4+3*tp.x,5+3*tp.y,3,3,0,360);				for(i=snake.size()-1;i>0;i--){					((POINT)snake.elementAt(i)).setPoint(((POINT)snake.elementAt(i-1)).x,((POINT)snake.elementAt(i-1)).y);										g.fillArc(4+3*((POINT)snake.elementAt(i)).x,5+3*((POINT)(snake.elementAt(i))).y,3,3,0,360);	//			System.out.println("snake["+i+"].x="+((POINT)snake.elementAt(i)).x+" y="+((POINT)snake.elementAt(i)).y);	//			System.out.println("free memory: "+Runtime.getRuntime().freeMemory());				}				((POINT)snake.firstElement()).setPoint(tp.x,tp.y);					this.flushGraphics();			}		}		}	private void genFood(){		boolean j=false;		while(true){			food.setPoint(Math.abs(rnd.nextInt()%40),Math.abs(rnd.nextInt()%45));			for(int i=0;i<snake.size();i++){				if(POINT.samePoint(food,(POINT)snake.elementAt(i))){ j=true; break;}			}			if(!j) {				System.out.println("food:("+food.x+","+food.y+")");				return;			}			j=false;		}	}		public void keyReleased(int keyCode){		System.out.println(keyCode);			if(keyCode==-22||keyCode==-7) pauseReq=!pauseReq;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -