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

📄 playscreen.java

📁 一款运行于手机的Java游戏神灯传奇源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    //敌人
    Enemy enemy = (Enemy) getEnemyPool().getFirstUsed();
    while (enemy != null) {
      MovingObject next = enemy.getNextLinked();
      if (enemy.isDead() || enemy.getLocationX() + 20 < 0 ||
          enemy.getLocationX() - 10 > ThreadCanvas.SCREEN_WIDTH
          || enemy.getLocationY() + enemy.getHeight() < 0 ||
          enemy.getLocationY() - 20 > ThreadCanvas.SCREEN_HEIGHT) {
        releaseEnemy(enemy);
      }
      enemy.cycle(posX, posY);
      enemy.animateCycle();
      enemy = (Enemy) next;
    }

    // 关卡资源
    stage.cycle();
  }

  private MovingObject getPlayerHitBullet(Rectangle target) {
    MovingObject b = bulletPool.getFirstUsed();
    while (b != null) {
      if (b.getBounds().intersects(target)) {
        return b;
      }
      b = b.getNextLinked();
    }
    return null;
  }

  private MovingObject getEnemyHitBullet(Rectangle target) {
    MovingObject b = enemyBulletPool.getFirstUsed();
    while (b != null) {
      if (b.getBounds().intersects(target)) {
        return b;
      }
      b = b.getNextLinked();
    }
    return null;
  }

  /**
   * 碰撞检测
   *
   */
  public void collisionDetection() {
    MovingObject hitBullet = null;

    // 检测玩家的子弹是否击中敌人

    // 普通敌人
    Enemy enemy = (Enemy) getEnemyPool().getFirstUsed();
    while (enemy != null) {
      Enemy next = (Enemy) enemy.getNextLinked();
      if (!enemy.isDead() && !enemy.isDestroy()) {
        if (player.isBombState && enemy.getLocationX() > 0
            && enemy.getLocationX() < ThreadCanvas.SCREEN_WIDTH
            && enemy.getLocationY() - 10 > 0
            && enemy.getLocationY() < ThreadCanvas.SCREEN_HEIGHT) {
          enemy.reduceEnergy(1);
          if (enemy.getEnergy() <= 0) {
            player.addScore(enemy.getScore());
            if (enemy.getType() != 26 && enemy.getType() != 27
                && enemy.getType() != 28
                && enemy.getType() != 29) {
              enemy.setDestroy(true);
            } else {
              enemy.setDestroy(true);
              hasPass = true;
            }
          }
        }
        hitBullet = getPlayerHitBullet(enemy.getBounds());
        if (hitBullet != null) {
          if (hitBullet.getType() == 1 || hitBullet.getType() == 2
              || hitBullet.getType() == 3
              || hitBullet.getType() == 0) {
            enemy.reduceEnergy(player.bulletPower);
            releaseBullet(hitBullet);
          }
          if (enemy.reduceEnergy(hitBullet.getHitPower()) <= 0) {

            player.addScore(enemy.getScore());
            if ((player.getScore() > 2000 && player.getScore() <= 2020)
                || (player.getScore() > 6000 && player
                    .getScore() <= 6020)) {
              if (player.getLife() < 5)
                player.setLife(player.getLife() + 1); //奖励生命
            }
            if (enemy.getType() != 26 && enemy.getType() != 27
                && enemy.getType() != 28
                && enemy.getType() != 29) {
              enemy.setDestroy(true);
            } else {
              enemy.setDestroy(true);
              hasPass = true;
            }
            if (enemy.getType() == 5 || enemy.getType() == 13
                || enemy.getType() == 4
                || enemy.getType() == 15) {
              if (enemy.getType() == 5 || enemy.getType() == 13)
                initialTreasure(TREASURE_04, enemy
                    .getLocationX(), enemy.getLocationY(),
                    2, 2);
              if (enemy.getType() == 4 || enemy.getType() == 15)
                initialTreasure(TREASURE_03, enemy
                    .getLocationX(), enemy.getLocationY(),
                    2, 2);
            } else {
              if (isInProbability(Tools.getRand(0, 99), 1)) {
                initialTreasure(TREASURE_02, enemy
                    .getLocationX(), enemy.getLocationY(),
                    2, 2);
              }
              if (isInProbability(Tools.getRand(0, 99), 2)) {
                initialTreasure(TREASURE_01, enemy
                    .getLocationX(), enemy.getLocationY(),
                    2, 2);
              }
            }
          }
        }
      }

      enemy = next;
    }

    // BOSS

    if (!boss.isDead() && !boss.isDestroy()) {
      hitBullet = getPlayerHitBullet(boss.getBounds());
      if (hitBullet != null) {
        if (hitBullet.getType() == 1 || hitBullet.getType() == 2
            || hitBullet.getType() == 3 || hitBullet.getType() == 0){
          boss.reduceEnergy(player.bulletPower);
          releaseBullet(hitBullet);
        }
        if (boss.reduceEnergy(hitBullet.getHitPower()) <= 0) {
          player.addScore(boss.getScore());
          player.addBombPoint();
          boss.setDestroy(true);
        }
      }
    }

    // 宝物
    if (!player.isDestroy()) {
      MovingObject treasure = treasurePool.getFirstUsed();
      while (treasure != null) {
        MovingObject next = treasure.getNextLinked();
        if (!treasure.isDestroy()
            && treasure.getBounds().intersects(player.getBounds())) {
          switch (treasure.getType()) {
          case TREASURE_01:
            if(player.energy<100)player.addEnergy(10);
            releaseTreasure(treasure);
            break;
          case TREASURE_02:
            if(player.energy<100)player.addEnergy(30);
            releaseTreasure(treasure);
            break;
          case TREASURE_03:
            if(player.getBombNum() < 3)
            {
              player.addBomb();
            }
            releaseTreasure(treasure);
            break;
          case TREASURE_04:
            int gunLevel = player.getGunLevel();
            if (gunLevel < 3) {
              player.setGunId(player.getGunId(), player.getGunLevel() + 1);
            }
            releaseTreasure(treasure);
            break;
          }
          treasure.setType(treasure.getType() + 4);
          treasure.reset();
          treasure.setSpeedX(0);
          treasure.setSpeedY(-2);
        }
        treasure = next;
      }
    }

    // 看玩家是否与敌人或敌人的子弹发生碰撞

    if (!player.isInvisible() || player.isDestroy()) {

      // 普通敌人

      enemy = (Enemy) getEnemyPool().getFirstUsed();
      while (enemy != null) {
        Enemy next = (Enemy) enemy.getNextLinked();
        if (!enemy.isDead() && !enemy.isDestroy()) {
          if (enemy.getBounds().intersects(player.getBounds())) {
            if(enemy.getType()!=26&&enemy.getType()!=27&&enemy.getType()!=28&&enemy.getType()!=29)
            {
              enemy.setDestroy(true);
            }
            player.addEnergy((-1)*enemy.energy);
            if (player.reduceEnergy(enemy.energy) <= 0)
            {
              player.setDestroy(true);
            }
            if (player.isDead())
              return;
          }
        }
        enemy = next;
      }

      // BOSS

      if (!boss.isDead() && !boss.isDestroy()) {
        if (boss.getBounds().intersects(player.getBounds())) {
          player.setDestroy(true);
          if (player.isDead())
            return;
        }
      }

      // 敌人子弹

      hitBullet = getEnemyHitBullet(player.getBounds());
      if (hitBullet != null) {
        player.strong();
        player.addEnergy(-10);
        if (player.reduceEnergy(hitBullet.getHitPower()) <= 0) {
          player.setDestroy(true);
        }
        releaseEnemyBullet(hitBullet);
        if (player.isDead())
          return;
      }
    }
  }

  /**
   * 初始化宝物
   *
   * @param treasureType
   * @param locX
   * @param locY
   * @param speedX
   * @param speedY
   * @return
   */
  public boolean initialTreasure(int treasureType, int locX, int locY, int speedX, int speedY) {
    MovingObject treasure = getTreasurePool().getNextFree();
    treasure.initial(treasureType, 1, speedX, speedY, locX + 5, locY, 13,
        13);
    treasure.currentState = treasureType - TREASURE_01;
    treasure.currentFrame = 0;
    treasure.energy = 1;
    treasure.destroy(false);
    return true;
  }

  /**
   * 返回是否在概率所在的范围内
   *
   * @param number
   *            表示0-100区间的任意数
   * @param probability
   *            概率度
   * @return 是否在概率度范围内
   */
  private boolean isInProbability(int number, int probability) {
    if (number <= probability) {
      return true;
    } else {
      return false;
    }
  }

  public void setControlKeys(boolean keyUp, boolean keyDown, boolean keyLeft,boolean keyRight) {
    isKeyUp = keyUp;
    isKeyDown = keyDown;
    isKeyLeft = keyLeft;
    isKeyRight = keyRight;
  }


  /**
   * 获取对象池
   * @return
   */
  public MovingObjectPool getTreasurePool() {
    return treasurePool;
  }

  public static MovingObjectPool getBulletPool() {
    return bulletPool;
  }

  public static MovingObjectPool getEnemyBulletPool() {
    return enemyBulletPool;
  }

  public MovingObjectPool getEnemyPool() {
    return enemyPool;
  }
  /**
   * 释放对象池
   * @param treasure
   */
  public final void releaseTreasure(MovingObject treasure) {
    treasurePool.release(treasure);
  }

  public final void releaseBullet(MovingObject bullet) {
    bulletPool.release(bullet);
  }

  public final void releaseEnemyBullet(MovingObject eBullet) {
    enemyBulletPool.release(eBullet);
  }

  public final void releaseEnemy(MovingObject enemy) {
    enemyPool.release(enemy);
  }

  public void reset() {
    player.reset();
    stage.reset();
    clearPool();
    boss.dead();
    resetAllKey();
  }

  /**
   * 回收资源
   *
   */
  public void reCycle() {
       reset();
  }

  private void resetAllKey() {
    setControlKeys(false, false, false, false);
    isKeyFire = false;
  }

}

⌨️ 快捷键说明

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