📄 menu.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 + -