Пример #1
0
  /** ゲームループ */
  public void run() {
    while (true) {
      if (goLeftKey.isPressed()) {
        // 左キーが押されていれば左向きに加速
        player.accelerateLeft();
      } else if (goRightKey.isPressed()) {
        // 右キーが押されていれば右向きに加速
        player.accelerateRight();
      } else {
        // 何も押されてないときは停止
        player.stop();
      }

      if (jumpKey.isPressed()) {
        // ジャンプする
        player.jump();
      }

      // プレイヤーの状態を更新
      player.update();

      // マップにいるスプライトを取得
      LinkedList sprites = map.getSprites();
      Iterator iterator = sprites.iterator();
      while (iterator.hasNext()) {
        Sprite sprite = (Sprite) iterator.next();

        // スプライトの状態を更新する
        sprite.update();

        // プレイヤーと接触してたら
        if (player.isCollision(sprite)) {
          if (sprite instanceof Coin) { // コイン
            Coin coin = (Coin) sprite;
            // コインは消える
            sprites.remove(coin);
            // ちゃり〜ん
            coin.play();
            // spritesから削除したので
            // breakしないとiteratorがおかしくなる
            break;
          } else if (sprite instanceof Kuribo) { // 栗ボー
            Kuribo kuribo = (Kuribo) sprite;
            // 上から踏まれてたら
            if ((int) player.getY() < (int) kuribo.getY()) {
              // 栗ボーは消える
              sprites.remove(kuribo);
              // サウンド
              kuribo.play();
              // 踏むとプレイヤーは再ジャンプ
              player.setForceJump(true);
              player.jump();
              break;
            } else {
              // ゲームオーバー
              gameOver();
            }
          } else if (sprite instanceof Accelerator) { // 加速アイテム
            // アイテムは消える
            sprites.remove(sprite);
            Accelerator accelerator = (Accelerator) sprite;
            // サウンド
            accelerator.play();
            // アイテムをその場で使う
            accelerator.use(player);
            break;
          }
        }
      }

      // 再描画
      repaint();

      // 休止
      try {
        Thread.sleep(20);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }