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

📄 menu.java

📁 一个锻炼记忆力的小游戏
💻 JAVA
字号:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.media.MediaException;
import javax.microedition.rms.RecordStore;

//import javax.microedition.lcdui.game.Sprite;

public class Menu {

	public final byte MAIN_MENU_SCREEN = 0;// 主菜单

	public final byte SAVE_STATE = 2;// 子菜单 -- 记录菜单

	public final byte SYSSET_STATE = 3;// 子菜单 -- 设置菜单

	public final byte HELP_STATE = 4;// 子菜单 -- 帮助菜单

	public final byte ABOUT_STATE = 5;// 子菜单 -- 关于菜单

	public final byte BILLBOARD_STATE = 6;// 子菜单 -- 排行榜菜单

	public final byte EXIT_STATE = 7;// 退出菜单

	public int state = MAIN_MENU_SCREEN; // 初始为主菜单

	private Image ageStart, ageTuBiao, ageGame, ageG;

	private GameMain gm;

	// public int xTB = 1, yTB = 0;

	public int i = 0; // 控制指针的晃动

	public int j = 0; // 控制指针在菜单蓝上移动

	int zuobiao;

	public Sound sound;

	RecordStore rs;

	byte about[];

	String story[];

	String[] string;

	public static boolean temp = false;

	public Menu(GameMain gm) {
		this.gm = gm;
		loadMenuImages();
		main_x = (gm.WIDTH - ageStart.getWidth()) / 2;
		main_y = gm.HEIGHT - 24;

		string = splitLongStringIntoStringArray("/menu/about.txt", Font
				.getDefaultFont(), 1);
		sound = new Sound();
		sound.iniSound("/sound/start.mid");
		try {
			sound.player.start();
		} catch (MediaException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
	}

	public final void loadMenuImages() {
		try {
			if (ageTuBiao == null)
				ageTuBiao = Image.createImage("/images/tubiao.png");
			if (ageStart == null)
				ageStart = Image.createImage("/images/main.png");
			if (ageGame == null)
				ageGame = Image.createImage("/images/torn_world.png");
			if (ageG == null)
				ageG = Image.createImage("/images/map2.png");
			// if (ageGame1 == null)
			// ageGame1 = Image.createImage("/images/corner.png");
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public final void freeMenuImages() {
		ageTuBiao = null;
		ageStart = null;
		ageGame = null;
	}

	private final void drawMainMenu(int x, int y) {// 根据给的X,Y来绘制主菜单
		// 绘制背景
		zuobiao = 120 + j * (ageStart.getHeight() / 6);
		gm.gameGraphics.setColor(0, 0, 0); // 刷屏
		gm.gameGraphics.fillRect(0, 0, gm.WIDTH, gm.HEIGHT);
		gm.gameGraphics.drawImage(ageG, 0, 0, 0);
		gm.gameGraphics.drawImage(ageGame, 45, 20, 0);

		gm.gameGraphics.drawImage(ageStart, 95, 120, 0);

		gm.gameGraphics.drawRegion(ageTuBiao, ageTuBiao.getWidth() / 3 * i, 0,
				ageTuBiao.getWidth() / 3, ageTuBiao.getHeight(), 0, 64,
				zuobiao, 0);
		gm.gameGraphics.drawRegion(ageTuBiao, ageTuBiao.getWidth() / 3 * i, 0,
				ageTuBiao.getWidth() / 3, ageTuBiao.getHeight(), 2, 142,
				zuobiao, 0);
	}

	private final void drawMainHelp() {
		gm.gameGraphics.setColor(255,255,255); // 刷屏
		gm.gameGraphics.fillRect(0, 0, gm.WIDTH, gm.HEIGHT);

		gm.gameGraphics.setColor(0, 0, 255);
		gm.gameGraphics.drawString("向 上 按 键 2", 70, 60, 0);

		gm.gameGraphics.drawString("向 下 按 键 8", 70, 90, 0);

		gm.gameGraphics.drawString("向 左 按 键 4", 70, 120, 0);

		gm.gameGraphics.drawString("向 右 按 键 6", 70, 150, 0);

		gm.gameGraphics.drawString("翻 牌 按 键 5", 70, 180, 0);

		gm.gameGraphics.drawString("返回", gm.WIDTH - 30, gm.HEIGHT - 20, 0);
	}

	private final void drawMainSysset() {
		gm.gameGraphics.setColor(255,255, 255); // 刷屏
		gm.gameGraphics.fillRect(0, 0, gm.WIDTH, gm.HEIGHT);

		gm.gameGraphics.setColor(0, 0, 255);

		gm.gameGraphics.drawString("按 * 键 开 启 声 音", 70, 100, 0);

		gm.gameGraphics.drawString("按 # 键 暂 停 声 音", 70, 150, 0);

		gm.gameGraphics.drawString("返回", gm.WIDTH - 30, gm.HEIGHT - 20, 0);
	}

	public final void render() {
		switch (state) {
		case MAIN_MENU_SCREEN:
			drawMainMenu(main_x, main_y);// 根据给的X,Y来绘制主菜单
			break;
		case HELP_STATE:
			drawMainHelp();
			break;

		case SYSSET_STATE:
			drawMainSysset();
			break;
		case ABOUT_STATE:
			gm.gameGraphics.setColor(255, 255, 255);
			gm.gameGraphics.fillRect(0, 0, gm.WIDTH, gm.HEIGHT);

			gm.gameGraphics.setColor(0, 0, 0);
			gm.gameGraphics.drawString("返回", gm.WIDTH - 30, gm.HEIGHT - 20, 0);

			for (int i = 0; i < string.length; i++) {
				gm.gameGraphics.drawString(string[i], 0, Font.getDefaultFont()
						.getHeight()
						* i, 0);
				gm.gameGraphics.drawString("返回", gm.WIDTH - 30, gm.HEIGHT - 20,
						0);
			}
		}
	}

	private String[] splitLongStringIntoStringArray(String StrURL, Font font,
			int width) {
		InputStream is = this.getClass().getResourceAsStream(StrURL);
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int ch;
		try {
			while ((ch = is.read()) != -1) {
				baos.write(ch);
			}
		} catch (IOException e) {
			System.out.println("无法读取资源文件");
		}
		String longString = new String(baos.toByteArray());

		if (font.stringWidth(longString) <= width) {
			return new String[] { longString };
		} else {
			int stringLength = longString.length();
			char[] chars = longString.toCharArray();

			Vector v = new Vector();
			int offset = 0, length = 1;
			while (offset + length < stringLength) {
				if ((chars[offset + length] != '\n')) { // 根据文本的最后一个回车符进行分行
					length++;
				} else {
					v.addElement(longString.substring(offset, offset + length));
					offset = offset + length;
					length = 1;
				}
			}
			// while (offset + length < stringLength) { //根据屏幕的宽度进行分行
			// if (font.charsWidth(chars, offset, length) < width) {
			// length++;
			// } else {
			// v.addElement(longString.substring(offset, offset + length));
			// offset = offset + length;
			// length = 1;
			// }
			// }
			if (offset < stringLength) {
				v.addElement(longString.substring(offset));
			}
			String[] strings = new String[v.size()];
			v.copyInto(strings);
			return strings;
		}
	}

	public void update(long time_elapsed) {
		selfTimElapsed += time_elapsed;
		switch (state) {
		case MAIN_MENU_SCREEN:
			if (++i >= 2) {
				i = 0;
			}
			if (selfTimElapsed < 500)
				sword_x_delta = 3;
			else if (selfTimElapsed < 1000) {
				sword_x_delta = 0;
			} else {
				selfTimElapsed = 0;
			}
			break;
		case SYSSET_STATE:
			break;
		case HELP_STATE:
			break;
		case ABOUT_STATE:
			break;
		}
	}

	public void keyPressed(int action) {

		switch (state) {
		case MAIN_MENU_SCREEN:
			switch (action) {
			case GameCanvas.KEY_NUM2:
			case GameCanvas.UP:
				if (j <= 0) {
					j = 5;

				} else {
					--j;

				}
				break;
			case GameCanvas.KEY_NUM8:
			case GameCanvas.DOWN:
				if (j >= 5) {
					j = 0;
				} else {
					++j;
					// yTB = yTB + zuobiao;

				}
				break;
			case GameCanvas.KEY_NUM5:
			case GameCanvas.FIRE:
				switch (j) {
				case 0:
					temp = false;
					gm.stateChange(GameMain.STATE_PLAY);

					break;
				case 1:
					temp = true;
					gm.stateChange(GameMain.STATE_PLAY);
					break;
				case 2:
					state = SYSSET_STATE;
					break;
				case 3:
					state = HELP_STATE;
					break;
				case 4:
					state = ABOUT_STATE;
					break;
				case 5:
					gm.exit();
					break;
				}
				break;
			}
		case HELP_STATE:
			switch (action) {
			case -7:
				state = MAIN_MENU_SCREEN;
				break;
			case GameCanvas.KEY_STAR:
				try {
					sound.player.start();
				} catch (MediaException e) {
					// TODO 自动生成 catch 块
					e.printStackTrace();
				}
				break;
			case GameCanvas.KEY_POUND:
				try {
					sound.player.stop();
				} catch (MediaException e) {
					// TODO 自动生成 catch 块
					e.printStackTrace();
				}
				break;
			}
			break;
			
		case SYSSET_STATE:
			switch (action) {
			case -7:
				state = MAIN_MENU_SCREEN;
				break;
			}
			
		case ABOUT_STATE:
			switch (action) {
			case -7:
				state = MAIN_MENU_SCREEN;
				break;
			}
			break;
		}
	}

	public void keyReleased(int action) { // 按键释放后设置ROLE状态为停止
		keyPressed(action);
	}

	long selfTimElapsed;

	int main_x;

	int main_y;

	int sword_x_delta;

	int iSelect; // 当前菜单选项值
}

⌨️ 快捷键说明

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