我正在开发 Java 贪吃蛇游戏。大多数基本功能都已完成,我正在尝试添加一个重新启动功能,当游戏结束时按 ENTER 键时将触发该功能。所有逻辑似乎都能工作,蛇重置到开始位置,苹果获得新的随机位置等。但由于某种原因,我的 JPanels 不会重新绘制。你们可以看一下,看看是否能找出我做错了什么。
我已经从我的代码中制作了游戏循环、重置功能等的快照。如果您需要更多,请告诉我。
/*
* Main class, game loop, keyListener etc
*/
/*
* Here is my run method with game loop when gameOver, snake will no longer
* update.
*
*/
@Override
public void run() {
// game loop
while (running) {
if (!gameOver) {
update();
}
MainFrame.paint();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
* KeyListener, when ENTER is pressed call resetGame() method.
*/
if(key.getKeyCode()==KeyEvent.VK_ENTER && gameOver) {
resetGame();
}
/*
* resetGame method where I reset variables, create new default snake,
* clear JPanels etc.
*/
public void resetGame() {
score = 0;
snake.clear(); // clear arraylist
// .removAll() on both JPanels
MainFrame.clear();
// fields
gameOver = false;
newGame = true;
direction = Direction.RIGHT;
// create default snake
snake = new ArrayList<Point>();
size = 5;
for (int i = 0; i < size; i++) {
snake.add(new Point((size - i - 1) * MainFrame.getTileSize(), 0));
}
System.out.println(snake);
// create apple and set to random location
apple = randomApple();
}
/*
* MainFrame extends JFrame
* methods for repainting and clearing JPanels
*/
public static void paint() {
gamePanel.repaint();
sideHud.repaint();
}
public static void clear() {
gamePanel.removeAll();
sideHud.removeAll();
paint();
}
我的 JPanel 非常基本。我只是使用 Graphics2D 对象在 PaintComponent 方法中绘制所有内容。
这是我最近的解决方案(不起作用)。我也尝试过,离开游戏循环,然后在resetGame()方法中再次调用run(),我尝试在按下ENTER键时创建一个新的Main对象,但它们都不起作用。
提前致谢。
最佳答案
首先通过 if so 创建一个 boolean 值来检查游戏是否结束,当游戏结束时该 boolean 值设置为 true。当该 boolean 值变为 true 时,创建一个被调用的方法,该方法会重置游戏方法中的所有变量以及与游戏相关的任何其他变量。然后调用游戏方法(任何触发游戏运行的方法)。瞧,你的游戏已经重置了希望,这对你有帮助。
关于java - 重置游戏循环/重新启动游戏 java swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48990910/