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

📄 menu.java

📁 经典FC游戏《超惑星战记》的J2ME版本!!功能基本上都实现了
💻 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 + -