📄 mygamecanvas.java.bak
字号:
//package org.gamecollege.j2me.rpg;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import java.util.*;
/**
* @author Jagie
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class MyGameCanvas extends GameCanvas implements CommandListener, Runnable {
/**
* 游戏MIDlet
*/
MIDlet midlet;
/**
* 游戏运行开关
*/
boolean isRunning;
/**
* 消息队列
*/
Vector messageQueue;
public static final int GAME_LOOP_INTERVAL = 100;
MyRPGGameMIDlet myRPGGameMIDlet;
public static final int STATUS_SHOWFLASH = 0; //显示flash
public static final int STATUS_POPMENU_CONFIRM = 1; //确认买卖
public static final int STATUS_BUYING = 11; //购买道具
public static final int STATUS_WALKING = 2; //主角行走
public static final int STATUS_FIGHTING = 3; ////战斗
public static final int STATUS_MAIN_MENU = 4; //主菜单
public static final int STATUS_HELP = 5; //帮助
public static final int STATUS_ABOUT = 6; //关于
public static final int STATUS_PLAYER_INFO = 8; //主角属性
public static final int STATUS_MISSION_INFO = 9; //任务列表
public static final int STATUS_GAME_OVER = 10; //游戏结束
public static final int STATUS_LOADING_LEVEL = 12; //装载关卡
public static final int STATUS_SALING = 13; //卖东西
public static final int STATUS_FIGHT_OVER = 14; //战斗结束
public static final int STATUS_MISSION_OVER = 15; //任务结束
private int gameStatus = STATUS_SHOWFLASH;
//屏幕宽度,高度
int width, height;
//主角
Player myPlayer;
LayerManager lm;
//当前关卡号
int curLevelNo;
//1:买卖武器护具,2:药品买卖
int saleType;
//当前菜单项索引
int curMenuIndex;
//当前关卡
Level curLevel;
//可出售的武器集合
Vector weaponVec = new Vector();
//可出售的护具集合
Vector jacketVec = new Vector();
//可出售的药品集合
Vector medicVec = new Vector();
//购买武器护具时,区别到底是武器还是护具
boolean isArm;
LayerManager fightLayerManager;
GameInnerThread engine;
String curMessage;
Thread gameThread;
long lastPopMsgTime;
int beforeFightHp;
int beforeFightExp;
int beforeFightMp;
int beforeFightMoney;
int beforeFightHp_npc;
//是否在战斗时查看技能
boolean popSkill;
long lastFightOverTime;
long lastGameOverTime;
//在战斗中随机出现的敌人
NPC ranEnemy;
//战斗结束后获得的技能
Skill ranSkill;
Sprite fightBackGround;
int curMenuIndex2;
int killTigerCount;
GameStore gs;
boolean hasStored;
boolean hasFullScreen;
/*
* (non-Javadoc)
*
* @see org.gamecollege.j2me.rpg.RPGGameCanvas#drawMessage(javax.microedition.lcdui.Graphics)
*/
public void commandAction(Command com, Displayable disp) {
if (com == List.SELECT_COMMAND) {
gs.deleteRecord();
myPlayer = new Player(ResourceLoader.StringResource[0]);
List list = (List) disp;
curLevelNo = list.getSelectedIndex();
curLevel = new Level();
LevelLoader.instance.loadLevel(curLevel);
Display.getDisplay(myRPGGameMIDlet).setCurrent(this);
} else if (com.getCommandType() == Command.BACK) {
this.setGameStatus(STATUS_MAIN_MENU);
Display.getDisplay(myRPGGameMIDlet).setCurrent(this);
}
}
public void showLevels() {
List list = new List(ResourceLoader.StringResource[25], Choice.IMPLICIT);
list.append(ResourceLoader.StringResource[24], null);
list.addCommand(new Command(ResourceLoader.StringResource[34],
Command.BACK, 1));
list.setCommandListener(this);
Display.getDisplay(myRPGGameMIDlet).setCurrent(list);
}
/*
* (non-Javadoc)
*
* @see org.gamecollege.j2me.rpg.RPGGameCanvas#stopGame()
*/
public void stopGame() {
System.gc();
if (engine != null) {
engine.stop();
}
}
protected void drawMessage() {
Graphics g = this.getGraphics();
if (curMessage != null) {
g.setColor(255, 255, 128);
g.drawImage(ResourceLoader.menu[17], width / 2, height - 20,
Graphics.HCENTER | Graphics.TOP);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL));
g.drawString(curMessage, width / 2, height - 16, Graphics.HCENTER
| Graphics.TOP);
}
}
/*
* (non-Javadoc)
*
* @see org.gamecollege.j2me.rpg.RPGGameCanvas#input()
*/
protected void input() {
int keyStates = getKeyStates();
switch (getGameStatus()) {
//主菜单状态
case STATUS_MAIN_MENU:
if (hasStored) {
handleMenuKeyBrowse(keyStates, 4);
} else {
handleMenuKeyBrowse(keyStates, 3);
}
if ((keyStates & FIRE_PRESSED) != 0) {
//有存盘
if (hasStored) {
switch (curMenuIndex) {
case 0:
//显示关卡列表
showLevels();
break;
case 1:
//装载存盘
loadGame();
break;
case 2:
//关于
setGameStatus(STATUS_ABOUT);
break;
case 3:
//帮助
setGameStatus(STATUS_HELP);
break;
case 4:
//退出
this.stopGame();
this.isRunning = false;
break;
}
} else {
//无存盘
switch (curMenuIndex) {
case 0:
//显示关卡列表
showLevels();
break;
case 1:
//关于
setGameStatus(STATUS_ABOUT);
break;
case 2:
//帮助
setGameStatus(STATUS_HELP);
break;
case 3:
//退出
this.stopGame();
this.isRunning = false;
break;
}
}
}
break;
//帮助界面
case STATUS_HELP:
//关于界面
case STATUS_ABOUT:
if (keyStates != 0) {
setGameStatus(STATUS_MAIN_MENU);
}
break;
//行走界面
case STATUS_WALKING:
//按着左键
if ((keyStates & LEFT_PRESSED) != 0) {
myPlayer.move(Player.LEFT);
}
//按着右键
else if ((keyStates & RIGHT_PRESSED) != 0) {
myPlayer.move(Player.RIGHT);
}
//按着上键
else if ((keyStates & UP_PRESSED) != 0) {
myPlayer.move(Player.UP);
}
//按着下键
else if ((keyStates & DOWN_PRESSED) != 0) {
myPlayer.move(Player.DOWN);
} else {
//未按方向键
myPlayer.move(Player.STILL);
}
break;
//确认界面
/*
*/
case STATUS_POPMENU_CONFIRM:
handleMenuKeyBrowse(keyStates, 2);
if ((keyStates & FIRE_PRESSED) != 0) {
switch (curMenuIndex) {
case 0:
setGameStatus(STATUS_BUYING);
break;
case 1:
setGameStatus(STATUS_SALING);
break;
case 2:
setGameStatus(STATUS_WALKING);
break;
}
}
break;
//购买物品界面
case STATUS_BUYING:
int maxMenuIndex = 0;
Property pro = null;
switch (this.saleType) {
//武器护具
case 1:
//注意多了一个[退出]菜单
if (this.isArm) {
maxMenuIndex = this.weaponVec.size();
if (curMenuIndex < weaponVec.size()) {
pro = (Property) weaponVec.elementAt(curMenuIndex);
}
} else {
maxMenuIndex = this.jacketVec.size();
if (curMenuIndex < jacketVec.size()) {
pro = (Property) jacketVec.elementAt(curMenuIndex);
}
}
break;
//药品
case 2:
if (curMenuIndex < medicVec.size()) {
pro = (Property) medicVec.elementAt(curMenuIndex);
}
maxMenuIndex = this.medicVec.size();
break;
}
handleMenuKeyBrowse(keyStates, maxMenuIndex);
if ((keyStates & LEFT_PRESSED) != 0
|| (keyStates & RIGHT_PRESSED) != 0) {
isArm = !isArm;
} else if ((keyStates & FIRE_PRESSED) != 0) {
if (pro != null) {
if (pro.price <= myPlayer.money) {
myPlayer.addSth(pro);
myPlayer.money -= pro.price;
}
} else {
setGameStatus(STATUS_POPMENU_CONFIRM);
}
}
break;
//出售物品界面
case STATUS_SALING:
Vector ps = null;
if (this.saleType == 1) {
if (isArm) {
ps = myPlayer.weaponVec;
} else {
ps = myPlayer.jacketVec;
}
} else {
ps = myPlayer.medicVec;
}
maxMenuIndex = ps.size();
handleMenuKeyBrowse(keyStates, maxMenuIndex);
if ((keyStates & LEFT_PRESSED) != 0
|| (keyStates & RIGHT_PRESSED) != 0) {
isArm = !isArm;
} else if ((keyStates & FIRE_PRESSED) != 0) {
if (curMenuIndex < ps.size()) {
pro = (Property) ps.elementAt(curMenuIndex);
myPlayer.removeSth(pro);
//卖东西,只能得到80%的收益
myPlayer.money += pro.price * 8 / 10;
} else {
setGameStatus(STATUS_POPMENU_CONFIRM);
}
}
break;
//战斗界面
case STATUS_FIGHTING:
if ((keyStates & LEFT_PRESSED) != 0) {
popSkill = false;
curMenuIndex2 = 0;
curMenuIndex = curMenuIndex - 1 >= 0 ? curMenuIndex - 1 : 2;
} else if ((keyStates & RIGHT_PRESSED) != 0) {
popSkill = false;
curMenuIndex2 = 0;
curMenuIndex = curMenuIndex + 1 > 2 ? 0 : curMenuIndex + 1;
} else if ((keyStates & FIRE_PRESSED) != 0) {
if (!popSkill) {
switch (curMenuIndex) {
case 0:
if (myPlayer.attackStatus == -1) {
myPlayer.attackStatus = 0;
}
break;
case 1:
//显示技能列表
this.popSkill = true;
break;
case 2:
//退出战斗
synchronized (engine) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -