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

📄 newgame.java

📁 为毕业设计而只做的JAVA版的手机游戏,游戏名:海底探险
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//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;i<wcnt;i++){
			cw[i] = new child_weapon();
			cw[i].run();
			wx[i] = 0;
			wy[i] = 0;
			tag[i] = 0;
			alive[i] = 0;
			worder[i] = 0;
		}
		
		rout1_1.move(0, 100);
		rout1_2.move(100, 150);
		rout1_3.move(236, 200);
		rout1_4.move(0, 250);
		
		rout2_1.move(236,360);
		layManager = new LayerManager();
		
		thread = new Thread(this);
		thread.start();
	}
	//按键处理;
	public void keyPressed(){
		int keyState = getKeyStates();
		if((keyState & RIGHT_PRESSED) != 0){//右键;
			w=1;
			sprite.setFrameSequence(right_seq);

			if(dx<320-this.getWidth()){//地图是否到右尽头;
				if(drawX<this.getWidth()/2+32)//人物是否走到地图右边缘;
					drawX=drawX+speed+ManSpeed;
				else
					dx=dx+speed+ManSpeed;
			}
			else 
				if(drawX<320-this.getWidth()+140)//地图已到右尽头,人物没走到地图右边缘;
					drawX=drawX+speed+ManSpeed;

		}
		if((keyState & LEFT_PRESSED) != 0){//左键
			w=0;
			sprite.setFrameSequence(left_seq);

			if(dx>0){//地图是否到左尽头;
				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(dy<this.getHeight()/2-50)
				if(drawY<this.getHeight()-120)
					drawY=drawY+speed;
				else
					dy=dy+speed+ManSpeed;
			else
				if(drawY<this.getHeight()-50)
					drawY=drawY+speed+ManSpeed;
			//sprite.setFrameSequence(down_seq);

		}
		if((keyState & GAME_A_PRESSED) != 0){
			if(worder[0] == 0){
				wx[0] = drawX + dx;
				wy[0] = drawY + dy+16;
				tag[0]=w;
				worder[0]=1;
			}else if(worder[1] == 0){
				wx[1] = drawX + dx;
				wy[1] = drawY + dy+16;
				tag[1]=w;
				worder[1]=1;
			}else if(worder[2] == 0){
				wx[2] = drawX + dx;
				wy[2] = drawY + dy+16;
				tag[2]=w;
				worder[2]=1;
			}else if(worder[3] == 0){
				wx[3] = drawX + dx;
				wy[3] = drawY + dy+16;
				tag[3]=w;
				worder[3]=1;
			}else if(worder[4] == 0){
				wx[4] = drawX + dx;
				wy[4] = drawY + dy+16;
				tag[4]=w;
				worder[4]=1;
			}
		}
	}
	public void run() {
		// TODO Auto-generated method stub

		createMap();
		InputStream is = getClass().getResourceAsStream("D:/shiminghua/j2me_work/SeaGame/res/sound/w.mp3");
		s.playSound(s.createPlayer(is, "mp3", 100));
		while(true){
			if(gameflag){
			//	if(dy<this.getHeight()/2-50)//自动向下沉;
			//		dy=dy+1;
				
				//当当前存活怪物数为0时重新生成怪物;
				if(allded <= 0){
					for(int j=0;j<cnt;j++){
						layManager.remove(m[j].g1sprite);
						layManager.remove(m[j].sc);
					}
					createG();
				}
				keyPressed();
				try{
					Thread.sleep(200);
				}catch(InterruptedException e){
					e.printStackTrace();
				}
				//游戏主角;
				sprite.nextFrame();
				sprite.setPosition(drawX+dx,drawY+dy);

			
				//怪物运动路径运算;
				calcg();
				
				//检测怪物是否击中游戏主角并计算主角的HP值;
				calchp();
				
				//子弹轨迹运算;
				calcWAndc();

				//地图更换;
				if((MapID ==0)&&( scroe>10)){
					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<cnt){
			m[i].run();
			alive[i] = 1;}
		}
		//生成第j个怪物的初始坐标;
		for (int j=0;j<cnt;j++){

⌨️ 快捷键说明

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