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

📄 playscreen.java

📁 一款运行于手机的Java游戏神灯传奇源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * Created on 2006-5-20
 *
 * 主游戏界面
 */
package com.thinkenjoy.feitian.screen;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import com.thinkenjoy.control.ActorCanvas;
import com.thinkenjoy.control.Control;
import com.thinkenjoy.control.KeyMap;
import com.thinkenjoy.control.ThreadCanvas;
import com.thinkenjoy.feitian.Enemy;
import com.thinkenjoy.feitian.MovingObject;
import com.thinkenjoy.feitian.MovingObjectPool;
import com.thinkenjoy.feitian.Player;
import com.thinkenjoy.feitian.Stage;
import com.thinkenjoy.tools.ImageSet;
import com.thinkenjoy.tools.Tools;
import com.thinkenjoy.feitian.*;

/**
 * 主游戏界面
 */
public class PlayScreen extends ActorCanvas {
  public static int pass = 0;

  public static boolean hasPass = false;

  public static final short PLAY_START_Y = 16;

  private static final short BOMB_POINT_START_X = 4;
  private static final short BOMB_POINT_START_Y = 183;
  private static final short BOMB_START_X = 5;

  //#if NOK_7210 || NOK_7260
  //# public static final short PLAY_END_Y = 120;
  //# private static final short BOMB_START_Y = 115;
  //#else
    //#if NOK_7370 || MOT_E2
    //# public static final short PLAY_END_Y = 315;
    //# private static final short BOMB_START_Y = 300;
    //#else
      //#if NOK_6101
      //# public static final short PLAY_END_Y = 155;
      //# private static final short BOMB_START_Y = 150;
      //#else
      public static final short PLAY_END_Y = 191;
      private static final short BOMB_START_Y = 180;
      //#endif
    //#endif
  //#endif
  public static final short PLAY_SCREEN_HEIGHT = 176;

  private static final short BOMB_WIDTH = 11;

  private static final short BOMB_POINT_WIDTH = 1;

  private static final short BOMB_POINT_SEPERATE = 2;

  private static final short BOMB_POINT_HEIGHT = 8;

  private static final byte START_STATE = 0;

  private static final byte PLAY_STATE = 1;

  public static byte state;

  private int stageNumStartX;
  private int stageNumStartY;
  private int changeColorDelay;

  private String confirmButton;

  private byte fontHeight;

  private short buttonWidth;

  Image treasureEffect;

  public static final int NULL = -1;

  public static final int REFRESH_RATE = 50;

  public static final int MAX_ENEMY_NUM = 20;

  public static final int MAX_TOP_SCORE = 8;

  /**
   * 宝物的索引值
   */

  /**
   * 小血,10分
   */
  static final int TREASURE_01 = 0x06;

  /**
   * 大血,30分
   */
  static final int TREASURE_02 = 0x07;

  /**
   * 火力卷轴,攻击强度增加
   */
  static final int TREASURE_03 = 0x08;

  /**
   * 立即获得一颗炸弹
   */
  static final int TREASURE_04 = 0x09;

  private boolean isKeyUp;

  private boolean isKeyDown;

  private boolean isKeyLeft;

  private boolean isKeyRight;

  private boolean isKeyFire;

  private static PlayScreen instance;

  private ImageSet treasureImageSet;

  private static Player player;

  private static Enemy boss;

  public Stage stage;

  private Image bombImage;
  private Image ui;

  private MovingObjectPool treasurePool; //v

  public  static MovingObjectPool bulletPool;      //s
  public  MovingObjectPool enemyPool;      //t
  public  static MovingObjectPool enemyBulletPool;      //u

  private int delayChangeAuto;


  /**
   * 初始化基本对象,为子弹,敌人生成对象池
   */
  private PlayScreen() {
    changeColorDelay = 3;
    confirmButton = "确定";
    fontHeight = (byte) Font.getDefaultFont().getHeight();

    buttonWidth = (short)Font.getDefaultFont().stringWidth(confirmButton);

    bombImage = Tools.getImage("images/stuffs/bomb");
    ui = Tools.getImage("images/title/ui");

    treasureImageSet = new ImageSet(4);
    //#if NOK_QD
    //# for(int i = 0;i<4;i++) //宝物
    //# {
      //# Image[] treasureImage = new Image[2];
      //# for(int j = 0; j<2 ;j++)
      //# {
        //# treasureImage[j] = Tools.getImage("images/stuffs/treasure"+(i*2+j));
      //# }
      //# treasureImageSet.addState(treasureImage,100);
    //# }
    //#else
    Image treasureImage = Tools.getImage("images/stuffs/treasure");
      //#if NOK_7210 || NOK_7260 || NOK_6101
      //# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,0,2,1,6,12),100);
      //# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,13,2,1,8,11),100);
      //# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,24,2,1,12,8),100);
      //# treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,32,2,1,9,11),100);
      //#else
      treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,0,2,1,8,14),100);
      treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,14,2,1,10,15),100);
      treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,29,2,1,12,17),100);
      treasureImageSet.addState(ImageSet.extractFrames(treasureImage,0,46,2,1,13,12),100);
      //#endif
      //#endif
/*

*/
//player = new Player(Control.currentPlayer, 1, 5, 5, -30, 89, 34, 25);
    //TREASURE POOL

    MovingObject treasure[] = new MovingObject[10]; //宝物对象池
    for (int i = 0; i < treasure.length; i++) {
      treasure[i] = new MovingObject(0, 80, 5, 5, 171, 89, 10, 10);
      treasure[i].imageSet = treasureImageSet;
    }
    treasurePool = new MovingObjectPool(treasure);

    Enemy[] mo_1 = new Enemy[20]; //敌人对象池
    for (int i_2 = 0; i_2 < mo_1.length; ++i_2) {
      mo_1[i_2] = new Enemy(0, 0, 0, 0, 0, 0, 0, 0);
    }
    enemyPool = new MovingObjectPool(mo_1);
    stage = new Stage(1, "images/stage/", enemyPool, boss, treasurePool);
    MovingObject[] mo_2 = new MovingObject[15]; //子弹对象池
    for (int i_3 = 0; i_3 < mo_2.length; ++i_3) {
      mo_2[i_3] = new MovingObject(0, 0, 0, 0, 0, 0, 0, 0);
    }
    bulletPool = new MovingObjectPool(mo_2);

    MovingObject[] mo_3 = new MovingObject[35];
    for (int i_4 = 0; i_4 < mo_3.length; ++i_4) {
      mo_3[i_4] = new MovingObject(0, 0, 0, 0, 0, 0, 0, 0);
    }
    enemyBulletPool = new MovingObjectPool(mo_3);
    System.gc();
  }
  /**
   * 产生自我的对象
   * @return
   */
  public static PlayScreen getInstance() {
    if (instance == null) {
      instance = new PlayScreen();
    }
    return instance;
  }

  /**
   * 生成玩家,BOSS的对象
   *
   */
  public static void initialNewCase() {
    player = new Player(Control.currentPlayer, 1, 5, 5, -30, 89, 34, 25);
    boss = new Enemy(15, 1, 4, 4, 166, 30 + 3, 22, 16);
    boss.dead();
  }

  public void initial() {
    state = START_STATE;
    player.initial(Control.currentPlayer + 1);
  }

  /**
   * 清空缓冲池里面正在用的数据
   *
   */
  private void clearPool() {

    //宝物
    MovingObject treasure = getTreasurePool().getFirstUsed();
    while (treasure != null) {
      MovingObject next = treasure.getNextLinked();
      releaseTreasure(treasure);
      treasure = next;
    }
    //玩家子弹
    MovingObject bullet = getBulletPool().getFirstUsed();
    while(bullet != null)
    {
      MovingObject next = bullet.getNextLinked();
      releaseBullet(bullet);
      bullet = next;
    }
    MovingObject eBullet = getEnemyBulletPool().getFirstUsed();
    while(eBullet != null)
    {
      MovingObject next = eBullet.getNextLinked();
      releaseEnemyBullet(eBullet);
      eBullet = next;
    }
    //敌人
    MovingObject enemy = getEnemyPool().getFirstUsed();
    while(enemy != null)
    {
      MovingObject next = enemy.getNextLinked();
      releaseEnemy(enemy);
      enemy = next;
    }
  }

  /**
   * 刷新
   *
   */
  public void cycle() {
    if (state == PLAY_STATE) {
      if (stage.canChangeStage()) {
        if (Control.getStage() + 1 > Stage.MAX_STAGE) {
          Control.setVictory(true);
//				Control.show(Control.GAME_END_STAGE);
        } else {
          clearPool();
          Control.setStage(Control.getStage() + 1);
          state = START_STATE;
//				Control.playGameMusic();
        }
      } else {
        if (player.getLife() <= 0) {
          if (Control.getStage() == 4) {
            Control.setVictory(true);
          } else {
            Control.setVictory(false);
          }
//				Control.show(Control.GAME_END_STAGE);
        } else {
          playGameStage();
        }
      }
    }
  }

  /**
   * 绘制住界面与UI,以及敌人,子弹和玩家
   */
  public void paint(Graphics g) {
    switch (state) {
    case START_STATE:
      g.setColor(0);
      g.fillRect(0,0,ThreadCanvas.SCREEN_WIDTH,ThreadCanvas.SCREEN_HEIGHT);
      g.setColor(56576);

      stageNumStartX = ThreadCanvas.SCREEN_WIDTH / 2 - 18;
      stageNumStartY = ThreadCanvas.SCREEN_HEIGHT / 2 - 24;

      switch (Control.getStage()) {
      case 1: // '\001'
        g.drawString("第一关", stageNumStartX, stageNumStartY, 20);
        g.drawString("撒哈拉沙漠(白日)", stageNumStartX - 40, stageNumStartY + 30, 20);
        break;
      case 2:
        g.drawString("第二关", stageNumStartX, stageNumStartY, 20);
        g.drawString("撒哈拉沙漠(夜晚)", stageNumStartX - 40, stageNumStartY + 30, 20);

        break;
      case 3:
        g.drawString("第三关", stageNumStartX, stageNumStartY, 20);
        g.drawString("魔神废墟(外城)", stageNumStartX - 40, stageNumStartY + 30, 20);

        break;
      case 4:
        g.drawString("第四关", stageNumStartX, stageNumStartY, 20);
        g.drawString("魔神废墟(内城)", stageNumStartX - 40, stageNumStartY + 30, 20);

        break;
      }
      if (--changeColorDelay <= 0) {

⌨️ 快捷键说明

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