maincanvas.java

来自「用J2ME实现的战棋类小游戏DEMO,寻路用A星算法,因为时间关系物品使用功能请」· Java 代码 · 共 1,739 行 · 第 1/4 页

JAVA
1,739
字号
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

import midp20.FangSprite;
import midp20.GameTools;
import midp20.Sprite;
import midp20.TiledLayer;

public class MainCanvas extends Canvas implements Runnable {
	private String message[]=new String[1000];
	private int messageIndex=0;
	private Sprite enemyX;
	private int enemyActionShunXu=0;
	private Sprite enemyList[]=new Sprite[2];
	private Sprite enemyWLAList[]=new Sprite[2];
    private String currentHMAD[]=new String[4];
	private Sprite currentjuese;

	private int directP=0,directD=0;
	//计数用
	private static int indexPWLA=0,indexX=0;
	//主角移动后记录一次坐标以作后悔操作用
	private int backX=0;
	private int backY=0;

	private int inGameingIndex = 100;
	private int inGameingTalkIndex=0;
   
	int aaaa = 0;

	int aaaaa = 0;

	MainMIDlet mm;

	Thread th;

	GameLogo gl;

	GameMenu gm;

	private int FPS = 25;

	private Image img_buffer;

	private Graphics g_buffer;

	private boolean isBuffer = false;

	private boolean isRunning = true;

	private boolean Music = true;

	private int gameUserFace = GAMELOGO;

	public static final int GAMELOGO = 0;

	public static final int GAMEMENU = 1;

	public static final int GAMEOPTION = 2;

	public static final int GAMEABOUT = 3;

	public static final int GAMEHELP = 4;

	public static final int GAMESCORE = 5;

	public static final int GAMING = 6;
	public static final int GAMINGHUA1=10;
	public static final int WIN = 7;

	public int gameStage = 1;

	int musicIndex = 0;

	private int keycode = 0;

	private int rekeycode = 0;

	public static final int UP = -1;

	public static final int DOWN = -2;

	public static final int LEFT = -3;

	public static final int RIGHT = -4;

	public static final int FIRE = -5;

	public static final int SOFT_LEFT = -6;

	public static final int SOFT_RIGHT = -7;

	long startTime;
	//对话时图
	Image mapTalk=GameTools.createImg("/mapTalk.png");

	// 真图层类声明
	Image cunzi = GameTools.createImg("/map01.png");

	TiledLayer tl;

	int map_tl[][] = {
			{ 16, 17, 18, 19, 20, 14, 15, 16, 17, 18, 19, 20, 14, 15, 16, 17, 18, 19, 20,14, 15, 16, 17, 18},
			{ 23, 24, 25, 26, 27, 21, 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, 25},
			{ 30, 31, 32, 33, 34, 28, 29, 30, 31, 32, 33, 34, 28, 29, 30, 31, 32, 33, 34, 28, 29, 30, 31, 32},
			{ 37, 38, 39, 40, 41, 35, 36, 37, 38, 39, 40, 41, 35, 36, 37, 38, 39, 40, 41, 35, 36, 37, 38, 39},
			{ 44, 45, 46, 47, 48, 42, 43, 44, 45, 46, 47, 48, 42, 43, 44, 45, 46, 47, 48,42, 43, 44, 45, 46},
			{ 1, 1, 1, 1, 1,   1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 ,1, 1,1,1},
			{ 1, 1, 1, 1, 1,   0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
			{ 1, 0, 1, 0, 1,   7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,0,1},
			{ 1, 7, 1, 7, 0,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,7,1},
			{ 0, 1, 1, 1, 7,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
			{ 7, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1 ,1, 2,1,1},
			{ 1, 1, 1, 2, 2,   1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,1,1},
			{ 1, 1, 2, 2, 2,   1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 ,1, 2,1,1},
			{ 1, 1, 1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 ,1, 1,1,1},
			{ 1, 0, 0, 1, 1,   1, 1, 1, 1, 2, 2, 1, 1, 7, 1, 1, 1, 1, 1, 1 ,1, 1,0,1},
			{ 1, 7, 7, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 1,7,1},
			{ 1, 1, 1, 1, 2,   1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 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, 1, 1 ,1, 1,1,1},
			{ 1, 1, 1, 1, 1,   1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1 ,1, 1,1,1},
			{ 1, 2, 1, 2, 2,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,1,1},
			{ 1, 1, 1, 1, 2,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, 2,2,1},
			
			{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1 ,1,1,1,1},
			{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 0, 1 ,1,2,1,1},
			{ 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1 ,1,1,1,1},
			{ 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2 ,1,1,1,1}

	};

	// 次图层声明
	Image levelSecondLayerPic = GameTools.createImg("/tl2P.png");

	TiledLayer tl2;

	int map_tl2[][] = {
			{ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 },
			{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },

			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 } };

	int map_tl2_cover[][] = { { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },

			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 },
			{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 },

			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 },
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
			{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 } };

	// 作战菜单图层
	// AttackMenuLayer aml;
	Image AttackMenuPic = GameTools.createImg("/AttackMenuP.png");

	TiledLayer tl3;

	int map_tl3[][] = { { 0, 1, 2, 3 }

	};

	// 怪物A号精灵声明
	Image enemyPicA;

	Sprite enemyA;
    //怪物B号精灵声明
	Image enemyPicB;

	Sprite enemyB;
	// 主角精灵声明
	Image playerPic;

	Sprite player;
	
	//主角物理攻击动画片精灵
	Image playWLAttackPic;
	 
    Sprite playerWLAttacker;
	// 方块精灵声明
	Image FangPic;

	FangSprite fangPlayer;
	
	//小方块精灵声明
	Image LFangPic;
	FangSprite LFangPlayer;
	
	//敌人物理攻击动画片精灵
	Image enemyAWLAttackPic;
	 
    Sprite enemyAWLAttacker;
    //敌人物理攻击动画片精灵
    Image enemyBWLAttackPic;
    Sprite enemyBWLAttacker;
    //enemy die Sprite
    Image enemyDiePic;
    Sprite enemyDier;
	// moving供移动系列方法用
	private int begin_x;

	private int begin_y;

	private int end_x;

	private int end_y;

	private int cw;

	private int ch;

	private int openListLength = 0;

	private int closeListLength = 0;

	private boolean closeList[][];

	private int[][][] openList;

	private int movShuZu[];

	private int xiaBiaoA = 0;

	private int movSteps = 0;

	private int movStepsA = 0;
	
	
	
	
	

	public MainCanvas(MainMIDlet mm) {
		
	//	this.setFullScreenMode(true);
		GameTools.SCREEN_WIDTH = this.getWidth();
		GameTools.SCREEN_HEIGHT = this.getHeight();
     
		this.mm = mm;
		//Talking Message
		message[0]="......";
		message[1]="......好热";
		message[2]="什么都看不见.";
	    message[3]="我是谁,为什么一点都想不起来.";
		message[4]="我已经死了吗?";
		message[5]="......";
		message[6]="这是光吗";
		message[7]="如此纯白且耀眼的光";
		message[8]="女声:这是你要追寻的光";
		message[9]="你是谁,你来救我的吗?";
		message[10]="女声:找到它吧,并且找到协奏者";
		message[11]="等等~协奏者是谁?";
		message[12]="女声:去吧,我的......";
		message[13]="(一道闪光)";
		
		message[14]="这是哪里......";
		message[15]="一个陌生的世界";
		message[16]="我现在应该从哪开始找那光和协奏者";
	    message[17]="陌生的声音:他在那里!杀了他!";
	    message[18]="什么!为什么他们要杀我?";
	    message[19]="(身体不由地向他们反方向逃跑起来)";
	    message[20]=" 糟糕 ,前面是悬崖!";
	    message[21]="(敌人急速逼近)";
	    message[22]="没其他办法了,打败了他们再说!";
	    
	    message[23]="神秘男子:看来你快不行了.";
	    message[24]="神秘男子:让我一刀解决了你吧.";
	    message[25]="(面对如此困境,我选择纵身跳下去)";
	    message[26]="神秘女子:既然他跳了下去那么我们";
	    message[27]="神秘女子:不用多费工夫了,回去吧.";
	    message[28]="本序章终......";
		// 背景图层 + 次级图层
		tl = new TiledLayer(7, 7, cunzi, 24, 24, map_tl);
		tl.setPosition(-120, -120);
		tl2 = new TiledLayer(4, 1, levelSecondLayerPic, 24, 24, map_tl2);
		tl3 = new TiledLayer(4, 1, AttackMenuPic, 20, 20, map_tl3);
        
		gl = new GameLogo();

		gm = new GameMenu();
		// 精灵 创建方法执行
		gameInit_Fang();
		gameInit_zhujue();
		gameInit_zhujueWLA();
		gameInit_enemyA();
		gameInit_LFang();
		gameInit_enemyAWLA();
		gameInit_enemyB();
		gameInit_enemyBWLA();
		gameInit_enemyDie();
		   enemyList[0]=enemyA;
	        enemyList[1]=enemyB;
	        enemyWLAList[0]=enemyAWLAttacker;
	        enemyWLAList[1]=enemyBWLAttacker;
		th = new Thread(this);
		if (isBuffer) {
			img_buffer = Image.createImage(GameTools.SCREEN_WIDTH,
					GameTools.SCREEN_HEIGHT);
			g_buffer = img_buffer.getGraphics();
		}
		startTime = System.currentTimeMillis();
		th.start();
	}



	public void gameInit_zhujue() {
		playerPic = GameTools.createImg("/player01.png");
		player = new Sprite(playerPic, 24, 48);
		player.setPosition(6 * 24, 3 * 24);
		player.setCurrentFrames(player.up);
		player.setShuXing( 60, 10, 17, 17);
		player.name=new String("???");
		player.HMAD[0]=100;
		player.HMAD[1]=0;
		player.HMAD[2]=18;
		player.HMAD[3]=18;
	
	}
	
	public void gameInit_zhujueWLA(){
		playWLAttackPic=GameTools.createImg("/playerAttack.png");
		playerWLAttacker=new Sprite(playWLAttackPic,48,48);
		playerWLAttacker.setPosition(0, 0);
		playerWLAttacker.setCurrentFrames(playerWLAttacker.up);
		
	}

	public void gameInit_Fang() {
		FangPic = GameTools.createImg("/FangSprite.png");
		fangPlayer = new FangSprite(FangPic, 24, 24);
		fangPlayer.setPosition(24 * 4, 24 * 4);
		fangPlayer.setCurrentFrames(fangPlayer.up1);
	}
	
	public void gameInit_LFang(){
		LFangPic=GameTools.createImg("/xiaofang.png");
		LFangPlayer=new FangSprite(LFangPic,20,20);
		LFangPlayer.setPosition(0, 0);
		LFangPlayer.setCurrentFrames(LFangPlayer.lup1);
	}
	
	public void gameInit_enemyAWLA(){
		enemyAWLAttackPic=GameTools.createImg("/enemyAttackP.png");
		enemyAWLAttacker=new Sprite(enemyAWLAttackPic,48,48);
		enemyAWLAttacker.setPosition(24, 0);
		enemyAWLAttacker.setCurrentFrames(enemyAWLAttacker.up);
		
	}
	public void gameInit_enemyA() {
		enemyPicA = GameTools.createImg("/enemyPic.png");
		enemyA = new Sprite(enemyPicA, 24, 48);
		enemyA.setPosition(24 * 7, 24 * 12);
		enemyA.setCurrentFrames(enemyA.up);
		map_tl2[enemyA.getY() / 24][enemyA.getX() / 24]=2;
		enemyA.setShuXing( 40, 20, 30, 3);
	    enemyA.name=new String("神秘女子");
	    enemyA.HMAD[0]=20;
	    enemyA.HMAD[1]=0;
	    enemyA.HMAD[2]=13+18;
	    enemyA.HMAD[3]=0;
	}
	public void gameInit_enemyB(){
		enemyPicB = GameTools.createImg("/enemyPic.png");
		enemyB = new Sprite(enemyPicB, 24, 48);
		enemyB.setPosition(24 * 3, 24 * 11);
		enemyB.setCurrentFrames(enemyB.up);
		map_tl2[enemyB.getY() / 24][enemyB.getX() / 24]=2;
		enemyB.setShuXing( 40, 20, 30, 3);
		 enemyB.name=new String("神秘男子");
		   enemyB.HMAD[0]=20;
		    enemyB.HMAD[1]=0;
		    enemyB.HMAD[2]=10+18;
		    enemyB.HMAD[3]=2;
	
	}
	public void gameInit_enemyBWLA(){
		enemyBWLAttackPic=GameTools.createImg("/enemyAttackP.png");
		enemyBWLAttacker=new Sprite(enemyBWLAttackPic,48,48);
		enemyBWLAttacker.setPosition(24, 0);
		enemyBWLAttacker.setCurrentFrames(enemyBWLAttacker.up);
	}
    public void gameInit_enemyDie(){
    	enemyDiePic=GameTools.createImg("/dying.png");
    	enemyDier=new Sprite(enemyDiePic,24,48);
    	enemyDier.setPosition(0, 0);
    	enemyDier.setCurrentFrames(enemyDier.up);
    }
	protected void paint(Graphics g) {

		g.setColor(0xffffff);
		g.fillRect(0, 0, GameTools.SCREEN_WIDTH, GameTools.SCREEN_HEIGHT);
		g.setColor(0xff0000);

		if (isBuffer) {

			g.drawImage(img_buffer, 0, 0, 0);
		} else {

			switch (gameUserFace) {
			case GAMELOGO:
				gl.renderLogo(g);
				break;
			case GAMEMENU:
				gm.renderMenu(g);
				break;
			case GAMEABOUT:

⌨️ 快捷键说明

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