?? helpscreen.java
字號:
/*
* Created on 2006-5-20
*
*/
package com.thinkenjoy.feitian.screen;
import java.util.Vector;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import com.thinkenjoy.control.ActorCanvas;
import com.thinkenjoy.control.Control;
import com.thinkenjoy.control.KeyMap;
import com.thinkenjoy.control.ThreadCanvas;
import com.thinkenjoy.tools.Tools;
/**
*
* 幫助界面
*/
public class HelpScreen extends ActorCanvas {
private static final byte MAIN_STAGE = 0;
private static final byte GAME_INFO_STAGE = 1;
private static final byte CONTROL_INFO_STAGE = 2;
private static final byte MUSIC_STAGE = 3;
private static final int TEXTBOX_START_X = 10;
private static final int TEXTBOX_START_Y = 25;
private static final int TEXTBOX_WIDTH = ThreadCanvas.SCREEN_WIDTH - 20;
private static final int TEXTBOX_HEIGHT = ThreadCanvas.SCREEN_HEIGHT - 50;
private String stageStringSet[];
private String mainStringSet[];
private String gameInfo;
private String musicStringSet[];
private String leftButton;
private String rightButton;
private int mainStartX;
private int mainStartY;
private int musicStartY;
private byte gameStage;
private byte selectIndex;
private boolean newStage;
// /**
// * 裝主界面文字的容器
// */
// private Vector mainVector;
/**
* 裝游戲介紹界面文字的容器
*/
private Vector gameInfoVector;
private Vector controlInfoVector;
private byte fontHeight;
private boolean right = true;
/**
* 記錄文字上下移動的距離
*/
private int updowns;
//private Vector sb;
private int textHeight;
private int flashArrowDelay;
private int arrowColor;
private int buttonWidth;
private boolean tempMusic;
private int tempVolumn;
// /**
// * 裝聲音控制界面文字的容器
// */
// private Vector musicVector;
/**
*
*/
public HelpScreen() {
gameStage = MAIN_STAGE;
gameInfo = "在古老的阿可巴拉城里,住著一個美貌的公主。她的美麗遠近聞名,同時又心地善良。所以得到了全城人民的喜愛。在城里有個賣地毯的小子:阿辛,他雖然是處在社會底層,并且是個窮光蛋。但是他也被公主的美貌所打動,深深的愛著公主。公主也有個調皮的弟弟:法里赫,這個小子雖然出生在皇家,但是卻為人豪邁,完全沒有王子的架子。在一次偶然的出行中,結識了阿辛,也就是因為他,阿辛才見到了公主的美貌,并為之打動。阿可巴拉城的衛隊長:杜阿是個堅強的男人,擁有鋼鐵般的意志與身體,并為人公正無私,他一直在恪盡職守的完成著自己的使命。魔術師:賽西斯,擁有最強大的魔法的宮廷魔法師,也愛慕著公主,但為人小氣,心胸狹窄。有一天,魔神卡巴特突然出現在阿可巴拉城,并且偽裝成一個賣鸚鵡的人混進宮中,劫走了美麗的公主,并要娶她為妻。于是上述的4人為了救出公主而展開了冒險。當然最終公主是被救回,并且魔王卡巴特也被封印在了神燈里。";
stageStringSet = new String[] { "==游 戲 幫 助==", "==游 戲 簡 介==",
"==操 作 說 明==", "==聲 音 控 制==" };
mainStringSet = new String[] { "游 戲 說 明"};//, "聲 音 控 制" };
musicStringSet = new String[] { "音 樂", "音 量", "開", "關" };
mainStartX = ThreadCanvas.SCREEN_WIDTH / 2
- Font.getDefaultFont().stringWidth(mainStringSet[0]) / 2;
mainStartY = ThreadCanvas.SCREEN_HEIGHT / 2 - fontHeight - 20;
musicStartY = mainStartY;
gameInfoVector = new Vector();
Tools.divideString(gameInfoVector, gameInfo, TEXTBOX_WIDTH);
controlInfoVector = new Vector();
Tools.divideString(controlInfoVector, "方向鍵控制角色移動", TEXTBOX_WIDTH);
Tools.divideString(controlInfoVector, "2/上,4/左,8/下,6/右", TEXTBOX_WIDTH);
Tools.divideString(controlInfoVector, "0鍵切換普通子彈發射/終止", TEXTBOX_WIDTH);
Tools.divideString(controlInfoVector, "1,3鍵釋放大絕招", TEXTBOX_WIDTH);
leftButton = "返回";
rightButton = "確定";
buttonWidth = Font.getDefaultFont().stringWidth(leftButton);
fontHeight = (byte) Font.getDefaultFont().getHeight();
flashArrowDelay = 3;
arrowColor = 0xffffff;
}
/**
* 刷新
*
*/
public void cycle() {
switch (gameStage) {
case MAIN_STAGE:
if (newStage) {
newStage = false;
selectIndex = 0;
}
break;
case GAME_INFO_STAGE:
if (newStage) {
newStage = false;
selectIndex = 0;
updowns = 0;
textHeight = fontHeight * gameInfoVector.size() + 20;
}
break;
case CONTROL_INFO_STAGE:
if (newStage) {
newStage = false;
selectIndex = 0;
updowns = 0;
textHeight = fontHeight * controlInfoVector.size() + 20;
}
break;
case MUSIC_STAGE:
if (newStage) {
newStage = false;
selectIndex = 0;
}
break;
}
flashArrowDelay--;
if (flashArrowDelay <= 0) {
flashArrowDelay = 3;
arrowColor = 0xff0000;
} else {
arrowColor = 0xffffff;
}
}
public void paint(Graphics g) {
g.setColor(0);
g.fillRect(0, 0, ThreadCanvas.SCREEN_WIDTH, ThreadCanvas.SCREEN_HEIGHT);
g.setColor(0xffffff);
g.drawString(stageStringSet[gameStage], 0, 0, 0);
switch (gameStage) {
case MAIN_STAGE:
for (int index = 0; index < mainStringSet.length; index++) {
if (index == selectIndex) {
Tools.drawArtString(g, 0xffffff, 0xe9ff13, 0xe9ff13,
mainStringSet[index], mainStartX, mainStartY
+ index * (fontHeight + 20), 0);
} else {
g.drawString(mainStringSet[index], mainStartX, mainStartY
+ index * (fontHeight + 20), 0);
}
}
g.setColor(0xffffff);
//#if MOT_E398 || MOT_V600 || MOT_L7 || MOT_E2
//# g.drawString(leftButton,0,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//# g.drawString(rightButton,ThreadCanvas.SCREEN_WIDTH - 40,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#else
g.drawString(leftButton,ThreadCanvas.SCREEN_WIDTH - 40,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
g.drawString(rightButton, 0,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#endif
break;
case GAME_INFO_STAGE:
g.setClip(TEXTBOX_START_X, TEXTBOX_START_Y, TEXTBOX_WIDTH,
TEXTBOX_HEIGHT);
int j = 0;
for (int index = 0; index < gameInfoVector.size(); index++) {
g.drawString((String) gameInfoVector.elementAt(index), TEXTBOX_START_X, TEXTBOX_START_Y + fontHeight * j - updowns, 0);
j++;
}
g.setClip(0, 0, ThreadCanvas.SCREEN_WIDTH,
ThreadCanvas.SCREEN_HEIGHT);
g.setColor(arrowColor);
if (textHeight - updowns > TEXTBOX_HEIGHT) {
Tools.drawArrow(g, ThreadCanvas.SCREEN_WIDTH / 2,
ThreadCanvas.SCREEN_HEIGHT - 14, Tools.ARROW_DOWN);
}
if (updowns > 0) {
Tools.drawArrow(g, ThreadCanvas.SCREEN_WIDTH / 2, 14,
Tools.ARROW_UP);
}
Tools.drawArrow(g, ThreadCanvas.SCREEN_WIDTH - 14,
ThreadCanvas.SCREEN_HEIGHT / 2, Tools.ARROW_RIGHT);
g.setColor(0xffffff);
//#if MOT_E398 || MOT_V600 || MOT_L7 || MOT_E2
//# g.drawString(leftButton,0,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#else
g.drawString(leftButton,ThreadCanvas.SCREEN_WIDTH - 40,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#endif
break;
case CONTROL_INFO_STAGE:
g.setClip(TEXTBOX_START_X, TEXTBOX_START_Y, TEXTBOX_WIDTH,
TEXTBOX_HEIGHT);
j = 0;
for (int index = 0; index < controlInfoVector.size(); index++) {
g.drawString((String) controlInfoVector.elementAt(index),
TEXTBOX_START_X, TEXTBOX_START_Y + fontHeight * j
- updowns, 0);
j++;
}
g.setClip(0, 0, ThreadCanvas.SCREEN_WIDTH,
ThreadCanvas.SCREEN_HEIGHT);
g.setColor(arrowColor);
if (textHeight - updowns > TEXTBOX_HEIGHT) {
Tools.drawArrow(g, ThreadCanvas.SCREEN_WIDTH / 2,
ThreadCanvas.SCREEN_HEIGHT - 14, Tools.ARROW_DOWN);
}
if (updowns > 0) {
Tools.drawArrow(g, ThreadCanvas.SCREEN_WIDTH / 2, 14,
Tools.ARROW_UP);
}
Tools.drawArrow(g, 14, ThreadCanvas.SCREEN_HEIGHT / 2,
Tools.ARROW_LEFT);
g.setColor(0xffffff);
//#if MOT_E398 || MOT_V600 || MOT_L7 || MOT_E2
//# g.drawString(leftButton,0,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#else
g.drawString(leftButton,ThreadCanvas.SCREEN_WIDTH - 40,ThreadCanvas.SCREEN_HEIGHT - fontHeight,0);
//#endif
break;
//#if NOK_7210 || NOK_QD
//#else
case MUSIC_STAGE:
for (int index = 0; index < 2; index++) {
if (index == selectIndex) {
Tools.drawArtString(g, 0xffffff, 0xe9ff13e, 0xe9ff13e,
musicStringSet[index], 25, musicStartY + index
* (fontHeight + 20), 0);
} else {
g.drawString(musicStringSet[index], 25, musicStartY + index
* (fontHeight + 20), 0);
}
}
if (Control.music) {
if (selectIndex == 0) {
Tools.drawArtString(g, 0xffffff, 0xe9ff13e, 0xe9ff13e,
musicStringSet[2], ThreadCanvas.SCREEN_WIDTH - 55,
musicStartY, 0);
} else {
g.drawString(musicStringSet[2],
ThreadCanvas.SCREEN_WIDTH - 55, musicStartY, 0);
}
} else {
if (selectIndex == 0) {
Tools.drawArtString(g, 0xffffff, 0xe9ff13e, 0xe9ff13e,
musicStringSet[3], ThreadCanvas.SCREEN_WIDTH - 55,
musicStartY, 0);
} else {
g.drawString(musicStringSet[3],
ThreadCanvas.SCREEN_WIDTH - 55, musicStartY, 0);
}
}
if (selectIndex == 0) {
g.setColor(0xffffff);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 55, musicStartY
+ fontHeight * 3 / 2 + 20, true);
g.setColor(0xffffff);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 30, musicStartY
+ fontHeight * 3 / 2 + 20, false);
} else {
if (right) {
g.setColor(0xffffff);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 55, musicStartY
+ fontHeight * 3 / 2 + 20, true);
g.setColor(0xff0000);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 30, musicStartY
+ fontHeight * 3 / 2 + 20, false);
} else {
g.setColor(0xff0000);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 55, musicStartY
+ fontHeight * 3 / 2 + 20, true);
g.setColor(0xffffff);
drawTriangle(g, ThreadCanvas.SCREEN_WIDTH - 30, musicStartY
+ fontHeight * 3 / 2 + 20, false);
}
}
g.setColor(0xffffff);
g.drawString(leftButton, 0,
ThreadCanvas.SCREEN_HEIGHT - fontHeight, 0);
g.drawString(rightButton, ThreadCanvas.SCREEN_WIDTH - buttonWidth,
ThreadCanvas.SCREEN_HEIGHT - fontHeight, 0);
break;
//#endif
}
}
/**
* 回收資源
*
*/
public void reCycle() {
System.gc();
}
protected void keyPressed(int keycode) {
switch (keycode) {
case KeyMap.UP:
switch (gameStage) {
case GAME_INFO_STAGE:
case CONTROL_INFO_STAGE:
updowns -= 10;
if (updowns < 0) {
updowns = 0;
}
break;
case MUSIC_STAGE:
selectIndex--;
if (selectIndex < 0) {
selectIndex = 1;
}
break;
}
break;
case KeyMap.DOWN:
switch (gameStage) {
// case MAIN_STAGE:
// selectIndex++;
// if (selectIndex > 1) {
// selectIndex = 0;
// }
// break;
case GAME_INFO_STAGE:
case CONTROL_INFO_STAGE:
updowns += 10;
if (textHeight - updowns < TEXTBOX_HEIGHT) {
updowns = textHeight - TEXTBOX_HEIGHT;
}
break;
case MUSIC_STAGE:
selectIndex++;
if (selectIndex > 1) {
selectIndex = 0;
}
break;
}
break;
case KeyMap.LEFT:
switch (gameStage) {
case MUSIC_STAGE:
if (selectIndex == 1) {
if (right) {
right = false;
} else {
Control.downMusic();
}
}
break;
case CONTROL_INFO_STAGE:
changeStage(GAME_INFO_STAGE);
break;
}
break;
case KeyMap.RIGHT:
switch (gameStage) {
case MUSIC_STAGE:
if (selectIndex == 1) {
if (!right) {
right = true;
} else {
Control.upMusic();
}
}
break;
case GAME_INFO_STAGE:
changeStage(CONTROL_INFO_STAGE);
break;
}
break;
//#if MOT_E398 || MOT_V600 || MOT_L7 || MOT_E2
//# case KeyMap.RIGHT_SOFT:
//#else
case KeyMap.LEFT_SOFT:
//#endif
case KeyMap.FIRE:
switch (gameStage) {
case MAIN_STAGE:
switch (selectIndex) {
case 0:
changeStage(GAME_INFO_STAGE);
break;
case 1:
tempMusic = Control.music;
tempVolumn = Control.musicVolumn;
changeStage(MUSIC_STAGE);
break;
}
break;
}
break;
//#if MOT_E398 || MOT_V600 || MOT_L7 || MOT_E2
//# case KeyMap.LEFT_SOFT:
//#else
case KeyMap.RIGHT_SOFT:
//#endif
switch (gameStage) {
case MAIN_STAGE:
Control.returnOldFocus();
break;
case MUSIC_STAGE:
if (tempMusic != Control.music || tempVolumn != Control.musicVolumn) {
Control.setMusic();
}
changeStage(MAIN_STAGE);
break;
default:
changeStage(MAIN_STAGE);
break;
}
break;
}
}
public void changeStage(byte newStage) {
gameStage = newStage;
this.newStage = true;
}
/**
* draw the triangle for control the music voice
*
* @param posx
* @param posy
* @param flag
*/
public void drawTriangle(Graphics g, int posx, int posy, boolean flag) {
for (int i = 0; i < 8; i++) {
if (flag) {
g.drawLine(posx + i, posy - i, posx + i, posy + i);
} else {
g.drawLine(posx - i, posy - i, posx - i, posy + i);
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -