📄 zoncanvas.java
字号:
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 + -