重新启动Java游戏的麻烦



我们创建了一个迷宫游戏,玩家需要以特定顺序收集钥匙才能获胜。在游戏结束时,如果玩家未能按照该特定顺序收集钥匙,则玩家可以选择重新启动(按R)或退出(按Q)游戏。

问题是玩家选择重新启动时,新游戏弹出了,是的,但是旧游戏或以前的游戏仍在运行。

这是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); 
}

这是该代码检查播放器是否收集了正确的密钥顺序,并在播放器错误(如果位于Inventory类中)调用WrondEndState,则与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];

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);
}

这是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  
     }
}

请帮助,并告诉您是否需要更多代码来提供帮助。

如果要重新启动,请勿创建new Game。多数民众赞成。

当游戏启动新的游戏实例时,就可以了。开始打电话,这很好。在游戏中,有几件事,状态,对象,它们都有一个纯净的状态/价值。

假设您有一场游戏,您要做的就是向前跑,跳跃。当前跑步有一个得分和时间,玩家有位置等。如果您死了,您希望它重新启动。您不会通过new Game创建其他游戏您要做的就是将所有内容还原到其初始状态/价值。

这个虚构游戏重置方法看起来像这样:

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

查找游戏中应该还原至重新启动时最初值的所有内容。

这很简单,但我希望它可以理解。

最新更新