/** ゲームループ */ 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(); } } }