我們創建了一個迷宮遊戲,玩家需要按特定順序收集密鑰才能獲勝。在遊戲結束時,如果玩家未按照特定順序收集密鑰,玩家可以選擇重新啓動(按R)或退出(按Q)遊戲。重新啓動java遊戲時出現問題
問題是當玩家選擇重新啓動時,會彈出一個新遊戲,是的,但舊的或以前的遊戲仍在運行。
這裏是Launcher
類:
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);
}
這裏是一個代碼,如果玩家收集鑰匙的正確順序,並調用WrondEndState
如果玩家是錯誤的(這位於Inventory
類檢查,從Launcher
和WrongEndState
類分開:
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
(或重啓退出):
裏面的if-else這個類中的handler.getKeyManager().restart
的.restart
是一個關鍵:
restart = keys[KeyEvent.VK_R];
,所以是.exit
在handler.getKeyManager().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);
}
這是gameStart();
方法的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
}
}
請幫助,如果你需要更多的代碼,以幫助不知道。
老實說,我認爲你在這裏添加了太多的代碼。閱讀你的問題,通過很多代碼來調試有點困難。你能否只包括啓動遊戲的代碼,檢查用戶是否已經在WrongEndState中結束,檢查用戶的輸入是Restart還是Qui,t以及開始新遊戲的位置? –
請告訴您是否需要更多或更少的代碼。感謝鴿王先生。 – Wisteria
'handler.getKeyManager()。restart'重新啓動一個方法或一個鍵?當遊戲結束時,你如何關閉它也很重要。 – nullpointer