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

📄 gamecanvas.java

📁 本人做的j2me的rpg游戏程序,适合j2me游戏初学者学习
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.*;

public class gameCanvas extends GameCanvas implements Runnable{
	
	public static gameCanvas gc;
	public int screenWidth,screenHeight;
	public Image offScreen,offScreenLoad;
	public Graphics offg;
	public Image menubk,menu,titlebk;
	public Image immap;
	public int mx,my,gstate;//菜单的位置
	public Player p1;
	public InputStream is,is1;
	public DataInputStream dis;
	public short level;
	public int row,col;
	public int map[][];
	public int process,nowprocess;
	public boolean loadOK1,loadOK2,loadOK3,loadOK4,loadOK5,ismove=false;
	public Image player,panda,chart,chuansong,npc;
	public int px,py,pmx,pmy,npx,npy;//pmx,pmy为人物像素
	public int dx,dy;//地图
	public int dir,olddir,ndir;
	public int nowFrame,nowFrame1,nnowFrame;
	int framex[]={93,0,31,62,},framey[]={0,21,42,63};//player1
	int framex1[]={0,64,96,32,},framey1[]={0,24,48};//panda
	int framex2[]={48,0,144,96},framey2[]={0,16,32};//player2
	int framex3[]={96,0,32,64,},framey3[]={0,22,44,66};//girl
	public boolean exit,isload;//判断是否离开地图1
	int charting,chart2;
	boolean ischart,die,nodie,music,tk,cha;
	public int pyc,n,l;
	public int cityload;//第几次加载load
	public String info[]={
			"经过这场恶战",
			"我终于消灭了三头怪",
			"并且拿到了宝石	",
			"然后我便得到了这份工作",
			"我将努力的干下去....." ,
			"不麻烦您了,我自动关闭程序" 
		
	};
	public int infoIndex;
	boolean nt;

	public gameCanvas(){
		
		super(false);
		setFullScreenMode(true);
		screenWidth=getWidth();
		screenHeight=getHeight();
		offScreen=Image.createImage(screenWidth,screenHeight);
		
		exit=false;
		nt=true;
		mx=60;my=138;gstate=0;
		level=1;l=0;charting=0;chart2=0;
		dir=0;olddir=2;ndir=4;
		pyc=0;n=0;cityload=1;infoIndex=0;
		ischart=false;die=false;nodie=true;music=true;tk=false;cha=false;
		GameStart.gs.gameState=State.GM_MENU;
		loadOK1=true;
		domusic();
		(new Thread(this)).start();
		
		
		
	}
	private void drawchuansong(){
			
		 
		Graphics offg=offScreenLoad.getGraphics();
	 
		if(GameStart.gs.gameState==State.GM_NEW)
			{offg.setClip(450,260 ,40,40);
		offg.drawImage(chuansong,450, 260, 0);}
		if(GameStart.gs.gameState==State.GM_CITY)
		{offg.setClip(440,203 ,40,40);
			offg.drawImage(chuansong,440, 163, 0);}
		 
		if(GameStart.gs.gameState==State.GM_ENMY1)
		{offg.setClip(440,203 ,40,40);
		offg.drawImage(chuansong,440, 163, 0);}
		
	}
	private void domusic() {
		is=this.getClass().getResourceAsStream("/home.mid");
		if(is!=null)
		try{
		
		p1=Manager.createPlayer(is,"audio/midi");
     	p1.setLoopCount(-1);
     	p1.start();}catch(Exception e){}
		
	}
    public void closemusic(){
	if(p1!=null)
		try {
			p1.stop();
		} catch (MediaException e) {
			 
 
		}
		System.gc();
	
}
	
	
	public void initLevel(int n){
		
		is1=null;
		immap=null;
		map=null;
		dis=null;
		player=null;
		offScreenLoad=null;
		offg=null;
		col=0;row=0;
		isload=true;
		System.gc();
		
		switch(n){
		
		case 1:
		 
		is1=this.getClass().getResourceAsStream("home.dat");
		
		dis=new DataInputStream(is1);
		 try {		 
			        immap=Image.createImage("/home.png");			     
			        player=Image.createImage("/player1.png");
			        panda=Image.createImage("/panda.png");
			        chart=Image.createImage("/chart.png");
			        chuansong=Image.createImage("/chuansong.png");
					row=dis.readByte();					  
					col=dis.readByte();					
				} catch (IOException e) {}
				 
				offScreenLoad=Image.createImage(col*16,row*16);
	    		 
	    		offg=offScreenLoad.getGraphics();		
		 
		map=new int[row][col];
		this.process=row*col;
		this.nowprocess=0;
		px=90;py=60;pmx=21;pmy=31;
		dx=-150;dy=-30;
		dir=0;
		break;
		
		case 2:	
			is1=this.getClass().getResourceAsStream("city.dat");
			
			dis=new DataInputStream(is1);
			 try {		 
				        immap=Image.createImage("/bigmap.png");			     
				        player=Image.createImage("/player2.png");			         
				        chart=Image.createImage("/chart.png");
				        chuansong=Image.createImage("/chuansong.png");
						row=dis.readByte();					  
						col=dis.readByte();					
					} catch (IOException e) {}
					 
					offScreenLoad=Image.createImage(col*16,row*16);
		    		 
		    		offg=offScreenLoad.getGraphics();		
			 
			map=new int[row][col];
			this.process=row*col;
			this.nowprocess=0;
			pmx=16;pmy=32;
			if(cityload==1)
			{px=0;py=120;dx=0;dy=-80;}
			if(cityload==2)
				{px=120;py=70;dx=-180;dy=-100;}
			if(cityload==3)
				{px=0;py=120;dx=0;dy=-80;}
			dir=0;
			cityload++;
			break;
							
	case 3:	
		is1=this.getClass().getResourceAsStream("gs.dat");
		
		dis=new DataInputStream(is1);
		 try {		 
			        immap=Image.createImage("/gs.png");			     
			        player=Image.createImage("/player2.png");			      
			        chart=Image.createImage("/chart.png");
			        npc=Image.createImage("/girl.png");
					row=dis.readByte();					  
					col=dis.readByte();					
				} catch (IOException e) {}
				 
			
				offScreenLoad=Image.createImage(col*16,row*16);
	    		 
	    		offg=offScreenLoad.getGraphics();		
		 
		map=new int[row][col];
		this.process=row*col;
		this.nowprocess=0;
		dx=-100;dy=screenHeight-20*16;
		px=147+dx;py=268+dy;pmx=16;pmy=32;
		olddir=1;
		dir=0;
		break;
		
	    case 4:
		is1=this.getClass().getResourceAsStream("enmy1.dat");
		
		dis=new DataInputStream(is1);
		 try {		 
			        immap=Image.createImage("/bigmap.png");			     
			        player=Image.createImage("/player2.png");			         
			        chart=Image.createImage("/chart.png");
			        
					row=dis.readByte();					  
					col=dis.readByte();					
				} catch (IOException e) {}
				 
				offScreenLoad=Image.createImage(col*16,row*16);
	    		 
	    		offg=offScreenLoad.getGraphics();		
		 
		map=new int[row][col];
		this.process=row*col;
		this.nowprocess=0;
		px=0;py=120;pmx=16;pmy=32;
		dx=0;dy=-80;
		dir=0;
		break; 
				
		}}
	
	public void doChart(int chartlevel){
		
		Graphics offg=offScreen.getGraphics();
		if(chartlevel==1){
		switch(charting){
		case 0:
			ischart=true; 
			offg.drawImage(chart,0,150,0);
			offg.drawString("我在家自学j2me也有一段时间了", 20	, 155,0);
			offg.drawString("现在我要去求职了!!", 3,170,0);
		break;
		}}
		
		if(chartlevel==2){
			switch(charting){
			case 1:
				ischart=true; 
				offg.drawImage(chart,0,150,0);
				offg.drawString("小白,别送我了你回去吧", 20	, 155,0);
				 
			break;
			case 2:
				ischart=true; 
				offg.drawImage(chart,0,150,0);
				offg.drawString("我应该换一套衣服出去!!", 20	, 155,0);
				 
			break;
			
			}}
		
		if(chartlevel==3){
			switch(charting){
			case 3:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("顺着这条路走,应该会找到公司。。。", 13	, 155,0);
			break;
			
			
		}}
		if(chartlevel==4){
			switch(charting){
			case 4:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("秘书:", 20, 155,0);
				offg.drawString("请问有什么事吗?", 20, 170,0);
				 
				
			break;
			case 5:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("我想求职!!", 20	, 155,0);
			break;
			case 6:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("秘书:", 20, 155,0);
				offg.drawString("我们公司的宝石被森林里的三头怪", 20	, 170,0);
				offg.drawString("抢去了!", 3,185,0);
				break;
			case 7:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("秘书:", 20, 155,0);
				offg.drawString("你如果可以把它夺回来,我们就可以", 20	, 167,0);
				offg.drawString("考虑你的工作!!!", 3,183,0);
				break;
			case 8:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("恩,我这就去!!!", 20	, 155,0);
			break;
			case 9:
				ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("秘书:", 20, 155,0);
				offg.drawString("一路小心!!", 20	, 170,0);
				
			break;
			case 10:
				
				tk=false;
				
			break;
			
			
		}}
		if(chartlevel==5){
		 
			 if(charting%11==1)
				{ischart=true;
				offg.drawImage(chart,0,150,0);
				offg.drawString("我应该杀死boss夺回宝石再回来!!", 20	, 155,0);
				}
			 else
				 charting++;
			
		 }if(chartlevel==6){
			 
			 switch(chart2){
			 case 0:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					offg.drawString("这里一片漆黑,我感觉到不安!!", 20	, 155,0);
			
			 }
		 }
		 if(chartlevel==7){
			 switch(chart2){
			 
			 case 1:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					offg.drawString("三头怪:", 20, 155,0);
					offg.drawString("什么人?", 20, 170,0);
				 break;
			 case 2:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					offg.drawString("你就是三头怪?把宝石还给我", 20, 155,0);
				 break;
			 case 3:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					offg.drawString("三头怪:", 20, 155,0);
					offg.drawString("竟然如此大胆!我到要看看你有  ", 20, 170,0);
					offg.drawString(" 什么本事!", 20, 185,0);
				 break;
			 case 4:
				 initPK();
				 GameStart.gs.gameState=State.GM_PK;
				 break;
			 
			 }
		 }
		 
		 if(chartlevel==8){
			 switch(chart2){
			 case 4:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					offg.drawString("三头怪:", 20, 155,0);
					offg.drawString("竟然一招让我毙命,我输了  ", 20, 170,0);
					 
				 break;
			 case 5:
				 ischart=true;
					offg.drawImage(chart,0,150,0);
					
					offg.setClip(20,140,20,33);
					offg.drawImage(baoshi,20,140,0);	
					offg.setClip(0,0,screenWidth,screenHeight);
					offg.drawString("得到宝石", 50, 165,0); 
				 break;
			 case 6:
				 GameStart.gs.gameState=State.GM_END;
				// loadOK5=true;
				 break;
			 }
			 
			 
			 
		 }
		
	}

	public void drawend(){
		Graphics offg=offScreen.getGraphics();
		 offg.setColor(0x000000);
	offg.fillRect(0, 0, screenWidth, screenHeight);
		offg.setColor(0xffffff);
		if(infoIndex>5)
		{   
			
			GameStart.gs.notifyDestroyed();
			
			/*try {
				
				
				if(nt){
				GameStart.gs.gameState=State.GM_NULL;
				closemusic();
				gc=null;
				gc=new gameCanvas();
				GameStart.gs.startApp();
				nt=false;}
			} catch (MIDletStateChangeException e) {
			}*/
			 
		}
		else{

		offg.drawString("尾声",30,30,0);
		offg.drawString(info[this.infoIndex], 40, 80, 0);
		infoIndex++;
	}}
	
 
	public void drawNpc(){		
		Graphics offg=offScreenLoad.getGraphics();
		offg.drawImage(npc,65, 93, 0);
 
}
	public void drawPlayer(){
		Graphics offg=offScreen.getGraphics();
		offg.setClip(px, py,pmx, pmy);
		int tx=0;
		int ty=0;
		switch(GameStart.gs.gameState){
		case State.GM_NEW:
		if (dir!=0){
		  tx=framex[dir-1];
		  ty=framey[nowFrame];
		  offg.drawImage(player, px-ty, py-tx, 0);		 
		}
		else
		  offg.drawImage(player, px, py-framex[olddir-1], 0); 
		
			
		offg.clipRect(0, 0, screenWidth, screenHeight);
		break;
		
	 case State.GM_HOUSE:
	 case State.GM_ENMY:
	 case State.GM_CITY:
		 
		 if (dir!=0){
			
			  tx=framex2[dir-1];
			 
			  ty=framey2[nowFrame];
			  offg.drawImage(player, px-ty-tx, py, 0);		 
			}
			else
			  offg.drawImage(player, px-framex2[olddir-1], py, 0); 
			
				
			offg.clipRect(0, 0, screenWidth, screenHeight);
			
			 
			break;
			
	
		 
	}}
	
	public void drawPanda(){
		Graphics offg=offScreen.getGraphics();
		offg.setClip(px-20, py-20,24, 32);
		int tx=0;
		int ty=0;
		if (dir!=0){
		  tx=framex1[dir-1];
		  ty=framey1[nowFrame1];
		  offg.drawImage(panda, px-20-ty, py-20-tx, 0);		 
		}
		else
		  offg.drawImage(panda, px-20, py-20-framex1[olddir-1], 0); 
		
		offg.clipRect(0, 0, screenWidth, screenHeight);
		
	} 

	public void doLoadMap(){
	   
	   	try{
	   	int movex=0;
		int movey=0;
		int mapw=immap.getWidth()/16;
	   	// int i=this.nowprocess/col;
	   	// int j=this.nowprocess%col;
	   	 for(int i=0; i<row; i++){
	   		for(int j=0; j<col; j++)
	   		{   this.nowprocess++;	
	   			map[i][j]=dis.readInt();
	   			offg.setClip(j*16,i*16,16,16);
				movex=(map[i][j]-1)%(mapw);
				movey=(map[i][j]-1)/(mapw);
				 
				offg.drawImage(immap,j*16-movex*16,i*16-movey*16,0);
				 
				if(this.nowprocess>=this.process){
					offg.setClip(0,0,screenWidth,screenHeight);
					switch(l){
					case 0:
						GameStart.gs.gameState=State.GM_NEW;
						System.out.println("1");
					  l=1;
					break;
					
					case 1:
					GameStart.gs.gameState=State.GM_CITY;
					l=2;
					break;
					case 2:
						 
						GameStart.gs.gameState=State.GM_HOUSE;
						l=3;
						break;
					case 3:
						GameStart.gs.gameState=State.GM_CITY;
							l=4;
							break;
					case 4:
						GameStart.gs.gameState=State.GM_ENMY;
							l=0;
							break;
					 }
					
			   }
	   		}
	   	 }
		   
		   
			
 
			
		
		}catch(Exception e){
		 e.printStackTrace();	
		}
		
		
	   }
	public int way[]={88,92,363,47,2,325,314,315,78,79,284,285};
	public int getMapItemID(int x,int y)
	{int a=20,b=0;
		
		switch(GameStart.gs.gameState){
		case State.GM_CITY:
		case State.GM_ENMY:
		case State.GM_NEW:
		b=30;	
		break;
		case State.GM_HOUSE:
			b=20;	
			break;
			
	}	
		if((py-dy+2)%16==0)
			row=(py-dy+2)/16+x;
		else
		row=(py-dy+2)/16+1+x;
		if((px-dx)%16==0)
			col=(px-dx)/16+y;
	else
		col=(px-dx)/16+1+y;
		 
	 
		if(row<0||row>a||col<0||col>b-1)
			return 0;
		else
		return map[row][col];
	 
	}
	public boolean check(int x, int y)
	{
		int w=getMapItemID(x,y);
		for(int i=0; i<way.length; i++)
		{
			if(w==way[i])
			{
				 
				return true;
			}
		}
		return false;
	}
	
	public void  drawMap(){
		Graphics offg=offScreen.getGraphics();
		offg.setClip(0,0, screenWidth,screenHeight);
		offg.drawImage(offScreenLoad, dx, dy, 0);
		
	}
	public void paint(Graphics g){
		
		
		g.drawImage(offScreen, 0, 0, 0);;
		
		
	}
	
	public void run(){
		//long starttime=0;
		//long passtime=0;
	 
		 
		 //图形绘制
		while(GameStart.gs.gameState!=State.GM_EXIT){
			
			 
			switch(GameStart.gs.gameState){
			case State.GM_MENU:
				 
				drawBK();
				 
				break;
			
			case State.GM_NEWLOAD:
				drawLoad();
				 
				if(loadOK1){
				initLevel(1);
				
				loadOK1=false;}
				 if(isload){
					 doLoadMap();
					 isload=false;
				 }
			 
			 
				 
				break;
			case State.GM_NEW:
				 
				
				drawMap();
			
				drawchuansong();
				
				if(charting<2){
					drawPanda();}
				
				
				drawPlayer();
				
				
				doChart(1);
				 
				if(px-dx>=436 &&px-dx<=456 &&py-dy>=234 &&py-dy<=278){
					doChart(2);
					if(charting==3){
					GameStart.gs.gameState=State.GM_CITYLOAD;
					
					loadOK2=true;
				}}
				 
				break;
			case State.GM_CITYLOAD:
				drawLoad();
				
				if(loadOK2){
				initLevel(2);
				loadOK2=false;}
				 if(isload){
					 doLoadMap();
					 isload=false;
					 
				 }
				 
				break;
				
			case State.GM_CITY:
				
				drawMap();
				drawchuansong();
				drawPlayer();
				
				
				doChart(3);
				
				if(px-dx>=276 &&px-dx<=320 &&py-dy>=112 &&py-dy<=156)
				{  if(nodie ||die)
				{
					nodie=false;
					loadOK3=true;
					GameStart.gs.gameState=State.GM_HOUSELOAD;
					}
				else
					doChart(5);
					}
				if(px-dx>=424 &&px-dx<=460 &&py-dy>=176 &&py-dy<=220)
				{	
					if(nodie==false)
					{GameStart.gs.gameState=State.GM_ENMYLOAD;
					loadOK4=true;}
				 
				}
				break;
				
			case State.GM_HOUSELOAD:
				drawLoad();
				if(loadOK3){
				initLevel(3);
				loadOK3=false;}
				 if(isload){
					 doLoadMap();
					 isload=false;
				 }
				 
				 
				 
				break;
				
			 

⌨️ 快捷键说明

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