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

📄 zoncanvas.java

📁 基于J2ME 开发的冒险类手机游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package zonja;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;

import com.nokia.mid.sound.Sound;
public class ZonCanvas extends Canvas implements CommandListener {
	// static final
	public static final int APPSTATE_IDLE = 0; // release resource in this

	// state
	
	private static final int SIZE_BGSOUND = 251;
	
	private static final int SIZE_EATSOUND = 15;
	
	private static final int SIZE_PASSSOUND = 38;

	public static final int APPSTATE_SPLASH = 1;

	public static final int APPSTATE_MENU = 2;

	public static final int APPSTATE_GAME = 3;

	public static final int APPSTATE_HISCORE = 4;

	public static final int APPSTATE_TITLE = 5;

	public static final int APPSTATE_ABOUT = 6;

	//public static final int APPSTATE_WIN = 7;

	public static final int APPSTATE_PASS = 8;
	
	public static final int APPSTATE_SOUNDSET = 7;

	public static final int GAMESTAGE_IDLE = 0;

	public static final int GAMESTAGE_ONE = 1;

	public static final int GAMESTAGE_TWO = 2;

	public static final int GAMESTAGE_THREE = 3;

//	public static final int GAMESTAGE_FOUR = 4;

	public static final int GAMESTAGE_FAILED = 15;

	private static final int SHOWTITLE_DELAY = 25;

	private static final int SHOWTIP_DELAY = 20;

	private static final int SPLASH_DELAY = 15;

	// menu
	private static final int MENU_COUNT = 7;

	private static final int SHOWMENU_COUNT = 4;

	private static final int TOTALSTAGE_COUNT = 3;

	private static final String VERSION = "V 1.0.0";
	
	private static final String COMPANY = "北京星海信通";
	
	private static final String INFO = "客服信息";
		
	private static final String INFO_NUMBER = "010-62285058";

	private static final String HELP_MESSAGE = "2键或者上键:菜单中上移光标;游戏中跳起。\n"
		+ "8键或者下键:菜单中下移光标。\n" + "4键或者左键:游戏中向左移动。\n" + "6键或者右键:游戏中向右移动。\n"
		+ "5键或者确认键:菜单中选择;游戏中攻击。\n" + "软键:察看游戏状态下选项, 选择退出游戏时高分自动保存。\n"
		+ "在游戏中有隐藏物品,打开后会有随机出现葡萄,可用于加分补血," + "出现钥匙用于打开封闭的地图," + "受伤后不可攻击。";

	
	private static final String SAVEOK_MESSAGE = "保存游戏成功!";

	private static final String SAVEERR_MESSAGE = "保存游戏失败!";

	private static final String LOADERR_MESSAGE = "读取进度失败!\n" + "进度不存在或者损坏。";

	// private static final String STARKEY_MESSAGE = "按*键保存进度";
	
	private static final String CHOOSESOUND_TIP = "按确定键切换音效";

	private static final String NOKEY_TIP = "找钥匙开启此栅栏";

	private static final String FENCEOPEN_TIP = "已开启栅栏";
	
	private static final String STAGESTART_TITLE = "开始闯关";
	
	private static final String STAGECONTINUE_TITLE = "继续闯关";

	
	private static final String TARGET_FLIED = "闯关失败啦!";

	private static final String STAGEPASS_MESSAGE = "恭喜您过关!";

	private static final String BACK_GAME = "回到游戏";
	
	private static final String SAVE_GAME = "保存游戏";

	private static final String QUIT_GAME = "退出游戏";

	private static final String BACK_MENU = "回主菜单";

	private static final String MESSAGE_OK = "确定";
	
//	private static StringBuffer sTest = new StringBuffer("");
	
	private int stateCount = 0 ;

	// static variables

	protected static int stateBeforePause = APPSTATE_IDLE;

	protected static int appState = APPSTATE_IDLE;

	protected static int gameStage = GAMESTAGE_IDLE;

	// variables
	// private String stageTitle = STAGE1_TITLE;

	private Command commandBack = new Command(BACK_MENU, Command.OK, 1);

//	private Command commandBackGame = new Command(BACK_GAME, Command.OK, 1);

	private Command commandQuit = new Command(QUIT_GAME, Command.OK, 1);
	
	private Command commandSave = new Command(SAVE_GAME, Command.OK, 1);


	private int scrWidth = 0, scrHeight = 0;
	

	private int fontHeight = 0;

	private int splashStage = 0;

	private int splashCount = 0;

	private int showTitleCount = 0;

	private int showTipCount = 0;

	private int tipFlag = 0;

	private int hiScore = 0;

	private boolean canvasUpdate = true;
	
	protected int canvasOffsetX = 0;

	protected int canvasOffsetY = 0;

	// sound
	Sound soundPlayer = null;

	//VolumeControl volControl = null;

	// loop
	Timer loopTimer = new Timer();

	MainLooper mainLooper = new MainLooper(this);

	static ZonCanvas instance = null;

	public ZonTileMap mainMap = null;

	// Image
	Image splash1Image = null;

	Image splash2Image = null;

	Image splash3Image = null;

	//Image menuImage1 = null;

	Image menuImage2 = null;

	Image menuItemImage = null;

	Image cursorImage = null;
	
	Image aboutImage = null;
	
//	Image bufImage = null;
	
//	Graphics gBuf = null;

	private int menuBase = 0;

	private int menuSel = 0;
	
	private int subMenuSel = 0;

	private boolean showMore = true;

	private boolean soundOn = true;

	private int soundType = 1;
	
	InputStream inputStream = null;

	// enemySprite
	MainSprite spriteLead = null;

	StepStone[] stepStone = null;
	
	StepStone[] stepYellow = null;

	EnemyJump[] enemyTops = null;

	EnemyWalk[] enemySpring = null;

	EnemyWalk[] enemyBlueFeet = null;

	EnemyFly[] enemyBirds = null;

	MagicBox[] magicBoxes = null;

	Barrier[] fence = null;

	StaticSprite[] deadZone = null;
	
	ZonLayer layer = new ZonLayer(scrWidth, scrHeight);

	// methods
	public ZonCanvas() {
		super();
		// TODO Auto-generated constructor stub
		instance = this;

		try {
			initCanvas();

			try {
				loopTimer.schedule(mainLooper, 80, 80);
			} catch (Exception e) {
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	protected void initCanvas() throws Exception {

		// add the Exit command
		addCommand(commandQuit);

		setCommandListener(this);

//		setFullScreenMode(true);
		
		scrWidth = getWidth();
		scrHeight = getHeight();



		loadSplashPics();
		loadMenuPics();

		if(!loadScore()){
			hiScore = 0;
		}
			
/*		if(soundOn && soundType == 1){
			initSound("/sound/bgsound.ott", 551);	
		}*/
		appState = APPSTATE_SPLASH;
		
		splashStage = 0;

	}
	
	private void loadSplashPics() throws Exception{
		
		if (!layer.loadImage("splash1", "/image/splash1.png", false, 1200))
			throw new Exception();
		if (!layer.loadImage("splash2", "/image/splash2.png", false, 550))
			throw new Exception();
		if (!layer.loadImage("splash3", "/image/splash3.png", false, 0))
			throw new Exception();
	}
	
	private void releaseSplashPics(){
		layer.removeImage("splash3");
		layer.removeImage("splash2");
		layer.removeImage("splash1");
		
		
	}
	
	private boolean loadMenuPics() {
		if (!layer.loadImage("menubg2", "/image/menubg2.png", false,3894))
			return false;
		if (!layer.loadImage("menuitem", "/image/menuitem.png", false, 2692))
			return false;
		if (!layer.loadImage("cursor", "/image/cursor.png", false, 14430))
			return false;
		return true;
	}
	
	private void releaseMenuPics(){
		layer.removeImage("cursor");
		layer.removeImage("menuitem");
		layer.removeImage("menubg2");

	}
	
	private boolean loadSharePics(){
		if (!layer.loadImage("bg16_0", "/image/bg16_0.png", false, 21254))
			return false;
		if (!layer.loadImage("bg16_4", "/image/bg16_4.png", false, 16250))
			return false;
		if (!layer.loadImage("enemysprite32_share",
				"/image/enemysprite32_share.png", false, 8144))
			return false;
		if (!layer.loadImage("mainsprite32", "/image/mainsprite32.png",
				false, 4381))
			return false;
		if (!layer.loadImage("enemysprite16_share",
				"/image/enemysprite16_share.png", false,13776))
			return false;
		if (!layer.loadImage("bubblehead", "/image/bubblehead.png", false,14594))
			return false;
		if (!layer.loadImage("bloodnumber", "/image/bloodnumber.png", false,15024))
			return false;


		return true;
	}
	
	private void releaseSharePics(){
		layer.removeImage("bloodnumber");
		layer.removeImage("bubblehead");
		layer.removeImage("enemysprite16_share");
		layer.removeImage("mainsprite32");
		layer.removeImage("enemysprite32_share");
		layer.removeImage("bg16_4");
		layer.removeImage("bg16_0");
		
	}
	

	private boolean loadStagePics(){

		switch(gameStage){
		case GAMESTAGE_ONE:
			if (!layer.loadImage("bg16_1", "/image/bg16_1.png", false, 20398))
				return false;
			if (!layer.loadImage("bg16_5", "/image/bg16_5.png", false, 15807))
				return false;
			if (!layer.loadImage("enemysprite32_1",
					"/image/enemysprite32_1.png", false, 12444))
				return false;
			break;
		case GAMESTAGE_TWO:
			if (!layer.loadImage("bg16_2", "/image/bg16_2.png", false, 18044))
				return false;
			if (!layer.loadImage("bg16_6", "/image/bg16_6.png", false, 15234))
				return false;
			if (!layer.loadImage("enemysprite32_2",
					"/image/enemysprite32_2.png", false, 11439))
				return false;
			break;
		case GAMESTAGE_THREE:
			if (!layer.loadImage("bg16_3", "/image/bg16_3.png", false, 16352))
				return false;
			if (!layer.loadImage("bg16_6", "/image/bg16_6.png", false, 15234))
				return false;
			if (!layer.loadImage("enemysprite32_3",
					"/image/enemysprite32_3.png", false, 10264))
				return false;
			break;
		}
		return true;
	}
	
	private void releaseStagePics(){

		switch(gameStage){
		case GAMESTAGE_ONE:
			layer.removeImage("enemysprite32_1");
			layer.removeImage("bg16_5");
			layer.removeImage("bg16_1");
			break;
		case GAMESTAGE_TWO:
			layer.removeImage("enemysprite32_2");
			layer.removeImage("bg16_6");
			layer.removeImage("bg16_2");
			break;
		case GAMESTAGE_THREE:
			
			layer.removeImage("enemysprite32_3");
			layer.removeImage("bg16_6");
			layer.removeImage("bg16_3");
			break;
		case GAMESTAGE_FAILED:
			layer.removeImage("enemysprite32_1");
			layer.removeImage("bg16_5");
			layer.removeImage("bg16_1");
			layer.removeImage("enemysprite32_2");
			layer.removeImage("bg16_6");
			layer.removeImage("bg16_2");
			layer.removeImage("enemysprite32_3");
			layer.removeImage("bg16_6");
			layer.removeImage("bg16_3");
				break;
		}
	}
	
	
	private boolean initMaps() {
		mainMap = null;
		mainMap = new ZonTileMap(scrWidth, scrHeight);
		if (mainMap == null)
			return false;
		if (!mainMap.initMap("bg16_", 7, 16, 16, false))
			return false;
		return true;
	}

	private boolean initLead() {


		if (spriteLead == null) {

			spriteLead = new MainSprite(scrWidth, scrHeight);
			if (spriteLead == null)
				return false;
			spriteLead.initSprite("mainsprite32", 24, 32, false);

		}
		


		switch (gameStage) {
		case GAMESTAGE_ONE:
			spriteLead.setPosition(10, scrHeight - 64);
			break;
		case GAMESTAGE_TWO:

⌨️ 快捷键说明

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