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

📄 navigator.java

📁 这是我在原来单位的时候写的一个坦克大战的J2ME游戏的代码,可以给其他作J2ME游戏的人作个参考
💻 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 + -