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

📄 game.java

📁 孤单惊魂
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
          1, 1, 1, 1, 40, 0, 0, 9, 0, 0, 34, 35, 34, 35, 51, 52, 0, 0, 0, 9, 0,
           0, 0,
           40, 1, 1, 1,1,
          1, 1, 1, 1, 40, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0,
           40,
           1, 1, 1,1,
          1, 1, 1, 1, 40, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0,
           40,
           1, 1, 1,1,
          1, 1, 1, 1, 40, 0, 0, 0, 11, 0, 49, 50, 0, 0, 0, 49, 50, 0, 12, 0, 0,
           0, 0,
           40, 1, 1, 1,1,
           1,1, 1, 1, 40, 0, 0, 0, 0, 11, 51, 52, 0, 0, 0, 51, 52, 12, 0, 0, 0,
           0, 0,
           40, 1, 1, 1,1,
           1,1, 1, 1, 40, 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 49, 50, 0, 0, 0, 49,
           50, 0,
           40, 1, 1, 1,1,
           1,1, 1, 1, 40, 0, 16, 17, 0, 0, 51, 52, 0, 0, 0, 51, 52, 0, 0, 0, 51,
           52,
           0, 40, 1, 1, 1,1,
          1, 1, 1, 1, 40, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50,
           0,
           40, 1, 1, 1,1,
           1,1, 1, 1, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, 0,
           40,
           1, 1, 1,1,
          1, 1, 1, 1, 40, 0, 0, 0, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
           40,
           1, 1, 1,1,
           1,1, 1, 1, 3, 4, 0, 0, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
           4,
           1, 1, 1,1,
           1,1, 1, 1, 5, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
           39,
           39, 39, 5, 38, 1, 1, 1,1,
                1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1,
           1, 1,1,
           1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1,
           1, 1,1,
           1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1,
           1, 1,1,
          1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
           1,
           1, 1,1};
        for (int i = 0; i < landMap4.length; i++) {
          int column = i % 28;
          int row = (i - column) / 28;
          landLayer.setCell(column, row, landMap4[i]);
        }
        break;
    }

    // 初始化怪物
    try {
      int sequence2[] = {
          0, 0, 1, 1}; //动画帧的序列
      int sequence4[] = {
          0, 1, 2, 3}; //动画帧的序列
      playerSprite = new Sprite(Image.createImage("/Hero.png"), 13, 18);
      playerSprite.setFrameSequence(sequence2);
      GoodsSprite = new Sprite(Image.createImage("/Goods.png"), 15, 15);
      placeSprite(GoodsSprite, landLayer);
      BreadSprite = new Sprite(Image.createImage("/Bread.png"), 14, 14);
      placeSprite(BreadSprite, landLayer);
      explosionSprite = new Sprite(Image.createImage("/explosion.png"), 21, 21); //爆炸
      explosionSprite.setFrameSequence(sequence4);
      ringSprite = new Sprite(Image.createImage("/ring.png"), 20, 20); //绝对防御
      for (int i = 0; i < amount; i++) {
        //地雷
        mineSprite[i] = new Sprite(Image.createImage("/mine.png"), 15, 15);
        placeSprite(mineSprite[i], landLayer);
        //怪
        monster2Sprite[i] = new MonsterSprite(Image.createImage(
            "/xiaoguai1.png"), 19, 13, amount, landLayer, playerSprite, 3);
        monster2Sprite[i].setFrameSequence(sequence2);
        placeSprite(monster2Sprite[i], landLayer);
        //怪
        monster1Sprite[i] = new MonsterSprite(Image.createImage("/xiaoguai.png"),
                                              14, 18, 2, landLayer,
                                              playerSprite, 1);
        monster1Sprite[i].setFrameSequence(sequence2);
        placeSprite(monster1Sprite[i], landLayer);
      }
      //boss
      bossSprite = new MonsterSprite(Image.createImage("/boss.png"),
                                     25, 25, dif + 1, landLayer, playerSprite,
                                     10);
      bossSprite.setFrameSequence(sequence2);
      placeSprite(bossSprite, landLayer);
    }
    catch (IOException e) {
      System.err.println("Failed loading images!228");
    }

    // 怪物和图层添加到图层管理器中
    layers = new LayerManager();
    layers.append(ringSprite);
    layers.append(playerSprite);
    layers.append(bossSprite);
    layers.append(GoodsSprite);
    layers.append(BreadSprite);
    layers.append(explosionSprite);
    for (int i = 0; i < amount; i++) {
      layers.append(mineSprite[i]);
      layers.append(monster2Sprite[i]);
      layers.append(monster1Sprite[i]);
    }
    layers.append(landLayer);
    layers.append(floorLayer);
    gameOver = false;
    //获取上次游戏变量
    if (Navigator.resume) {
      int[] loadGame = new int[N];
      readRecord(loadGame);
      score = loadGame[0];
      energy = loadGame[1];
      playerX = loadGame[2];
      playerY = loadGame[3];
      goodsSaved = loadGame[4];
      dif = loadGame[5];
      time = loadGame[6];
      xView = loadGame[8];
      yView = loadGame[9];
      playerSprite.setPosition(playerX, playerY);
      playerSprite.setVisible(true); // 显示玩家精灵
    }
    // 初始化游戏变量
    else {
      if (pass == 0) {
        score = 0; //分数初始化
      }
      energy = 50;
      goodsSaved = 0;
      time = 60000 - pass * 5000; //设置游戏时间
      // 随机放置玩家并调整视图窗口
      placeSprite(playerSprite, landLayer);
      playerX = randX;
      playerY = randY;
      playerSprite.setVisible(true); // 显示玩家精灵
      xView = playerSprite.getX() -
          ( (SCREEN_WIDTH - playerSprite.getWidth()) / 2);
      yView = playerSprite.getY() -
          ( (SCREEN_HEIGHT - playerSprite.getHeight()) / 2);
    }
    ring = 0; //绝对防御条件
    ring1 = 1;
    explosionSprite.setVisible(false); //设置爆炸动画为不可见
    ringSprite.setVisible(false); //设置防御为不可见
    explosionSprite.setFrame(0);
    layers.setViewWindow(xView, yView, SCREEN_WIDTH,
                         SCREEN_HEIGHT - infoBar.getHeight());
    // 开始音乐(在开始处)

      try {
        musicPlayer.setMediaTime(0);
        if (volume) {
        musicPlayer.start(); }
      }
      catch (MediaException me) {

    }
  }

  public void stop() {
    sleeping = true; // 关闭线程
    // 关闭游戏音乐播放
    if (volume) {
      try {
        musicPlayer.close();
        rescuePlayer.close();
        minePlayer.close();
        gameoverPlayer.close();
        winPlayer.close();
      }
      catch (Exception fdf) {}
    }
    writeHiScores(); //写入最高分数
    gameOver = true;
  }

  public void run() {
    Graphics g = getGraphics();
    // 游戏循环
    while (!sleeping) {
      update();
      draw(g);
      try {
        Thread.sleep(frameDelay);
        time = time - frameDelay;
      }
      catch (InterruptedException ie) {}
    }
  }

  private void update() {
    // 检测游戏结束
    if (!pause) {
      if (gameOver) {
        int keyState = getKeyStates();
        if ( (keyState & FIRE_PRESSED) != 0) {
          newGame(); // 开始新游戏
        }
        return; //否则返回
      }
      // 按键相应
      int keyState = getKeyStates();
      int xMove = 0, yMove = 0;
      if ( (keyState & LEFT_PRESSED) != 0) {
        if (ring == 3) {
          xMove = -8;
        }
        else {
          xMove = -6;
        }
      }
      else if ( (keyState & RIGHT_PRESSED) != 0) {
        if (ring == 3) {
          xMove = 8;
        }
        else {
          xMove = 6;
        }
      }
      if ( (keyState & UP_PRESSED) != 0) {
        if (ring == 3) {
          yMove = -8;
        }
        else {
          yMove = -6;
        }
      }
      else if ( (keyState & DOWN_PRESSED) != 0) {
        if (ring == 3) {
          yMove = 8;
        }
        else {
          yMove = 6;
        }
      }
      if (xMove != 0 || yMove != 0) {
        layers.setViewWindow(xView + xMove, yView + yMove, SCREEN_WIDTH,
                             SCREEN_HEIGHT - infoBar.getHeight());
        playerSprite.move(xMove, yMove);
        ringSprite.move(xMove, yMove);
        playerSprite.nextFrame();
      }
      //绝对防御设置
      if (ring == 2) {
        ring1 = 2; //绝对防御条件
        ring = 3;
        ringSprite.setPosition(playerSprite.getRefPixelX(),
                               playerSprite.getRefPixelY());
        ringSprite.setVisible(true); //防御可见
      }
      if (ring1 == 0) {
        ring = 0;
      }
      if (ring == 0) {
        ringSprite.setVisible(false);
        ring1 = 1;
      }
      //检查玩家精灵和陆地图层之间的冲突
      if (playerSprite.collidesWith(landLayer, true)) {
        // 恢复视图窗口和玩家最初的位置
        layers.setViewWindow(xView, yView, SCREEN_WIDTH,
                             SCREEN_HEIGHT - infoBar.getHeight());
        playerSprite.move( -xMove, -yMove);
        ringSprite.move( -xMove, -yMove);
      }
      else { // 如果没有冲突,
        playerX += xMove; //更新玩家位置
        playerY += yMove;
        //提交对视图窗口位置的改变
        xView += xMove;
        yView += yMove;
      }
      // 检测玩家与物品之间的冲突
      if (playerSprite.collidesWith(GoodsSprite, true)) {
        // 播放声音表示获得物品
        try {
          if (volume) {
            rescuePlayer.start();
          }
        }
        catch (MediaException me) {
        }
        goodsSaved = goodsSaved + 1; ; // 增加营获得的物品的数目
        score = score + 10 + 5 * dif + time / 1000; //增加玩家积分
        placeSprite(GoodsSprite, landLayer); // 随机把物品放在一个新的位置
      }
      //检测玩家与面包之间的冲突
      if (playerSprite.collidesWith(BreadSprite, true)) {
        // 播放音乐表示从面包获得能量
        if (volume) {
          try {
            Manager.playTone(ToneControl.C4 + 12, 250, 100);
          }
          catch (MediaException me) {
          }
        }
        if (energy == 50 || ring1 == 0) {
          ring = Math.min(ring + 1, 4); //绝对防御条件
        }
        energy = Math.min(energy + 15, 50); // 增加玩家的能量
        placeSprite(BreadSprite, landLayer); // 随机的把面包放在一个新的位置
      }
      for (int i = 0; i < amount; i++) {
        // 更新怪物
        monster2Sprite[i].update();
        monster1Sprite[i].update();
        // 检测玩家与地雷之间的冲突
        if (playerSprite.collidesWith(mineSprite[i], true)) {
          explosionSprite.setPosition(playerSprite.getRefPixelX() -
                                      ringSprite.getWidth() / 2,
                                      playerSprite.getRefPixelY() -
                                      ringSprite.getHeight() / 2);
          explosionSprite.setVisible(true); //爆炸精灵可见
          explosionSprite.setFrame(explosionCnt);
          // 播放撞到地雷的声音
          try {
            if (volume) {
              minePlayer.start();
            }
          }
          catch (MediaException me) {
          }
          if (ring == 3) {
            ring1--;
          }
          else {
            energy -= 20; // 减少玩家的能量
          }
          // 随机的把雷放在一个新的位置
          placeSprite(mineSprite[i], landLayer);
        }
        explosionCnt = explosionSprite.getFrame();
        explosionSprite.nextFrame();
        if (explosionCnt == 3) {
          explosionSprite.setVisible(false);
          explosionCnt = 0;
        }
        // 检测玩家与怪之间的冲突
        if (playerSprite.collidesWith(monster2Sprite[i], true)) {
          // 播放一个乐音表示撞到怪
          if (volume) {
            try {
              Manager.playTone(ToneControl.C4, 250, 100);
            }
            catch (MediaException me) {
            }
          }
          if (ring == 3) {
            ring1--;
          }
          else {
            energy -= 6;

⌨️ 快捷键说明

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