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

📄 newsnakecanvas.java

📁 j2me快乐蛇0.2版代码,内有经典版贪食蛇和新版
💻 JAVA
字号:
import javax.microedition.lcdui.game.GameCanvas;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.util.Vector;import java.io.IOException;import javax.microedition.lcdui.Graphics;import java.lang.Thread;import javax.microedition.lcdui.game.TiledLayer;import javax.microedition.lcdui.game.LayerManager;import javax.microedition.lcdui.Image;import java.io.IOException;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.game.Sprite;import javax.microedition.rms.RecordStore;import javax.microedition.rms.RecordStoreNotFoundException;import javax.microedition.rms.InvalidRecordIDException;import javax.microedition.rms.RecordStoreException;import javax.microedition.rms.RecordStoreNotOpenException;public class NewSnakeCanvas extends GameCanvas implements Runnable{	private mmenuCanvas parent;	private Vector snake;	private Graphics g;	private GameOpt option;	private int dir;	private int speed;	private int nStage;	private boolean pauseReq=false;	private LayerManager lm=null;	private TiledLayer earth,stage;	private int[] lv;	private int score,nSteps,nRmv;	private int lives,fruitcnts;	public NewSnakeCanvas(mmenuCanvas p,GameOpt o) {		super(true);		parent=p;		snake=new Vector();		g=getGraphics();		option=o;		setFullScreenMode(true);		dir=RIGHT;		nStage=0;		lv=new int[4];		lv[0]=500;		lv[1]=400;		lv[2]=300;		lv[3]=200;		score=0;	}	public void run() {				Image land=null;		Image fimg=null;		Image paper=null;		Image title=null;		g.setColor(0);		g.fillRect(0,0,128,160);		try{			Image wait=Image.createImage("/wait.png");			//g.setColor(0xff,0xff,0x80);			//g.fillRect(0,0,128,160);			//g.drawImage(Image.createImage("/girl.jpg"),20,20,g.TOP|g.LEFT);			g.drawImage(wait,0,0,g.TOP|g.LEFT);			for(int k=0;k<128;k+=4){				g.setColor(255,0,0);				g.fillRect(0,157,k+1,3);				this.flushGraphics();				Thread.currentThread().sleep(20);			}		}catch(IOException ioe){System.out.println(ioe.getMessage());}		catch(InterruptedException ie){}						try{			land=Image.createImage("/earth1.png");			fimg=Image.createImage("/stage.png");		}catch(IOException ioe){System.out.println(ioe.getMessage());}		lm=new LayerManager();		earth=new TiledLayer(4,11,land,30,14);		stage=new TiledLayer(20,24,fimg,6,6);		lm.append(stage);		lm.append(earth);		int[] fruitTile=new int[4];		fruitTile[0]=stage.createAnimatedTile(10);		fruitTile[1]=stage.createAnimatedTile(14);		fruitTile[2]=stage.createAnimatedTile(18);		fruitTile[3]=stage.createAnimatedTile(20);		int[] add=new int[4];		add[0]=1;		add[1]=1;		add[2]=-1;		add[3]=-1;		RecordStore rs=null;				byte[] n=new byte[32];		InputStream stagefile=null;		String name=null;		byte[] map=new byte[480];		int i,j;		long time,lastFr,lastSn;		int key,nextDir;		boolean redraw,alive;		POINT tp=new POINT();		int sel=0;		boolean k1,k2;		byte[] data;				lives=3;					for(nStage=0;nStage<2;nStage++){			snake.removeAllElements();			stagefile=getClass().getResourceAsStream("/level");			try{				stagefile.skip(523*nStage);				stagefile.read(n);				name=new String(n);				g.setColor(0);				g.fillRect(0,0,128,160);				g.setColor(0xffffff);				g.drawString("  Stage "+(nStage+1),32,70,g.TOP|g.LEFT);				g.drawString(name,28,90,g.TOP|g.LEFT);				stagefile.read(n,0,11);				earth.fillCells(0,0,4,11,n[0]);				speed=n[1];				dir=n[2];				snake.addElement(new POINT(n[3],n[4],1));				snake.addElement(new POINT(n[5],n[6],n[7]));				snake.addElement(new POINT(n[8],n[9],n[10]));				stagefile.read(map);				stagefile.close();				stagefile=null;				name=null;				flushGraphics();				Thread.currentThread().sleep(2000);			}catch(IOException ioe){			}catch(InterruptedException ie){}			fruitcnts=0;			for(j=0;j<24;j++){				for(i=0;i<20;i++){					switch(map[j*20+i]){					case 0x00:	stage.setCell(i,j,0);	break;					case 0x01:	stage.setCell(i,j,1);	break;					case 0x02: 						case 0x03:					case 0x04:					case 0x05:	stage.setCell(i,j,fruitTile[map[j*20+i]-2]);								fruitcnts++;							break;					default:						//System.out.println("Map data is corrupted! @"+i+","+j);					}				}			}			if(dir==UP)	stage.setCell(n[3],n[4],2);			else if(dir==DOWN) stage.setCell(n[3],n[4],4);			else if(dir==LEFT)	stage.setCell(n[3],n[4],3);			else if(dir==RIGHT) stage.setCell(n[3],n[4],5);			stage.setCell(n[5],n[6],n[7]+4);			stage.setCell(n[8],n[9],n[10]+4);			lastFr=0;			lastSn=0;			nextDir=dir;			redraw=false;			alive=true;			nSteps=0;			nRmv=0;			while(fruitcnts>0){				k1=false;				k2=false;				key=getKeyStates();								while(pauseReq){					g.setColor(0xff00ff);					g.fillRoundRect(30,38,70,40,7,7);					g.setColor(0xffff00);					g.fillRoundRect(30,20,70,23,7,7);					g.setColor(0);					g.drawRoundRect(30,20,70,58,7,7);					g.drawString("     暂停  ",32,22,g.TOP|g.LEFT);					g.drawString("     继续  ",32,42,g.TOP|g.LEFT);					g.drawString("     退出  ",32,62,g.TOP|g.LEFT);					g.drawLine(30,60,100,60);					if(sel==0){						g.drawChar('>',34,42,g.TOP|g.LEFT);					}else{						g.drawChar('>',34,62,g.TOP|g.LEFT);					} 					flushGraphics();					key=getKeyStates();					k2=(key&UP_PRESSED)!=0||(key&DOWN_PRESSED)!=0;					if(k1&&(k2==false))	{sel=1-sel;	k1=false;}					else if(k2) k1=true;					if((key&FIRE_PRESSED)!=0){						if(sel==0){							pauseReq=false;						}else{							parent.backToMenu();							return;						}					}				}				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) lastSn-=1;				time=System.currentTimeMillis();				if(time-lastFr>600){					lastFr=time;	//  					for(i=0;i<4;i++){						j=stage.getAnimatedTile(fruitTile[i]);						j+=add[i];						if(j==12+3*i||j==10+3*i) add[i]=0-add[i];						//System.out.println("Map data is corrupted! @"+i+","+j+" "+add[i]);						stage.setAnimatedTile(fruitTile[i],j);					}					redraw=true;				}				if(time-lastSn>lv[speed]){					//System.out.println(""+snake.size());					if(snake.size()<3); else					if(((POINT)snake.elementAt(snake.size()-2)).color==((POINT)snake.lastElement()).color&&((POINT)snake.lastElement()).color==((POINT)snake.elementAt(snake.size()-3)).color){						//System.out.println("label 1");						for(i=1;i<4;i++){							stage.setCell(((POINT)snake.lastElement()).x,((POINT)snake.lastElement()).y,0);							snake.removeElementAt(snake.size()-1);						}						nRmv++;					}					lastSn=time;					tp.setPoint(((POINT)snake.firstElement()).x,((POINT)snake.firstElement()).y);					dir=nextDir;					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;					}					switch(map[tp.y*20+tp.x]){					case 0:	break;					case 1:	alive=false;	break;					case 2:					case 3:					case 4:					case 5:							snake.addElement(new POINT());						((POINT)snake.lastElement()).color=map[tp.y*20+tp.x];						map[tp.y*20+tp.x]=0;						fruitcnts--;						break;					}					//System.out.println("label 3");					if(stage.getCell(tp.x,tp.y)<10&&stage.getCell(tp.x,tp.y)>5&&(!POINT.samePoint(tp,(POINT)snake.lastElement()))) alive=false;					if(!alive){						//System.out.println("You lose!");						g.setColor(0xff00ff);						g.fillRoundRect(10,50,110,30,15,15);						g.setColor(0);						g.drawRoundRect(10,50,110,30,15,15);						g.drawString("      失败了!",20,53,g.TOP|g.LEFT);						flushGraphics();						key=getKeyStates();						while(true){							key=getKeyStates();							if((key&FIRE_PRESSED)!=0) break;						}						for(i=0;i<snake.size();i++){							stage.setCell(((POINT)snake.elementAt(i)).x,((POINT)snake.elementAt(i)).y,0);						}						lives--;						snake.removeAllElements();						System.gc();						snake.addElement(new POINT(n[3],n[4],1));						snake.addElement(new POINT(n[5],n[6],n[7]));						snake.addElement(new POINT(n[8],n[9],n[10]));						if(n[2]==UP)	stage.setCell(n[3],n[4],2);						else if(n[2]==DOWN) stage.setCell(n[3],n[4],4);						else if(n[2]==LEFT)	stage.setCell(n[3],n[4],3);						else if(n[2]==RIGHT) stage.setCell(n[3],n[4],5);						stage.setCell(n[5],n[6],n[7]+4);						stage.setCell(n[8],n[9],n[10]+4);						lastFr=0;						lastSn=0;						dir=n[2];						nextDir=n[2];						redraw=false;						alive=true;						if(lives>0) continue;						else break;					}					stage.setCell(((POINT)snake.lastElement()).x,((POINT)snake.lastElement()).y,0);					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);					}					((POINT)snake.firstElement()).setPoint(tp.x,tp.y);					//System.out.println("label 2");					for(i=1;i<snake.size();i++){						stage.setCell(((POINT)snake.elementAt(i)).x,((POINT)snake.elementAt(i)).y,4+((POINT)snake.elementAt(i)).color);					}					if(dir==UP)	stage.setCell(tp.x,tp.y,2);					else if(dir==DOWN) stage.setCell(tp.x,tp.y,4);					else if(dir==LEFT) stage.setCell(tp.x,tp.y,5);					else if(dir==RIGHT) stage.setCell(tp.x,tp.y,3);					nSteps++;					redraw=true;					}								if(redraw){					redraw=false;					g.setClip(4,6,120,144);					lm.paint(g,4,6);					flushGraphics();				}			}			if(fruitcnts==0){					g.setColor(0xff00ff);				g.fillRoundRect(10,50,110,30,15,15);				g.setColor(0);				g.drawRoundRect(10,50,110,30,15,15);				g.drawString("Stage clear!",20,53,g.TOP|g.LEFT);				flushGraphics();				key=getKeyStates();				while(true){					key=getKeyStates();					if((key&FIRE_PRESSED)!=0) break;				}				try{					g.setClip(0,0,128,160);					paper=Image.createImage("/paper.png");					g.drawImage(paper,0,0,g.TOP|g.LEFT);					title=Image.createImage("/pass.png");					g.drawImage(title,20,10,g.TOP|g.LEFT);					flushGraphics();					Thread.currentThread().sleep(500);					g.drawString("步数:",20,50,g.TOP|g.LEFT);					flushGraphics();					Thread.currentThread().sleep(300);					g.drawString(Integer.toString(nSteps)+"步",80,50,g.TOP|g.LEFT);					flushGraphics();					//Thread.currentThread().sleep(500);					//g.drawString("X -1 = -"+Integer.toString(nSteps),80,50,g.TOP|g.LEFT);					g.drawString("消去:",20,70,g.TOP|g.LEFT);					flushGraphics();					Thread.currentThread().sleep(500);					g.drawString(Integer.toString(nRmv)+"次",80,70,g.TOP|g.LEFT);					flushGraphics();					//Thread.currentThread().sleep(500);					//g.drawString("X 10 =  "+Integer.toString(nRmv*10),60,70,g.TOP|g.LEFT);					g.drawString("关卡分:     "+Integer.toString(nStage*20+20+15*speed),20,90,g.TOP|g.LEFT);					flushGraphics();					Thread.currentThread().sleep(500);					g.drawString("得分:    "+Integer.toString(20+nStage*20-nSteps+nRmv*10),20,112,g.TOP|g.LEFT);					score=score+nStage*20-nSteps+nRmv*10+20+15*speed;					g.drawString("总分:    "+Integer.toString(score),20,132,g.TOP|g.LEFT);					flushGraphics(); 						paper=null;					title=null;								}catch(IOException ioe){				}catch(InterruptedException ie){				}				key=getKeyStates();				while(true){					key=getKeyStates();					if((key&FIRE_PRESSED)!=0) break;				}				continue;			}else{				g.setColor(0xff00ff);				g.fillRoundRect(10,50,110,30,15,15);				g.setColor(0);				g.drawRoundRect(10,50,110,30,15,15);				g.drawString("游戏结束!",20,53,g.TOP|g.LEFT);				flushGraphics();				key=getKeyStates();				boolean first=false,f=true;				while(true){					key=getKeyStates();					if((key&FIRE_PRESSED)!=0){						first=true;					}					if((first)&&!((key&FIRE_PRESSED)!=0)){						if(f) f=false;						else break;					}				}				getKeyStates();				try{					rs=RecordStore.openRecordStore("scorerec",false);					data=rs.getRecord(1);					System.out.println(data[2]+"  "+data[3]);					for(i=0;i<5;i++){						if(score>(data[i*2]*256+data[i*2+1]))break;					}					if(i<5){						for(j=i;j<4;j++){							data[(j+1)*2]=data[j*2];							data[(j+1)*2+1]=data[j*2+1];						}						data[i*2]=(byte)(score/256);						data[i*2+1]=(byte)(score%256);						rs.setRecord(1,data,0,10);						rs.closeRecordStore();						g.setColor(0);						paper=Image.createImage("/paper.png");						title=Image.createImage("/brk.png");						g.drawImage(paper,0,0,g.TOP|g.LEFT);						g.drawImage(title,20,15,g.TOP|g.LEFT);						flushGraphics();						for(j=0;j<5;j++){							if(j==i) g.setColor(0xff0000);							else g.setColor(0);							g.drawString(Integer.toString(j+1)+"        "+Integer.toString(data[j*2]*256+data[j*2+1]),22,40+j*20,g.TOP|g.LEFT);						}						flushGraphics();						key=getKeyStates();						first=false;f=true;						while(true){							key=getKeyStates();							if((key&FIRE_PRESSED)!=0){							first=true;							}							if((first)&&!((key&FIRE_PRESSED)!=0)){								if(f) f=false;								else break;							}						}					}					paper=null;					title=null;					}catch(RecordStoreNotOpenException rsne){					System.out.println(rsne.getMessage());								}catch(InvalidRecordIDException ire){					System.out.println(ire.getMessage());				}catch(RecordStoreException rse){					System.out.println(rse.getMessage());				}catch(IOException ioe){					System.out.println(ioe.getMessage());				}				parent.backToMenu();				return;							}		}		try{			rs=RecordStore.openRecordStore("scorerec",false);			data=rs.getRecord(1);			for(i=0;i<5;i++){				if(score>(data[i*2]*256+data[i*2+1]))break;			}			if(i<5){				for(j=i;j<4;j++){					data[(j+1)*2]=data[j*2];					data[(j+1)*2+1]=data[j*2+1];				}				data[i*2]=(byte)(score/256);				data[i*2+1]=(byte)(score%256);				rs.setRecord(1,data,0,10);				rs.closeRecordStore();				g.setColor(0);				paper=Image.createImage("/paper.png");				title=Image.createImage("/brk.png");				g.drawImage(paper,0,0,g.TOP|g.LEFT);				g.drawImage(title,20,15,g.TOP|g.LEFT);				for(j=0;j<5;j++){					if(j==i) g.setColor(0xff0000);					else g.setColor(0);					g.drawString(Integer.toString(j+1)+"     "+Integer.toString(data[j*2]*256+data[j*2+1]),22,40+j*20,g.TOP|g.LEFT);				}				flushGraphics();				key=getKeyStates();				boolean	first=false,f=true;						while(true){							key=getKeyStates();							if((key&FIRE_PRESSED)!=0){							first=true;							}							if((first)&&!((key&FIRE_PRESSED)!=0)){								if(f) f=false;								else break;							}						}			}			paper=null;			title=null;							}catch(Exception e){			System.out.println("error");		}			}	public void keyReleased(int keyCode){		if(keyCode==-22||keyCode==-7) pauseReq=!pauseReq;	}	}

⌨️ 快捷键说明

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