我们创建了一个迷宫游戏,玩家需要以特定顺序收集钥匙才能获胜。在游戏结束时,如果玩家未能按照该特定顺序收集钥匙,则玩家可以选择重新启动(按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;
}
查找游戏中应该还原至重新启动时最初值的所有内容。
这很简单,但我希望它可以理解。