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

📄 game.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package com.j2medev.chapter5;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;

/**
 * @name Game
 * @author liloi <liloi@hotmail.com>
 * @version 2.0
 */

//#if ( NOKIA_S60_V1 || NOKIA_S60_V2 || NOKIA_S40_V1 || NOKIA_S40_V2)
public class Game extends com.nokia.mid.ui.FullCanvas implements Runnable,
        MyGameInterface
//#else
//# public class Game
//#     extends Canvas
//#     implements Runnable, MyGameInterface
//#endif
{
  //////////////////////////////////////////////////////////////////////////////
  // Variables
  //////////////////////////////////////////////////////////////////////////////
  //#if MOTO_E680
//#     public Image backImage = Image.createImage(SCREEN_WIDTH, SCREEN_HEIGHT);
//#     public Graphics backG = backImage.getGraphics();
  //#else
  public Graphics backG;

  //#endif
  public Main m_Midlet; // Midlet类
   
  protected boolean bSelectKeyDown; //在菜单动画状态下是否有选择键按下

  protected static final int REPAINT_DELAY = 64; //游戏的延迟(一桢动画播放的时间单位毫秒)

  public static int SCREEN_W_K700 = 176;
  public static int SCREEN_H_K700 = 220;

  /**
   * 动画变量
   * 用于播放动画编辑器制作的动画
   */
  protected PieceSprite m_DemoAnimation; //教学动画
  protected PieceSprite m_ReadyAnimation; //准备动画
  protected PieceSprite m_MenuFrameAnimation; //菜单动画
  protected PieceSprite m_CoverAnimation; //封面动画

  /**
   * 声音变量
   * 用于播放声音
   */
  private MySound mySound; // 声音类
  public int soundLevel = 3; // 声音高低
  public boolean sSoundOpen = true; // 是否播放声音

  /**各种全局变量值*/
  private byte gameState; // 当前游戏状态
  private int totalBonus; // 总得分
  private boolean isPass; // 是否过关
  public Map myMap; // 地图对象
  public int mapBase; // 地图移动基准
  public Role thisRole; // 当前角色对象
  public Role roleBoy; // 创建男孩角色对象
  public Role roleGirl; // 创建女孩角色对象
  public Role roleNinja; // 创建忍者角色对象

  int wordWidth = 0;

  /**
   *绘制雨或雪时用的参数
   */
  //绘制雨或雪的2个方位的位置
  short SnowPosx[];
  short SnowPosY[];

  //雨雪的尺寸
  short SnowSize[];

  // 用于控制是否下雨或下雪
  private Random randSnow = new Random(System.currentTimeMillis());

  // 用于控制雨雪量的多少
  private Random randSnowCount = new Random(System.currentTimeMillis());
  private int currentSnow;

  /**奖品、工具、障碍和敌人的存储队列*/
  PVector bonusVector = new PVector();
  PVector toolVector = new PVector();
  PVector fraiseVector = new PVector();
  PVector enemyVector = new PVector();

  /**各种图片*/
  private Image imgLogo1; //移动公司图片
  private Image imgLogo2; //摩动时代图片
  private Image imgCover; //封面图片
  private Image imgLoading; //读取图片
  private Image imgMenu; //菜单图片
  private Image imgAbout; //关于图片

  private Image[] imgRoleHead = new Image[3]; // 角色的头部图片
  private Image thisImgRoleHead; //当前头部图片
  private Image imgSkateboard; // 滑板图片
  private Image imgForeground; // 前景图片
  private Image imgDecTop; // 顶层装饰图片
  private Image imgDecBottom; // 底层装饰图片
  private Image[] imgFraise = new Image[8]; // 障碍物图片
  private Image[] imgBonus = new Image[6]; // 奖品图片
  private Image[] imgTool = new Image[3]; // 工具图片
  private Imagex[] imgxEnemy = new Imagex[3]; // 敌人图片
  private Imagex[] imgxEnemyDead = new Imagex[3]; // 敌人受伤图片
  private ImageNumber inNumber; // 用于显示数字的对象

  //背景的四层结构
  private Image imgSky; //天空图片(放在最后一层)
  private Image imgCloud; //云彩图片(在天空前面)
  private Image imgBuilding; //建筑物图片(在云彩前面)
  private Image imgLand; //涂鸦墙图片(在建筑物前面)

  /**背景滚动宽度*/
  private int bgRockWidth = 0;

  /**建筑物滚动宽度*/
  private int bgBuildWidth = 0;

  /**云彩滚动速度(游戏中有3朵云彩且速度不一样)*/
  private int[] bgCloudWidth = new int[3];

  /**前景滚动宽度*/
  private int fgRockWidth = 0;

  /**线程相关*/
  private boolean threadLoop; // 线程是否继续

  /**其它*/
  private int loadingGuage = 0;
  private int loadingGuage2 = 0;
  private int MacroSpeed; // 整个游戏移动的速度
  private byte currentScreen; // 当前关卡(0~5分别对应6个不同关卡;6~9对应高级关卡)
  private byte currentRole; // 当前角色(在本游戏中与小局一一对应)
  protected Vector m_Text;
  private int V600_WORD_HEIGHT;

  /** 各种字体 */
  protected Font m_MenuFont;
  protected Font m_HelpFont;
  protected Font m_PressAnyKeyFont;
  protected Font m_CreditsFont;
  protected Font m_HiscoreFont;

  /*帮助菜单变量*/
  private int helpLines;
  private int helpPages;
  private int currPage;

  private int m_CursorSmallDIS;
  private int m_LastPosition;
  private int m_Position; //used for title position indication
  public boolean m_Paused = false; //pause flag
  public long m_LastTime; //used for timer/delay tasks
  private Imagex imgx_selector = new Imagex();
  private Imagex imgx_MenuItems = new Imagex();

  /*记录存取*/
  private RecordStore recordStore;

  //记录存储数组
  public byte SaveData[];

  /////////////////////////////////
  /// General look&feel         ///
  /////////////////////////////////
  protected int m_Position_pop;
  protected Font m_Font;
  protected Font m_BoldFont;
  protected Font m_PlainFont;
  protected Image m_BufferedImage;
  protected Image m_FadeImage;

  /////////////////////////////////////////////////////////
  /// Methods                                           ///
  /////////////////////////////////////////////////////////

  /**
   * 构造函数
   * @param d Display reference
   * @return none
   */
  public Game() {
    //#if  ( NOKIA_S60_V1 || NOKIA_S60_V2||  NOKIA_S40_V1 || NOKIA_S40_V2)

    //#else
//#     setFullScreenMode(true); //设置全屏
    //#endif
    /* set paused mode */
    m_Paused = false; //用于控制循环是否暂停
    /* 初始化天气 */
    SnowPosx = new short[50];
    SnowPosY = new short[50];
    SnowSize = new short[50];

    for (int i = 0; i < 50; i++) { //绘制雨,向左向右
      SnowPosx[i] = (short) (Math.abs(randSnow.nextInt()) % SCREEN_WIDTH);
      SnowPosY[i] = (short) (Math.abs(randSnow.nextInt()) % SCREEN_HEIGHT);
      SnowSize[i] = (short) (Math.abs(randSnow.nextInt()) % 3 + 1);
    }
    /* 初始化声音 */
    mySound = new MySound();
    mySound.setSoundOpen(true);

    mySound.setSoundLoopCount(0, -1);
    mySound.setSoundLevel(100);

    //#if MOTO_E398||MOTO_V600
//#     V600_WORD_HEIGHT = 5;
    //#else
        V600_WORD_HEIGHT = 0;
    //#endif

    /* start us as thread */
    threadLoop = true; // 控制线程循环
    new Thread(this).start();
  }

  /**
   * 存储游戏数据
   */
  public void WriteData() {
    try {
      SaveData[0] = currentScreen; // 存储当前关
      SaveData[1] = currentRole; // 存储当前人物(亦即当前小局)
      recordStore = RecordStore.openRecordStore("skateBoard_data", true);
      if (recordStore.getNumRecords() == 0) {
        recordStore.addRecord(SaveData, 0, 2);
      }
      else {
        recordStore.setRecord(1, SaveData, 0, 2);
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    System.gc();
  }

  /**
   * 读取游戏数据
   */
  protected void ReadData() {
    try {
      recordStore = RecordStore.openRecordStore("skateBoard_data", true);
      if (recordStore.getNumRecords() == 0) {
        return;
      }
    }
    catch (Exception e) {
      e.printStackTrace();
      System.out.println("Error");
    }
    try {
      SaveData = recordStore.getRecord(1);
      currentScreen = SaveData[0];
      currentRole = SaveData[1];
    }
    catch (Exception e1) {
      e1.printStackTrace();
    }
    System.gc();
  }

  /**
   * 按键按下的相应
   * @brief indicate, that key has been pressed
   * @param keyCode key code of the key, which state is to be changed
   */

  protected void keyPressed(int keyCode) {
    switch (gameState) {
      case STATE_DEMO:
        switch (keyCode) {
          case KEY_2:
          case KEY_UP:
          case KEY_8:
          case KEY_DOWN:
          case KEY_5:
          case KEY_FIRE:
          case SOFT_KEY_LEFT:
            changeState(STATE_MAINMENU);
            break;
        }
        break;
      case STATE_MAINMENU:
        checkKeys(MENU_MAIN, true, keyCode);
        break;
      case STATE_OPTIONSMENU:
        checkKeys(MENU_OPTIONS, false, keyCode);
        if (keyCode == KEY_5 || keyCode == KEY_FIRE || keyCode == SOFT_KEY_LEFT) {
          switch (m_Position) {
            case 0:
              mySound.setSoundOpen(true);
              break;
            case 1:
              mySound.setSoundOpen(false);
              break;
            case 2:
              if (bSelectKeyDown == false && m_CursorSmallDIS == 0 &&
                  bGameMenuAnimationOver()) {
                bSelectKeyDown = true;
                m_MenuFrameAnimation.setAnimation(1, false);
              }
              break;
          }
        }
        break;
      case STATE_GAMEMENU:
        checkKeys(MENU_GAME, true, keyCode);
        break;
      case STATE_HELP:
        switch (keyCode) {
          case KEY_UP:
          case KEY_2:
            m_Position -= HELP_LINES;
            if (m_Position < 0) {
              m_Position = 0;
            }
            break;
          case KEY_DOWN:
          case KEY_8:
            m_Position += HELP_LINES;
            if (m_Position > helpLines - HELP_LINES) {
              m_Position = (helpPages - 1) * HELP_LINES;
            }
            break;
          case SOFT_KEY_RIGHT:
            if (bSelectKeyDown == false && bGameMenuAnimationOver()) {
              bSelectKeyDown = true;
              m_MenuFrameAnimation.setAnimation(1, false);
            }
            break;
        }
        break;
      case STATE_CREDITS:
        if (bSelectKeyDown == false && bGameMenuAnimationOver()) {
          bSelectKeyDown = true;
          m_MenuFrameAnimation.setAnimation(1, false);
        }
        break;
      case STATE_GAMEREADY:
        if (bGameReadyAnimationOver()) {
          m_Paused = false;
          changeState(STATE_GAME);
        }
        else {
          m_ReadyAnimation.currentFrameNr = (short) (m_ReadyAnimation.
              currentAnimation.length - 2);
        }
        break;
      case STATE_GAME:
        switch (keyCode) {
          case SOFT_KEY_RIGHT:

⌨️ 快捷键说明

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