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

📄 helpscreen.java

📁 一款运行于手机的Java游戏神灯传奇源代码
💻 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 + -