package snakegame;
import javax.microedition.lcdui.*;
/**
* 主菜单类
*
* @author kf156(亚日)
*
*/
public class MainMenu {
public static final byte MAINMENU_OPEN = 0;// 选项界面
// public static final byte MAINMENU_CONTINUE = 1;// 继续游戏
public static final byte MAINMENU_SETING = 1;// 游戏设置
public static final byte MAINMENU_HELLP = 2;// 游戏帮助
public static final byte MAINMENU_ABOUT = 3;// 游戏关于
public static final byte MAINMENU_TOP = 4;// 排行榜
public static final byte MAINMENU_EXIT = 5;// 退出游戏
public int mm_state = 0;// 状态
public int index, level_Index;// 索引、难度分数索引
public static int set_Index;// 难度设置索引
public String[] levelStr = { "四平八稳", "眼疾手快", "箭步如飞" };
public MainMenu() {
}
public void init() {
mm_state = MAINMENU_OPEN;// 选项界面
// 图片加载
if (Tools.mmImg[0] == null)
try {
Tools.mmImg[0] = Image.createImage("/images/button.png");
Tools.mmImg[1] = Image.createImage("/images/main.png");
Tools.mmImg[2] = Image.createImage("/images/splash.png");
Tools.mmImg[3] = Image.createImage("/images/ground.png");
Tools.mmImg[4] = Image.createImage("/images/number1.png");
Tools.mmImg[5] = Image.createImage("/images/main1.png");
Tools.mmImg[6] = Image.createImage("/images/main2.png");
Tools.mmImg[7] = Image.createImage("/images/set.png");
Tools.mmImg[8] = Image.createImage("/images/number.png");
} catch (Exception e) {
System.out.println("load main menu image error:" + e);
}
}
/**
* 逻辑判断
*
* @param keycode
*/
public void update(int keycode) {
switch (mm_state) {
case MAINMENU_OPEN:// 选项界面
switch (keycode) {
case GameCanvas.KEY_UP:
index--;
if (index < 0)
index = 5;
break;
case GameCanvas.KEY_DOWN:
index++;
if (index > 5)
index = 0;
break;
case GameCanvas.KEY_SOFT3:
case GameCanvas.KEY_SOFT1:
if (index == 0) {// 进入游戏
// 根据难易度设置
if (set_Index == 0)
GameCanvas.gc.speed = 120;
else if (set_Index == 1)
GameCanvas.gc.speed = 90;
else if (set_Index == 2)
GameCanvas.gc.speed = 50;
GameCanvas.getGameCanvas().setNextState(
GameCanvas.SCREEN_GAMEWORLD);
} else if (index == MAINMENU_EXIT) {// 退出
GameMIDlet.quitApp();
} else {
mm_state = index;// 进入相应界面
}
break;
}
break;
case MAINMENU_SETING:// 难度设置
switch (keycode) {
case GameCanvas.KEY_UP:
set_Index--;
if (set_Index < 0)
set_Index = 2;
break;
case GameCanvas.KEY_DOWN:
set_Index++;
if (set_Index > 2)
set_Index = 0;
break;
case GameCanvas.KEY_SOFT3:
case GameCanvas.KEY_SOFT1:
mm_state = MAINMENU_OPEN;
break;
}
break;
case MAINMENU_HELLP:// 帮助
if (keycode == GameCanvas.KEY_SOFT1
|| keycode == GameCanvas.KEY_SOFT3) {
mm_state = MAINMENU_OPEN;
}
break;
case MAINMENU_ABOUT:// 关于
if (keycode == GameCanvas.KEY_SOFT1
|| keycode == GameCanvas.KEY_SOFT3) {
mm_state = MAINMENU_OPEN;
}
break;
case MAINMENU_TOP:// 排行榜
switch (keycode) {
case GameCanvas.KEY_LEFT:
level_Index--;
if (level_Index < 0)
level_Index = 2;
break;
case GameCanvas.KEY_RIGHT:
level_Index++;
if (level_Index > 2)
level_Index = 0;
break;
case GameCanvas.KEY_SOFT3:
case GameCanvas.KEY_SOFT1:
mm_state = MAINMENU_OPEN;
break;
}
break;
}
}
/**
* 绘制
*
* @param g
*/
public void draw(Graphics g) {
// 背景填充
g.setColor(0);
g.fillRect(0, 0, Tools.SCREEN_W, Tools.SCREEN_H);
// 设置字体
g.setFont(Tools.font);
switch (mm_state) {
case MAINMENU_OPEN:// 选项界面
// 背景
g.drawImage(Tools.mmImg[2], 0, 0, 20);
// 选项
g.drawImage(Tools.mmImg[1], 20, 70, 20);
// 当前索引
Tools.drawClip(g, 20, 70 + index * 12, 49, 12, index,
Tools.mmImg[5]);
break;
case MAINMENU_SETING:// 设置界面
// 标题
Tools.drawClip(g, (Tools.SCREEN_W >> 1) - 50, 20, 100, 24, 1,
Tools.mmImg[6]);
// 绘制难度
for (int i = 0; i < levelStr.length; i++) {
if (i == set_Index)
g.setColor(0xff0000);
else
g.setColor(0xffffff);
g.drawString(levelStr[i], Tools.SCREEN_W >> 1, 80 + i * 50, 17);
}
break;
case MAINMENU_HELLP:// 帮助
// 标题
Tools.drawClip(g, Tools.SCREEN_W / 2 - 50, 20, 100, 24, 0,
Tools.mmImg[6]);
// 帮助文档
g.setColor(0xffffff);
Tools.drawWrapString(g, Tools.helpStr, 3, 70, Tools.SCREEN_W,
Tools.font);
break;
case MAINMENU_ABOUT:// 关于
// 标题
Tools.drawClip(g, Tools.SCREEN_W / 2 - 50, 20, 100, 24, 2,
Tools.mmImg[6]);
// 感言
g.setColor(0xffffff);
Tools.drawWrapString(g, Tools.aboutStr, 3, 70, Tools.SCREEN_W,
Tools.font);
break;
case MAINMENU_TOP:// 高分榜 当时还不会RMS,所以这里显示的是假数据
// 标题
Tools.drawClip(g, Tools.SCREEN_W / 2 - 50, 20, 100, 24, 3,
Tools.mmImg[6]);
//
g.setColor(0xfff000);
g.drawString("名次 名字 分数", Tools.SCREEN_W >> 1, 90, 17);
Tools.drawClip(g, 30, 60, 180, 15, 0, Tools.mmImg[7]);
if (level_Index == 0) {
Tools.drawClip(g, 30, 60, 60, 15, 3, Tools.mmImg[7]);
// 分数
g.setColor(0xffffff);
g.drawString("1 kf156 1500", Tools.SCREEN_W >> 1, 120, 17);
g.drawString("2 kf156 1380", Tools.SCREEN_W >> 1, 140, 17);
g.drawString("3 kf156 1290", Tools.SCREEN_W >> 1, 160, 17);
g.drawString("4 kf156 1120", Tools.SCREEN_W >> 1, 180, 17);
g.drawString("5 kf156 1070", Tools.SCREEN_W >> 1, 200, 17);
} else if (level_Index == 1) {
Tools.drawClip(g, 90, 60, 60, 15, 4, Tools.mmImg[7]);
// 分数
g.setColor(0xffffff);
g.drawString("1 kf156 1340", Tools.SCREEN_W >> 1, 120, 17);
g.drawString("2 kf156 1320", Tools.SCREEN_W >> 1, 140, 17);
g.drawString("3 kf156 1150", Tools.SCREEN_W >> 1, 160, 17);
g.drawString("4 kf156 1120", Tools.SCREEN_W >> 1, 180, 17);
g.drawString("5 kf156 1050", Tools.SCREEN_W >> 1, 200, 17);
} else if (level_Index == 2) {
Tools.drawClip(g, 150, 60, 60, 15, 5, Tools.mmImg[7]);// 分数
g.setColor(0xffffff);
g.drawString("1 kf156 1240", Tools.SCREEN_W >> 1, 120, 17);
g.drawString("2 kf156 1220", Tools.SCREEN_W >> 1, 140, 17);
g.drawString("3 kf156 1160", Tools.SCREEN_W >> 1, 160, 17);
g.drawString("4 kf156 1070", Tools.SCREEN_W >> 1, 180, 17);
g.drawString("5 kf156 1030", Tools.SCREEN_W >> 1, 200, 17);
}
break;
}
if (mm_state != MAINMENU_OPEN) {// 非选项菜单时显示
// 绘制下边界
g.setColor(182, 182, 170);
g.fillRect(0, Tools.SCREEN_H - 15, Tools.SCREEN_W, 15);// 设置下边界高15
g.setColor(255, 255, 255);
g.fillRect(0, Tools.SCREEN_H - 14, Tools.SCREEN_W, 1);
g.setColor(106, 106, 106);
g.fillRect(0, Tools.SCREEN_H - 15, Tools.SCREEN_W, 1);
// 绘制软键
if (mm_state == MAINMENU_SETING) {// 当为设置时,显示保存设置
Tools.drawClip(g, 9, Tools.SCREEN_H - 15, 45, 15, 3,
Tools.mmImg[0]);
} else {// 回主菜单
Tools.drawClip(g, 9, Tools.SCREEN_H - 15, 45, 15, 0,
Tools.mmImg[0]);
}
}
}
}