📄 navigator.java
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.* ;
//Form 之间的流程控制
public class Navigator implements Runnable{
final public static int MAIN_SCREEN = 1 ; //主菜单
final public static int GAME_SCREEN = 2; //战斗界面
final public static int SET_SCREEN = 3;//游戏基本设置
final public static int GAME_HELP_SCREEN = 4;//游戏帮助界面
final public static int COPY_SCREEN = 5;//关于游戏界面
final public static int NEW_GAME_SCREEN = 6;//开始新游戏
final public static int GAME_PROGRESS_SCREEN = 7;
final public static int TANK_FACTORY_SCREEN = 8;//坦克工厂
final public static int CHOOSE_TANK_SCREEN = 9;//坦克选择
final public static int GAME_FAILED_SCREEN = 10;//游戏失败菜单
final public static int LOAD_RECORD_SCREEN=11;
final public static int STAGE_CLEAR_SCREEN=12;//过
final public static int ABOUT_GAME_SCREEN=13;//过
public static MIDlet midlet ;
public static Display display;
public static int current;
private static boolean m_threadAlive = true;
private static Thread m_thread;
private static Navigator instance;
synchronized public static Navigator getInstance() {
if (instance == null)
instance = new Navigator();
return instance;
}
//启动一个GAME总线程
public void start() {
m_threadAlive = true;
if (null == m_thread) {
m_thread = new Thread(this);
m_thread.start();
}
}
public static void pause(){
try {
m_threadAlive = false;
m_thread=null;
switch (current) {
case MAIN_SCREEN:
GameOptions.pause();
break;
case GAME_SCREEN:
BattleCanvas.pause();
break;
case SET_SCREEN:
break;
case GAME_HELP_SCREEN:
break;
case COPY_SCREEN:
break;
case NEW_GAME_SCREEN://进入战斗
EnterIntoWarScreen.pause();
break;
case GAME_PROGRESS_SCREEN:
break;
case TANK_FACTORY_SCREEN:
TankFactoryScreen.pause();
break;
case CHOOSE_TANK_SCREEN:
ChooseTankScreen.pause();
break;
case GAME_FAILED_SCREEN:
GameFailedScreen.pause();
break;
case LOAD_RECORD_SCREEN:
EnterIntoWarScreen.pause();
break;
case STAGE_CLEAR_SCREEN:
StageClearScreen.pause();
break;
case ABOUT_GAME_SCREEN:
AboutTheGameScreen.pause();
break;
}
instance=null;
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void stop(){
m_threadAlive = false;
m_thread=null;
switch (current) {
case MAIN_SCREEN:
GameOptions.stop();
break;
case GAME_SCREEN:
BattleCanvas.stop();
break;
case SET_SCREEN:
SetScreen.stop();
break;
case GAME_HELP_SCREEN:
break;
case COPY_SCREEN:
display.setCurrent(CopyScreen.getInstance());
break;
case NEW_GAME_SCREEN://进入战斗
EnterIntoWarScreen.stop();
break;
case GAME_PROGRESS_SCREEN:
GameProgressScreen.stop();
break;
case TANK_FACTORY_SCREEN:
TankFactoryScreen.stop();
break;
case CHOOSE_TANK_SCREEN:
ChooseTankScreen.stop();
break;
case GAME_FAILED_SCREEN:
GameFailedScreen.stop();
break;
case LOAD_RECORD_SCREEN:
EnterIntoWarScreen.stop();
break;
case STAGE_CLEAR_SCREEN:
StageClearScreen.stop();
break;
case ABOUT_GAME_SCREEN:
AboutTheGameScreen.stop();
break;
}
instance=null;
}
public void run(){
int timeStep = 100;
while (m_threadAlive) {
long start = System.currentTimeMillis();
switch (current) {
case MAIN_SCREEN:
GameOptions.getInstance().run();
break;
case NEW_GAME_SCREEN:
EnterIntoWarScreen.getInstance().run();
break;
case TANK_FACTORY_SCREEN:
TankFactoryScreen.getInstance().run();
break;
case GAME_SCREEN:
BattleCanvas.getInstance().run();
break;
case GAME_HELP_SCREEN:
HelpScreen.getInstance().run();
break;
case CHOOSE_TANK_SCREEN:
ChooseTankScreen.getInstance().run();
break;
case GAME_FAILED_SCREEN:
GameFailedScreen.getInstance().run();
break;
case LOAD_RECORD_SCREEN:
EnterIntoWarScreen.getInstance().run();
break;
case STAGE_CLEAR_SCREEN:
StageClearScreen.getInstance().run();
break;
case GAME_PROGRESS_SCREEN:
GameProgressScreen.getInstance().run();
break;
case SET_SCREEN:
SetScreen.getInstance().run();
break;
case ABOUT_GAME_SCREEN:
AboutTheGameScreen.getInstance().run();
break;
}
//calculate memory used
long usedMemory=Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
if(usedMemory>=70*1024){
System.gc();
}
long end = System.currentTimeMillis();
int duration = (int)(end - start);
if (duration < timeStep) {
try { Thread.sleep(timeStep - duration); }
catch (InterruptedException ie) { stop(); }
}
}
}
public static void show(Object obj) {
switch (current) {
case MAIN_SCREEN:
display.setCurrent(GameOptions.getInstance());
break;
case GAME_SCREEN:
display.setCurrent(BattleCanvas.getInstance());
break;
case SET_SCREEN:
display.setCurrent(SetScreen.getInstance());
break;
case GAME_HELP_SCREEN:
display.setCurrent(HelpScreen.getInstance());
break;
case COPY_SCREEN:
display.setCurrent(CopyScreen.getInstance());
break;
case NEW_GAME_SCREEN://进入战斗
display.setCurrent(EnterIntoWarScreen.getInstance());
break;
case GAME_PROGRESS_SCREEN:
display.setCurrent(GameProgressScreen.getInstance());
break;
case TANK_FACTORY_SCREEN:
display.setCurrent(TankFactoryScreen.getInstance());
break;
case CHOOSE_TANK_SCREEN:
display.setCurrent(ChooseTankScreen.getInstance());
break;
case GAME_FAILED_SCREEN:
display.setCurrent(GameFailedScreen.getInstance());
break;
case LOAD_RECORD_SCREEN:
display.setCurrent(EnterIntoWarScreen.getInstance());
break;
case STAGE_CLEAR_SCREEN:
display.setCurrent(StageClearScreen.getInstance());
break;
case ABOUT_GAME_SCREEN:
display.setCurrent(AboutTheGameScreen.getInstance());
break;
}
}
public static void flow(String cmd) {
switch (current) {
case CHOOSE_TANK_SCREEN:
if (cmd.equals("进入战斗")) {
current = GAME_SCREEN;
BattleCanvas.getInstance().start();
show(null);
}
else if (cmd.equals("返回")) {
current = NEW_GAME_SCREEN;
show(null);
}
break;
//新游戏主界面
case MAIN_SCREEN:
if (cmd.equals("recommend")) {
current=SET_SCREEN;
SetScreen.setScreenMode(SetScreen.GAME_PREVIEW_SCREEN);
show(null);
}
//继续游戏主页面
else if (cmd.equals("enterintowar")) {
current = NEW_GAME_SCREEN;
EnterIntoWarScreen.setTitleIndex(DrawTools.TITLE_INDEX_ENTERINTOWAR);
show(null);
}
else if (cmd.equals("战斗调配")) {
current = SET_SCREEN;
show(null);
}
else if (cmd.equals("training")) {
current = GAME_HELP_SCREEN;
HelpScreen.setBackScreen(MAIN_SCREEN);
show("游戏帮助");
}
else if (cmd.equals("坦克工厂")) {
current = TANK_FACTORY_SCREEN;
show(null);
}
else if (cmd.equals("aboutthegame")) {
current=ABOUT_GAME_SCREEN;
show(null);
}
else if (cmd.equals("back")) {
stop();
TankMain.quitApp();
}
break;
case NEW_GAME_SCREEN:
case LOAD_RECORD_SCREEN:
if (cmd.equals("确定")) {
current = GAME_SCREEN;
show(null);
}
else if (cmd.equals("back")) {
current = GAME_SCREEN;
BattleCanvas.setPopupMenu(true);
BattleCanvas.getInstance().pause();
show(null);
}else if(cmd.equals("backtofailed")){
current =GAME_FAILED_SCREEN;
show(null);
}
else if (cmd.equals("loadrecord")) {
current=GAME_SCREEN;
BattleCanvas.getInstance().start();
show(null);
}
else if (cmd.equals("newgame")) {
current = CHOOSE_TANK_SCREEN;
show(null);
}else if(cmd.equals("saverecord")){
current=TANK_FACTORY_SCREEN;
show(null);
}
else if(cmd.equals("backtomainmenu")){
current=MAIN_SCREEN;
show(null);
}
break;
case SET_SCREEN:
if (cmd.equals("confirm")) {
current = MAIN_SCREEN;
show(null);
}else if(cmd.equals("soundon")||cmd.equals("soundoff")){
current = SET_SCREEN;
SetScreen.setScreenMode(SetScreen.GAME_START_SCREEN);
show(null);
}else if (cmd.equals("logscreen")) {
current = SET_SCREEN;
SetScreen.setScreenMode(SetScreen.SOUND_SCREEN);
show(null);
}else if(cmd.equals("gamestart")){
current=MAIN_SCREEN;
show(null);
}
break;
case GAME_HELP_SCREEN:
if (cmd.equals("确定")) {
current = MAIN_SCREEN;
show(null);
}
else if (cmd.equals("返回")) {
current = MAIN_SCREEN;
show(null);
}else if(cmd.equals("backtobattle")){
current=GAME_SCREEN;
show(null);
BattleCanvas.pause();
}
break;
case TANK_FACTORY_SCREEN:
if (cmd.equals("original")) {
//go to next stage
current = TANK_FACTORY_SCREEN;
show(null);
}else if(cmd.equals("saverecord")){
current= LOAD_RECORD_SCREEN;
EnterIntoWarScreen.setTitleIndex(DrawTools.TITLE_INDEX_SAVERECORD);
show(null);
}
else if (cmd.equals("back")) {
current = STAGE_CLEAR_SCREEN;
show(null);
}
break;
case GAME_SCREEN:
if (cmd.equals("菜单")) {
}
else if (cmd.equals("backwar")) {
BattleCanvas.getInstance().start();
}
else if (cmd.equals("loadprogress")) {
current=LOAD_RECORD_SCREEN;
EnterIntoWarScreen.setBackScreen(GAME_SCREEN);
EnterIntoWarScreen.setTitleIndex(DrawTools.TITLE_INDEX_LOADRECORD);
show(null);
}
else if (cmd.equals("training")) {
current = GAME_HELP_SCREEN;
HelpScreen.setBackScreen(GAME_SCREEN);
show(null);
}
else if (cmd.equals("music")) {
show(null);
}
else if (cmd.equals("backmenu")) {
current=MAIN_SCREEN;
show(null);
}
else if (cmd.equals("gamefailed")) {
current =GAME_FAILED_SCREEN;
show(null);
} else if (cmd.equals("stageclear")) {
current =STAGE_CLEAR_SCREEN;
show(null);
}
break;
case GAME_FAILED_SCREEN:
if (cmd.equals("readrecord")) {
current = LOAD_RECORD_SCREEN;
EnterIntoWarScreen.setTitleIndex(DrawTools.TITLE_INDEX_LOADRECORD);
EnterIntoWarScreen.setBackScreen(GAME_FAILED_SCREEN);
show(null);
}
else if (cmd.equals("backmenu")) {
current = MAIN_SCREEN;
show(null);
}
break;
case STAGE_CLEAR_SCREEN:
//go to next stage
if (cmd.equals("continue")) {
current=GAME_SCREEN;
BattleCanvas.getInstance().start();
show(null);
}else if (cmd.equals("factory")) {
current=TANK_FACTORY_SCREEN;
show(null);
}
break;
case GAME_PROGRESS_SCREEN:
if (cmd.equals("tobackmenu")) {
current=GameProgressScreen.getBackMenu();
show(null);
}
break;
case ABOUT_GAME_SCREEN:
if (cmd.equals("back")) {
current=MAIN_SCREEN;
show(null);
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -