Beispiel #1
1
  /**
   * 描画処理
   *
   * @param 描画オブジェクト
   */
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // 背景を黒で塗りつぶす
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());

    // X方向のオフセットを計算
    int offsetX = MainPanel.WIDTH / 2 - (int) player.getX();
    // マップの端ではスクロールしないようにする
    offsetX = Math.min(offsetX, 0);
    offsetX = Math.max(offsetX, MainPanel.WIDTH - map.getWidth());

    // Y方向のオフセットを計算
    int offsetY = MainPanel.HEIGHT / 2 - (int) player.getY();
    // マップの端ではスクロールしないようにする
    offsetY = Math.min(offsetY, 0);
    offsetY = Math.max(offsetY, MainPanel.HEIGHT - map.getHeight());

    // マップを描画
    map.draw(g, offsetX, offsetY);

    // プレイヤーを描画
    player.draw(g, offsetX, offsetY);

    // スプライトを描画
    // マップにいるスプライトを取得
    LinkedList sprites = map.getSprites();
    Iterator iterator = sprites.iterator();
    while (iterator.hasNext()) {
      Sprite sprite = (Sprite) iterator.next();
      sprite.draw(g, offsetX, offsetY);
    }
  }
Beispiel #2
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();
      }
    }
  }