2016-11-30 13 views
2

メイズゲームでは、勝つために特定の順序でキーを収集する必要があります。ゲームの最後に、プレーヤーがその特定の順序でキーを収集できなかった場合、プレイヤーはゲームを再開(Rを押す)または終了(Qを押す)を選択することができます。Javaゲームを再起動する際のトラブル

問題は、プレイヤーが再起動を選択したときに新しいゲームがポップアップする、はい、古いゲームまたは前のゲームがまだ実行中であることです。 、ここで

public class Launcher { 
public static void main(String[] args) throws Exception{ 

    Game game = new Game("DUNGEON ESCAPE", 500,500); 
    game.start(); 

    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("C:\\Users\\user\\Documents\\NetBeansProjects\\ThisMaze\\src\\OurMaze\\BGM.wav")); 
    Clip clip = AudioSystem.getClip(); 
    clip.open(inputStream); 
    clip.loop(Clip.LOOP_CONTINUOUSLY); 
    Thread.sleep(10000000); 

} 

は、プレイヤーが(これは Inventoryクラスに位置しており、キーの正しい順序を収集し、プレイヤーが間違っている場合 WrondEndStateを呼び出すかどうかをチェックするコードです:

はここLauncherクラスですLauncherWrongEndStateクラスから分離:

public void addItem(Item item){ 


    // R - 0 O - 1 Y - 2 G - 3 B - 4 I - 5 V - 6 
      KeyQueue.add(item.getId()); 


      Iterator<Integer> kq = KeyQueue.iterator(); 

      if(KeyQueue.size() == 7){  
       while(kq.hasNext()){ 
        if(! (BaseQueue.poll() == KeyQueue.poll())) 
        { 

         State.setState(WrongEndState); 
         break; 
        } else 
         State.setState(RightEndState); 

       } 
      } 

そして、これは一部またはプレイヤーが何をしたいのかチェックしWrondEndState(再起動またはであります)終了:このクラスであれば、他のインサイド

handler.getKeyManager().restart .restartが重要です:

restart = keys[KeyEvent.VK_R];

そしてそうはhandler.getKeyManager().exit.exitです:

exit = keys[KeyEvent.VK_Q];

public void tick(){ 

    if(handler.getKeyManager().restart) 
     try { 
      gameStart(); 

    } catch(Exception ioe){ 
      System.out.print("Error."); } 
    if(handler.getKeyManager().exit) 
     System.exit(0); 
} 

これはです方法のif-elseコードが呼んでいる:

public void gameStart() throws Exception{ 
    Game game = new Game("DUNGEON ESCAPE", 500,500); 
    game.start(); 

    AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("C:\\Users\\user\\Documents\\NetBeansProjects\\ThisMaze\\src\\OurMaze\\BGM.wav")); 
    Clip clip = AudioSystem.getClip(); 
    clip.open(inputStream); 
    clip.loop(Clip.LOOP_CONTINUOUSLY); 
    Thread.sleep(10000000); // looping as long as this thread is alive 

    } 
} 

を助け、あなたは助けるために、コードの多くを必要とする場合は教えてください。

+0

正直、あなたのコードをあまりにも多く追加したと思います。あなたの質問を読んで、それは非常に多くのコード行で少し難しいデバッグです。ユーザーがWrongEndStateで終了したかどうかを確認し、RestartまたはQui、tのいずれかのユーザーの入力を確認して、新しいゲームを開始する場所を確認してください。 –

+0

多かれ少なかれコードが必要かどうかを教えてください。ピジョン氏に感謝します。 – Wisteria

+0

'handler.getKeyManager()。restart'はメソッドまたはキーを再起動しますか?また、ゲームが終了したときに、どのように閉じることが重要です。 – nullpointer

答えて

1

再起動したい場合はnew Gameを作成しないでください。それは一義的ではない。

ゲームが開始されると、新しいゲームインスタンスが作成されます。ちょうどいいです。ゲームには、いくつかの状態、状態、オブジェクトwhaverがすべて存在する状態/値があります。

あなたはゲームを持っていると言いましょう。あなたがしなければならないことは、前方に走ってジャンプすることだけです。現在の試合に費やしたスコアと時間、選手のポジションなどがあります。あなたが死んでも、それを再開したい。あなたはnew Game によって他のゲームを作成しないでください。すべてを元の状態/値に復元するだけです。

このfictianalゲームresetGame方法は、次のようになります。

private void resetGame(){ 
    player.x = 0; //assuming player starts at 0,0 
    player.y = 0; 
    score = 0; 
    time = 0; 
} 

は、再起動時に初期値に復元されなければならないあなたのゲーム内のすべてをして下さい。

これは非常に簡素化されていますが、わかりやすくありがとうございます。

+0

申し訳ありませんが、返信が遅れました。私はすべての変数を見つけて変更したと思う。しかし、ゲームは新しい変数を使用しません。変数、ブール値、配列を別のクラス_の値に変更する例を教えてください。 – Wisteria

+0

@Wisteria実際のコードを見ることなく何をすべきかを知るのは難しいですが、game.somePublicVariable = 0のようにパブリックフィールドにアクセスすることはできます。 getterやsetterのようにgame.setVariable(0);より具体的な答えが必要な場合は、すべてのゲームを含む他の質問にリセットする必要のある関連する変数を再生することを検討することを検討してください。 – eldo

関連する問題