📄 menu.java
字号:
/**
* <p>Title: Transpanzer</p>
* <p>Description:
* You cannot remove this copyright and notice.
* You cannot use this file any part without the express permission of the author.
* All Rights Reserved</p>
* @author Jjyo
* @email jjyo@163.com
* @version 1.0.0
*/
import javax.microedition.lcdui.Canvas;
import KeyMask;
public class Menu {
public byte menuState;
public byte whichActive;
public static byte continueActive;
public static byte controlActive;
public char keyAction;
public static final byte MENU_NEWGAME = 0;
public static final byte MENU_LOADGAME = 1;
public static final byte MENU_VOL = 2;
public static final byte MENU_EXIT = 3;
public static final byte MENU_ABOUT = 4;
public static final byte MENU_SAVE=5;
public static final byte MENU_CONTINUE=6;
public static final byte CONTROL_HBALL=1;
public static final byte CONTROL_BOLT=2;
public static final byte CONTROL_MISSILE=3;
private static final byte DIRECTION_UP = 0;
private static final byte DIRECTION_DOWN = 1;
private static final byte DIRECTION_LEFT=0;
private static final byte DIRECTION_RIGHT=1;
private GameManage gm;
public Menu(GameManage gm) {
this.gm = gm;
controlActive=CONTROL_HBALL;
whichActive = MENU_NEWGAME;
continueActive=MENU_CONTINUE;
}
// 菜单的选择处理
private void menuSelect(int direct)
{
switch (direct) {
case DIRECTION_UP: // 方向向上时,根据当前的选择菜单条,循环处理
switch (whichActive) {
case MENU_NEWGAME:
whichActive = MENU_EXIT;
break;
case MENU_LOADGAME:
whichActive = MENU_NEWGAME;
break;
case MENU_VOL:
whichActive = MENU_LOADGAME;
break;
case MENU_ABOUT:
whichActive = MENU_VOL;
break;
case MENU_EXIT:
whichActive = MENU_ABOUT;
break;
}
break;
case DIRECTION_DOWN: // 方向向下,根据当前的选择菜单条,循环处理
switch (whichActive) {
case MENU_NEWGAME:
whichActive = MENU_LOADGAME;
break;
case MENU_LOADGAME:
whichActive = MENU_VOL;
break;
case MENU_VOL:
whichActive = MENU_ABOUT;
break;
case MENU_ABOUT:
whichActive = MENU_EXIT;
break;
case MENU_EXIT:
whichActive = MENU_NEWGAME;
break;
}
break;
}
}
private void continueMenu(int direct){
switch(direct){
case DIRECTION_UP:
switch(continueActive){
case MENU_CONTINUE:
continueActive=MENU_EXIT;
break;
case MENU_EXIT:
continueActive=MENU_CONTINUE;
break;
}
break;
case DIRECTION_DOWN:
switch(continueActive){
case MENU_CONTINUE:
continueActive=MENU_EXIT;
break;
case MENU_EXIT:
continueActive=MENU_CONTINUE;
break;
}
break;
}
}
public void continueAction(){
if ((keyAction & KeyMask.MASK_KEY_UP_FLAG) != 0) {
continueMenu(DIRECTION_UP);
keyAction &= ~KeyMask.MASK_KEY_UP_FLAG;
} else if ((keyAction & KeyMask.MASK_KEY_DOWN_FLAG) != 0) {
continueMenu(DIRECTION_DOWN);
keyAction &= ~KeyMask.MASK_KEY_DOWN_FLAG;
} else if ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) != 0) {
switch (continueActive) // 主菜单时,根据当前的选择作相当的响应
{
case MENU_EXIT: // 退出游戏
gm.menuExitGame();
break;
case MENU_CONTINUE:
gm.continueGame();
break;
}
keyAction &= ~KeyMask.MASK_KEY_FIRE_FLAG;
}
}
//控制面板的菜单处理
private void controlSeclet(int direct){
switch (direct) {
case DIRECTION_LEFT: // 方向向上时,根据当前的选择菜单条,循环处理
switch (controlActive) {
case CONTROL_HBALL:
controlActive = CONTROL_MISSILE;
break;
case CONTROL_BOLT:
controlActive = CONTROL_HBALL;
break;
case CONTROL_MISSILE:
controlActive = CONTROL_BOLT;
break;
}
break;
case DIRECTION_RIGHT: // 方向向下,根据当前的选择菜单条,循环处理
switch (controlActive) {
case CONTROL_HBALL:
controlActive = CONTROL_BOLT;
break;
case CONTROL_BOLT:
controlActive = CONTROL_MISSILE;
break;
case CONTROL_MISSILE:
controlActive = CONTROL_HBALL;
break;
}
break;
}
}
public void action() // 菜单的动作
{
if ((keyAction & KeyMask.MASK_KEY_UP_FLAG) != 0) {
menuSelect(DIRECTION_UP);
keyAction &= ~KeyMask.MASK_KEY_UP_FLAG;
} else if ((keyAction & KeyMask.MASK_KEY_DOWN_FLAG) != 0) {
menuSelect(DIRECTION_DOWN);
keyAction &= ~KeyMask.MASK_KEY_DOWN_FLAG;
} else if ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) != 0) {
switch (whichActive) // 主菜单时,根据当前的选择作相当的响应
{
case MENU_NEWGAME:
if(gm.isGameStart){
gm.menuSaveGame();
}else{
gm.menuBeginNewGame(); //这里是gm实现接口,开始新游戏
}
break;
case MENU_LOADGAME: // 载入游戏
gm.menuLoadGame();
break;
case MENU_VOL: // 声音处理
GameManage.isVolOn = !GameManage.isVolOn;
gm.menuAudio();
break;
case MENU_EXIT: // 退出游戏
gm.menuExitGame();
break;
case MENU_ABOUT: // 游戏相当信息
gm.menuAbout();
break;
}
keyAction &= ~KeyMask.MASK_KEY_FIRE_FLAG;
}
}
//控制面板的动作
public void controlAction(){
if ((keyAction & KeyMask.MASK_KEY_LEFT_FLAG) != 0) {
controlSeclet(DIRECTION_LEFT);
keyAction &= ~KeyMask.MASK_KEY_LEFT_FLAG;
} else if ((keyAction & KeyMask.MASK_KEY_RIGHT_FLAG) != 0) {
controlSeclet(DIRECTION_RIGHT);
keyAction &= ~KeyMask.MASK_KEY_RIGHT_FLAG;
}else if ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) != 0) {
switch (controlActive) // 主菜单时,根据当前的选择作相当的响应
{
case CONTROL_HBALL:
controlActive=CONTROL_HBALL;
break;
case CONTROL_BOLT:
controlActive=CONTROL_BOLT;
break;
case CONTROL_MISSILE:
controlActive=CONTROL_MISSILE;
break;
}
keyAction &= ~KeyMask.MASK_KEY_FIRE_FLAG;
}
}
// 键控的判断,这里使用的双标志键控处理
public void judgeKeyCode(int keyCode, int GameKeyCode) {
switch (GameKeyCode) {
case Canvas.FIRE: //确定
if (((keyAction & KeyMask.MASK_KEY_FIRE) == 0)
&& ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_FIRE | KeyMask.MASK_KEY_FIRE_FLAG;
}
break;
case Canvas.UP: //向上
if (((keyAction & KeyMask.MASK_KEY_UP) == 0)
&& ((keyAction & KeyMask.MASK_KEY_UP_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_UP | KeyMask.MASK_KEY_UP_FLAG;
}
break;
case Canvas.DOWN: //向下
if (((keyAction & KeyMask.MASK_KEY_DOWN) == 0)
&& ((keyAction & KeyMask.MASK_KEY_DOWN_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_DOWN | KeyMask.MASK_KEY_DOWN_FLAG;
}
break;
case Canvas.LEFT: //向左
if (((keyAction & KeyMask.MASK_KEY_LEFT) == 0)
&& ((keyAction & KeyMask.MASK_KEY_LEFT_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_LEFT | KeyMask.MASK_KEY_LEFT_FLAG;
}
break;
case Canvas.RIGHT: //向右
if (((keyAction & KeyMask.MASK_KEY_RIGHT) == 0)
&& ((keyAction & KeyMask.MASK_KEY_RIGHT_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_RIGHT
| KeyMask.MASK_KEY_RIGHT_FLAG;
}
break;
default:
switch (keyCode) {
case Canvas.KEY_NUM2: // up
if (((keyAction & KeyMask.MASK_KEY_UP) == 0)
&& ((keyAction & KeyMask.MASK_KEY_UP_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_UP | KeyMask.MASK_KEY_UP_FLAG;
}
break;
case Canvas.KEY_NUM3:
if(gm.isGameStart){
if ((((keyAction & KeyMask.MASK_KEY_CONTORL) == 0) && ((keyAction & KeyMask.MASK_KEY_CONTORL_FLAG) == 0))) {
keyAction |= KeyMask.MASK_KEY_CONTORL | KeyMask.MASK_KEY_CONTORL_FLAG;
gm.gameState=GameManage.GAMESTATE_GAMELOOP;
keyAction &= ~KeyMask.MASK_KEY_CONTORL_FLAG;
}
}
break;
case Canvas.KEY_NUM8: // down
if (((keyAction & KeyMask.MASK_KEY_DOWN) == 0)
&& ((keyAction & KeyMask.MASK_KEY_DOWN_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_DOWN
| KeyMask.MASK_KEY_DOWN_FLAG;
}
break;
case Canvas.KEY_NUM4: // left
if (((keyAction & KeyMask.MASK_KEY_LEFT) == 0)
&& ((keyAction & KeyMask.MASK_KEY_LEFT_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_LEFT
| KeyMask.MASK_KEY_LEFT_FLAG;
}
break;
case Canvas.KEY_NUM6: // right
if (((keyAction & KeyMask.MASK_KEY_RIGHT) == 0)
&& ((keyAction & KeyMask.MASK_KEY_RIGHT_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_RIGHT
| KeyMask.MASK_KEY_RIGHT_FLAG;
}
break;
case Canvas.KEY_NUM5: // ok
if (((keyAction & KeyMask.MASK_KEY_FIRE) == 0)
&& ((keyAction & KeyMask.MASK_KEY_FIRE_FLAG) == 0)) {
keyAction |= KeyMask.MASK_KEY_FIRE | KeyMask.MASK_KEY_FIRE_FLAG;
}
break;
}
break;
}
}
public void freeKey(int keyCode, int gameKeyCode) // 放开按键的处理
{
switch (gameKeyCode) {
case Canvas.FIRE:
keyAction &= ~KeyMask.MASK_KEY_FIRE;
break;
case Canvas.UP:
keyAction &= ~KeyMask.MASK_KEY_UP;
break;
case Canvas.DOWN:
keyAction &= ~KeyMask.MASK_KEY_DOWN;
break;
case Canvas.LEFT:
keyAction &= ~KeyMask.MASK_KEY_LEFT;
break;
case Canvas.RIGHT:
keyAction &= ~KeyMask.MASK_KEY_RIGHT;
break;
default:
switch (keyCode) {
case Canvas.KEY_NUM2: // up
keyAction &= ~KeyMask.MASK_KEY_UP;
break;
case Canvas.KEY_NUM3:
keyAction &= ~KeyMask.MASK_KEY_CONTORL;
break;
case Canvas.KEY_NUM8: // down
keyAction &= ~KeyMask.MASK_KEY_DOWN;
break;
case Canvas.KEY_NUM4: // left
keyAction &= ~KeyMask.MASK_KEY_LEFT;
break;
case Canvas.KEY_NUM6: // right
keyAction &= ~KeyMask.MASK_KEY_RIGHT;
break;
case Canvas.KEY_NUM5:
keyAction &= ~KeyMask.MASK_KEY_FIRE;
break;
}
break;
}
}
// 初始化菜单的状态,默认为主菜单
public void initMenu() {
whichActive = MENU_NEWGAME;
keyAction = 0;
}
public void initContineu(){
continueActive=MENU_CONTINUE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -