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

📄 dynamenu.java

📁 J2ME Game Programming的隋书源代码
💻 JAVA
字号:
/**
 * Dynamically constructed menu class.
 */

import javax.microedition.lcdui.*;
import java.util.Vector;

public class DynaMenu extends List implements CommandListener
{
   private static final int MAIN_MENU = 100;
   private static final int SETTINGS_MENU = 110;
   private static final int AUTOFIRE_TOGGLE_MENU = 111;
   private static final int VIBRATE_TOGGLE_MENU = 112;
   private static final int STARFIELD_TOGGLE_MENU = 113;
   private static final int KEYSETUP_MENU = 120;
   private static final int LEFTKEY_MENU = 121;
   private static final int RIGHTKEY_MENU = 122;
   private static final int FIREKEY_MENU = 123;
   private static final int CONFIRM_NEW_GAME_MENU = 130;

   private Command back;
   private int currentMenu;

   public DynaMenu()
   {
      super("", IMPLICIT);
      goMainMenu();
      setCommandListener(this);
   }

   public void goMainMenu()
   {
      int savedLevel = World.getSavedLevel();

      Vector items = new Vector();
      items.addElement(Locale.getString("Main Menu.New Game"));
      if (StarAssault.getApp().hasAGameRunning() || savedLevel > 0)
         items.addElement(Locale.getString("Main Menu.Resume Game"));
      items.addElement(Locale.getString("Main Menu.Settings"));
      items.addElement(Locale.getString("Main Menu.Change Keys"));
      items.addElement(Locale.getString("Main Menu.Help"));
      items.addElement(Locale.getString("Main Menu.About"));

      String[] s = new String[items.size()];
      for (int i = 0; i < items.size(); i++)
         s[i] = (String) items.elementAt(i);

      setupMenu(Locale.getString("Main Menu.Title"), s,
                Locale.getString("General.Exit"));

      currentMenu = MAIN_MENU;
   }

   public void goSettingsMenu()
   {
      setupMenu(Locale.getString("Settings Menu.Title"),
                new String[]
                {
                   Locale.getString("Settings Menu.Auto fire"),
                   Locale.getString("Settings Menu.Shake"),
                   Locale.getString("Settings Menu.Star field")
                },
                Locale.getString("General.Back"));
      currentMenu = SETTINGS_MENU;
   }

   public void goKeySetupMenu()
   {
      setupMenu(Locale.getString("Key Setup Menu.Title"),
                new String[]
                {
                   Locale.getString("Key Setup Menu.Left"),
                   Locale.getString("Key Setup Menu.Right"),
                   Locale.getString("Key Setup Menu.Fire")
                },
                Locale.getString("General.Back"));
      currentMenu = KEYSETUP_MENU;
   }

   public void goToggleMenu(String title, int menuId, boolean on)
   {
      setupMenu(title,
                new String[]
                {
                   Locale.getString("General.On"),
                   Locale.getString("General.Off")
                }, null);
      if (on)
         setSelectedIndex(0, true);
      else
         setSelectedIndex(1, true);

      currentMenu = menuId;
   }

   public void goYesNoMenu(String title, int menuId, boolean on)
   {
      setupMenu(title,
                new String[]
                {
                   Locale.getString("General.Yes"),
                   Locale.getString("General.No")
                }, null);
      if (on)
         setSelectedIndex(0, true);
      else
         setSelectedIndex(1, true);

      currentMenu = menuId;
   }

   public void goKeyNumMenu(String title, int menuId, int currentNum)
   {
      setupMenu(title,
                new String[]
                {
                   Locale.getString("Key Num Menu.Num-0"),
                   Locale.getString("Key Num Menu.Num-1"),
                   Locale.getString("Key Num Menu.Num-2"),
                   Locale.getString("Key Num Menu.Num-3"),
                   Locale.getString("Key Num Menu.Num-4"),
                   Locale.getString("Key Num Menu.Num-5"),
                   Locale.getString("Key Num Menu.Num-6"),
                   Locale.getString("Key Num Menu.Num-7"),
                   Locale.getString("Key Num Menu.Num-8"),
                   Locale.getString("Key Num Menu.Num-9")
                }, null);
      setSelectedIndex(currentNum, true);

      currentMenu = menuId;
   }

   public void setupMenu(String title, String[] choices, String backCommandName)
   {
      setTitle(title);

      // clear the current list & command
      int s = size();
      for (int i = 0; i < s; i++)
         delete(0);
      removeCommand(back);

      // add the new choices
      for (int i = 0; i < choices.length; i++)
         append(choices[i], null);

      // add the back command, if they wanted one
      if (backCommandName != null)
      {
         back = new Command(backCommandName, Command.BACK, 1);
         addCommand(back);
      }
   }

   public void commandAction(Command command, Displayable displayable)
   {
      if (command == back)
      {
         if (currentMenu == SETTINGS_MENU) goMainMenu();
         if (currentMenu == KEYSETUP_MENU) goSettingsMenu();
      }

      if (command == List.SELECT_COMMAND)
      {
         String selected = getString(getSelectedIndex());
         switch (currentMenu)
         {
            case MAIN_MENU:
               if (selected.equals(Locale.getString("Main Menu.New game")))
               {
                  // if they already have a game running the confirm that
                  // they want to create a new game
                  if (StarAssault.getApp().hasAGameRunning())
                  {
                     goYesNoMenu(Locale.getString("General.Are you sure"), CONFIRM_NEW_GAME_MENU, false);
                  }
                  else
                     StarAssault.getApp().createNewGame();
               }

               if (selected.equals(Locale.getString("Main Menu.Resume game")))
               {
                  if (StarAssault.getApp().hasAGameRunning())
                     StarAssault.getApp().activateGameScreen();
                  else
                     StarAssault.getApp().loadGame();
               }
               if (selected.equals(Locale.getString("Main Menu.Settings")))
                  goSettingsMenu();
               if (selected.equals(Locale.getString("Main Menu.Change keys")))
                  goKeySetupMenu();
               if (selected.equals(Locale.getString("Main Menu.Help")))
               {
                  StarAssault.activateDisplayable(
                          new TextForm(this, Locale.getString("General.Help")));
               }
               if (selected.equals("About"))
               {
                  StarAssault.activateDisplayable(
                          new TextForm(this,
                                       Locale.getString("General.About")));
               }
               break;

            case CONFIRM_NEW_GAME_MENU:
               if (getBool(selected))
                  StarAssault.getApp().createNewGame();
               break;

               // SETTINGS...
            case SETTINGS_MENU:
               if (selected.equals(Locale.getString("Settings Menu.Auto fire")))
                  goToggleMenu(Locale.getString("Settings Menu.Auto fire"), AUTOFIRE_TOGGLE_MENU, StarAssault.getApp().isOptionAutoFire());
               if (selected.equals(Locale.getString("Settings Menu.Shake")))
                  goToggleMenu(Locale.getString("Settings Menu.Shake"), VIBRATE_TOGGLE_MENU, StarAssault.getApp().isOptionVibrate());
               if (selected.equals(Locale.getString("Settings Menu.Star field")))
                  goToggleMenu(Locale.getString("Settings Menu.Star field"), STARFIELD_TOGGLE_MENU, StarAssault.getApp().isOptionStarField());
               break;

            case AUTOFIRE_TOGGLE_MENU:
               StarAssault.getApp().setOptionAutoFire(getBool(selected));
               StarAssault.getApp().saveSettings();
               goSettingsMenu();
               break;
            case STARFIELD_TOGGLE_MENU:
               StarAssault.getApp().setOptionStarField(getBool(selected));
               StarAssault.getApp().saveSettings();
               goSettingsMenu();
               break;
            case VIBRATE_TOGGLE_MENU:
               StarAssault.getApp().setOptionVibrate(getBool(selected));
               StarAssault.getApp().saveSettings();
               goSettingsMenu();
               break;

               // KEYS...
            case KEYSETUP_MENU:
               if (selected.equals(Locale.getString("Key Setup Menu.Left")))
                  goKeyNumMenu(Locale.getString("Key Setup Menu.Left"), LEFTKEY_MENU, StarAssault.getApp().getLeftKeyNum());
               if (selected.equals(Locale.getString("Key Setup Menu.Right")))
                  goKeyNumMenu(Locale.getString("Key Setup Menu.Right"), RIGHTKEY_MENU, StarAssault.getApp().getRightKeyNum());
               if (selected.equals(Locale.getString("Settings Menu.Fire")))
                  goKeyNumMenu(Locale.getString("Settings Menu.Fire Key"), FIREKEY_MENU, StarAssault.getApp().getFireKeyNum());
               break;

            case LEFTKEY_MENU:
               StarAssault.getApp().setLeftKeyNum(getKeyNum(selected));
               StarAssault.getApp().saveSettings();
               goKeySetupMenu();
               break;

            case RIGHTKEY_MENU:
               StarAssault.getApp().setRightKeyNum(getKeyNum(selected));
               StarAssault.getApp().saveSettings();
               goKeySetupMenu();
               break;

            case FIREKEY_MENU:
               StarAssault.getApp().setFireKeyNum(getKeyNum(selected));
               StarAssault.getApp().saveSettings();
               goKeySetupMenu();
               break;
         }

      }

   }

   public static final boolean getBool(String s)
   {
      if (s.equals(Locale.getString("General.On"))) return true;
      if (s.equals(Locale.getString("General.Enable"))) return true;
      if (s.equals(Locale.getString("General.Yes"))) return true;
      return false;
   }

   public static final int getKeyNum(String s)
   {
      String n = s.substring(4, 5);
      return Integer.parseInt(n);
   }
}

⌨️ 快捷键说明

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