2016-11-30 79 views
2

我们创建了一个迷宫游戏,玩家需要按特定顺序收集密钥才能获胜。在游戏结束时,如果玩家未按照特定顺序收集密钥,玩家可以选择重新启动(按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类检查,从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(或重启退出):

里面的if-else这个类中的handler.getKeyManager().restart.restart是一个关键:

restart = keys[KeyEvent.VK_R];

,所以是.exithandler.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 

    } 
} 

请帮助,如果你需要更多的代码,以帮助不知道。

+0

老实说,我认为你在这里添加了太多的代码。阅读你的问题,通过很多代码来调试有点困难。你能否只包括启动游戏的代码,检查用户是否已经在WrongEndState中结束,检查用户的输入是Restart还是Qui,t以及开始新游戏的位置? –

+0

请告诉您是否需要更多或更少的代码。感谢鸽王先生。 – Wisteria

+0

'handler.getKeyManager()。restart'重新启动一个方法或一个键?当游戏结束时,你如何关闭它也很重要。 – nullpointer

回答

1

如果您希望重新启动,请勿创建new Game。这是不必要的。

当游戏开始时,一个新的游戏实例被创建,这很好。开始调用,这很好。在一场比赛中,有几件事情,状态,对象是他们都具有初始状态/价值的对象。

可以说你有一个游戏,你所要做的就是向前跳,跳跃。有一个得分和时间花在当前运行,玩家有位置等。如果你死了,你希望它重新启动。您不会通过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如果没有看到实际的代码,你很难说出你应该做什么,但你可以像访问public.somePublicVariable = 0一样访问公共领域;或者通过getter和setter,比如game.setVariable(0);如果您需要更具体的答案,考虑询问包含每个游戏的其他问题是否应播放应重置的相关变量。 – eldo