重新启动java游戏时出现问题
我们创建了一个迷宫游戏,玩家需要按特定顺序收集密钥才能获胜。在游戏结束时,如果玩家未按照特定顺序收集密钥,玩家可以选择重新启动(按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
}
}
请帮助,如果你需要更多的代码,以帮助不知道。
如果您希望重新启动,请勿创建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;
}
查找你的游戏的一切,应该是恢复在重新启动其初始值。
这是非常简单的,但我希望它是可以理解的。
老实说,我认为你在这里添加了太多的代码。阅读你的问题,通过很多代码来调试有点困难。你能否只包括启动游戏的代码,检查用户是否已经在WrongEndState中结束,检查用户的输入是Restart还是Qui,t以及开始新游戏的位置? –
请告诉您是否需要更多或更少的代码。感谢鸽王先生。 – Wisteria
'handler.getKeyManager()。restart'重新启动一个方法或一个键?当游戏结束时,你如何关闭它也很重要。 – nullpointer