www.pudn.com > java-game.rar > NewGame.java


//NewGame.java; 
//功能:新建一个游戏; 
//类名:NewGame 
//作者:石明华 
//完成日期:2007-04-10 
 
import javax.microedition.lcdui.game.*; 
import javax.microedition.lcdui.*; 
import java.util.Random; 
import java.io.*; 
import javax.microedition.rms.*; 
 
public class NewGame extends GameCanvas implements Runnable{ 
	 
	public Thread thread; 
	 
	//有效地图; 
	private boolean[] cango =  {true,true,true,true}; 
	 
	 
	//参数设置; 
	private int ManSpeed = 0,GSpeed = 0; 
	 
	//游戏开始开关,地图编号; 
	public boolean gameflag=true; 
	private int MapID = 0; 
	 
	//随机奖励概率; 
	Random srdm = new Random();   
	private int scroenum = 0; 
	 
	//存储游戏相关对象实例初始化; 
	private static final int wcnt = 5; 
	private int w=0; 
	RecordStore recordStroe = null; 
	protected int[] data = new int[45]; 
	sound s =new sound("D:/shiminghua/j2me_work/SeaGame/res/sound/w.mp3"); 
	 
	//游戏主角生命值,所得分数等参数; 
	private int hp = 34; 
	private int scroe = 0; 
	 
	//游戏主角参照点-起点; 
	private int drawX = 0,drawY = 0; 
	 
	//地图可见区域参照点; 
	private int dx = 0,dy = 0; 
	 
	//怪物数据初始化; 
	private int[] gx = new int[wcnt];//怪物起点; 
	private int[] gy = new int[wcnt]; 
	private int[] alive = new int [wcnt];//存活状态; 
	private int cnt=0,allded=0,sid=0; 
	static child_monster mg = new child_monster(); 
	child_monster[] m = new child_monster[wcnt]; 
 
	//子弹数据初始化; 
	private int[] tag =new int[wcnt]; 
	private int[] wx = new int[wcnt];//子弹起点; 
	private int[] wy = new int[wcnt]; 
 
	private int[] worder=  new int[wcnt]; 
	child_weapon[] cw = new child_weapon[wcnt]; 
	 
	//sprite(游戏主角),g1sprite(怪物1) 
	private Sprite sprite; 
	//titledImage(地图1),spriteImage(游戏主角),gImage(怪物1),rout1(路1) 
	private Image titledImage,spriteImage,rout1,rout2,titledImage_2,titledImage_3; 
	private Graphics g; 
	//background(地图1),rout1_1(路1); 
	private TiledLayer background,background_1,background_2,background_3,rout1_1,rout1_2,rout1_3,rout1_4,rout2_1,rout2_2,rout2_3,rout2_4; 
	private LayerManager layManager; 
	//精灵序列-游戏主角精灵; 
	private int speed = 10; 
	private int left_seq[] = {11,10,9}; 
	private int right_seq[] = {3,4,5}; 
	//地图;(40*8); 
	private byte[][] titledMap ={{1,2,3,4,5,6,7,8}, 
			{9,10,11,12,13,14,15,16}, 
			{17,18,19,20,21,22,23,24}, 
			{25,26,27,28,29,30,31,32}, 
			{33,34,35,36,37,38,39,40}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{33,33,33,33,33,33,33,33}, 
			{32,32,32,32,32,32,32,32}}; 
	//地图3(40*8); 
	private byte[][] titledMap_3 = { 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,1,1,1,1,1,1,1}, 
			{1,2,3,4,5,6,7,8}, 
			{9,10,11,12,13,14,15,16}, 
			{17,18,19,20,21,22,23,24}, 
			{25,26,27,28,29,30,31,32}, 
			{33,34,35,36,37,38,39,40}, 
			{41,42,43,44,45,46,47,48}, 
			{49,50,51,52,53,54,55,56}, 
			{57,58,59,60,61,62,63,64}, 
			{65,66,67,68,69,70,71,72}, 
			{73,74,75,76,77,78,79,80}, 
			{81,82,83,84,85,86,87,88}, 
			{89,90,91,92,93,94,95,96}, 
			{97,98,99,100,101,102,103,104}, 
			{105,106,107,108,109,110,111,112}, 
			{113,114,115,116,117,118,119,120}, 
			{121,122,123,124,125,126,127,127} 
	}; 
 
 
	 
	private byte[][] rout1Map = {{1,1,1,1,1}}; 
	private byte[][] rout2Map = {{1,1,1,1,1}}; 
	 
	protected NewGame() { 
		super(true); 
		// TODO Auto-generated constructor stub; 
		drawX = this.getWidth()/2-32;  
		drawY = 20; 
		try{ 
			spriteImage = Image.createImage("/man.png"); 
			 
			titledImage = Image.createImage("/sea1.png"); 
			titledImage_2 = Image.createImage("/sea8.png"); 
			titledImage_3 = Image.createImage("/seaend.png"); 
			 
			rout1 = Image.createImage("/smalltree.PNG"); 
			rout2 = Image.createImage("/smallstons.png"); 
		}catch(Exception e){} 
		 
		sprite = new Sprite(spriteImage,24,32);//游戏主角精灵;  
		sprite.setFrameSequence(left_seq); 
		 
		g = this.getGraphics(); 
		 
		 
		//生成地图; 
		background_1 = new TiledLayer(8,40,titledImage,40,10);//地图1;  
		background_2 = new TiledLayer(8,40,titledImage_2,40,10); 
		background_3 = new TiledLayer(8,40,titledImage_3,40,10); 
		 
		for(int i=0;i<40;i++){ 
			for(int j=0;j<8;j++){ 
				background_1.setCell(j,i,titledMap[i][j]); 
				background_2.setCell(j,i,120); 
				background_3.setCell(j,i,titledMap_3[i][j]); 
			} 
		} 
		background = background_1; 
		background.move(0,0); 
		 
		//路; 
		rout1_1 = new TiledLayer(5,1,rout1,16,15); 
		rout1_2 = new TiledLayer(5,1,rout1,16,15); 
		rout1_3 = new TiledLayer(5,1,rout1,16,15); 
		rout1_4 = new TiledLayer(5,1,rout1,16,15); 
		 
		rout2_1 = new TiledLayer(5,1,rout2,16,11); 
		rout2_2 = new TiledLayer(5,1,rout2,16,11); 
		rout2_3 = new TiledLayer(5,1,rout2,16,11); 
		rout2_4 = new TiledLayer(5,1,rout2,16,11); 
		for(int i=0;i<1;i++){ 
			for(int j=0;j<5;j++){ 
				rout1_1.setCell(j,i,rout1Map[i][j]); 
				rout1_2.setCell(j,i,rout1Map[i][j]); 
				rout1_3.setCell(j,i,rout1Map[i][j]); 
				rout1_4.setCell(j,i,rout1Map[i][j]); 
				 
				rout2_1.setCell(j,i,rout2Map[i][j]); 
				rout2_2.setCell(j,i,rout2Map[i][j]); 
				rout2_3.setCell(j,i,rout2Map[i][j]); 
				rout2_4.setCell(j,i,rout2Map[i][j]); 
			} 
		} 
		 
		//初始化武器; 
		for(int i=0;i0){//地图是否到左尽头; 
				if(drawX>80)//320-this.getWidth())//人物是否走到地图左边缘; 
					drawX=drawX-speed-ManSpeed; 
				else 
					dx=dx-speed-ManSpeed; 
			} 
			else 
				if(drawX>0)//地图已到左尽头,人物没走到地图左边缘; 
					drawX=drawX-speed-ManSpeed; 
 
		} 
		if((keyState & UP_PRESSED) != 0){//上键 
 
			if(dy>0) 
				if(drawY>20) 
					drawY=drawY-speed-ManSpeed; 
				else 
					dy=dy-speed-ManSpeed; 
			else 
				if(drawY>20){ 
					drawY=drawY-speed-ManSpeed; 
				} 
			//sprite.setFrameSequence(up_seq); 
 
		} 
		if((keyState & DOWN_PRESSED) != 0){//下键 
 
			if(dy10)){ 
					if(MapID<2){ 
						if(sprite.collidesWith(rout2_1, false)){ 
							changeMap(MapID++); 
						} 
					} 
				}else if((MapID ==1 )&&(  scroe>30)){ 
					if(MapID<2){ 
						if(sprite.collidesWith(rout2_1, false)){ 
							changeMap(MapID++); 
						} 
					} 
				} 
				//图层管理; 
 
				 
				layManager.append(sprite);			 
				layManager.append(background); 
				 
				//设置可见区域; 
				layManager.setViewWindow(dx,dy,this.getWidth(),this.getHeight()); 
				disp(); 
				 
			}else{ 
				g.setColor(0xffffff); 
				g.fillRect(sprite.getX()-20, sprite.getY()+10, 70, 20); 
				 
				g.setColor(0x000000); 
				g.drawString("You have lost!", sprite.getX()-20, sprite.getY()+10, Graphics.TOP|Graphics.LEFT); 
				flushGraphics(); 
				 
				break; 
			} 
		} 
		saveScroe(); 
	} 
	 
	//near(int mx,int my,int ggx,int ggy); 
	//(mx,my)为游戏主角当前坐标,(ggx,ggy)为怪物当前坐标; 
	//k为第k个怪物; 
	//计算怪物与游戏主角的距离; 
	//作者:石明华 
	//2007-03-18 
	protected void near(int mx,int my,int ggx,int ggy,int k){ 
		if(MapID==0){ 
			m[k].MoveSpeed = 1+GSpeed; 
		}else if(MapID==1){ 
			m[k].MoveSpeed = 2+GSpeed; 
		}else if(MapID==2){ 
			m[k].MoveSpeed = 3+GSpeed; 
		} 
		if(mx>=ggx){ 
			gx[k] = ggx+m[k].MoveSpeed; 
		}else 
			gx[k] = ggx-m[k].MoveSpeed; 
		if(my>=ggy) 
			gy[k] = ggy+m[k].MoveSpeed; 
		else 
			gy[k] = ggy-m[k].MoveSpeed; 
	} 
	 
	//isgo(int isgogo); 
	//isgogo; 
	//游戏是否开始; 
	//作者:石明华 
	//2007-03-18 
	protected void isgo(int isgogo){ 
		if(isgogo == 1) 
			gameflag = true; 
		else 
			gameflag = false; 
		 
	} 
	//calcWxy(int x,int y,int w,int i)计算子弹的轨迹; 
	//x,y为子弹当前坐标; 
	//w1为子弹方向(左/右); 
	//i为第i发子弹; 
	//作者:石明华 
	//2007-04-09 
	protected void calcWxy(int x,int y,int w1,int i){ 
		if(w1 == 0){//左方向; 
			wx[i] -=10; 
		}else if(w1 == 1){//右方向; 
			wx[i] +=10; 
		} 
	} 
	//createG() 
	//生成怪物实例; 
	//怪物数量为0到5中的随机个数; 
	//作者:石明华 
	//2007-04-09 
	protected void createG(){ 
		Random rdm = new Random();    
		//随机生成怪物数量; 
		cnt = rdm.nextInt(6); 
		allded = cnt; 
		//实例化怪物对象数组; 
		for (int i=0;i<5;i++){ 
			m[i] = new child_monster(); 
			if(MapID == 1){ 
				m[i].CreateAndChangeImg(MapID); 
			} 
			if(MapID == 2){ 
				m[i].CreateAndChangeImg(MapID); 
			} 
			if(i this.getWidth()+40)){ 
					worder[i] = 0; 
					layManager.remove(cw[i].kitsSprite); 
					continue; 
				} 
				//计算当前子弹的坐标; 
				calcWxy(wx[i], wy[i],tag[i],i); 
				cw[i].kitsSprite.setPosition(wx[i], wy[i]); 
				layManager.append(cw[i].kitsSprite); 
				//检测子弹是否击中怪物并计算分数值; 
				for(int j=0;j100) hp =100; 
					layManager.remove(m[k].sc); 
					alive[k] = 0; 
				}else{ 
					m[k].sc.nextFrame(); 
				} 
			} 
		} 
	} 
	//calchp(); 
	//检测怪物是否击中游戏主角并计算主角的HP值; 
	//作者:石明华 
	//2007-04-10 
	protected void calchp(){ 
		for(int i=0;i