ADD file via upload

main
ppx98yace 4 months ago
parent 5dfb1bb841
commit 622094e4a9

@ -0,0 +1,111 @@
package com.snakegame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameController implements ActionListener {
private final Timer timer;
private final GamePanel panel;
private boolean isPaused = false;
public GameController(GamePanel panel) {
this.panel = panel;
this.timer = new Timer(panel.getConfig().getSpeed(), this);
}
public void start() {
timer.start();
}
public void pause() {
isPaused = !isPaused;
if (isPaused) {
timer.stop();
} else {
timer.start();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (!isPaused) {
gameLoop();
}
}
private void gameLoop() {
Snake snake1 = panel.getSnake1();
Snake snake2 = panel.getSnake2();
Food food = panel.getFood();
GameConfig config = panel.getConfig();
// 移动蛇
snake1.move();
if (config.getGameMode().equals("双人")) {
snake2.move();
}
// 碰撞检测
Point head1 = snake1.getHead();
if (CollisionUtils.checkWallCollision(head1, config) ||
snake1.getBody().subList(1, snake1.getBody().size()).contains(head1) ||
(config.getGameMode().equals("双人") && snake2.getBody().contains(head1))) {
gameOver();
return;
}
if (config.getGameMode().equals("双人")) {
Point head2 = snake2.getHead();
if (CollisionUtils.checkWallCollision(head2, config) ||
snake2.getBody().subList(1, snake2.getBody().size()).contains(head2) ||
snake1.getBody().contains(head2)) {
gameOver();
return;
}
}
// 食物检测
if (head1.equals(food.getPosition())) {
snake1.grow();
panel.increaseScore1();
food.respawn();
}
if (config.getGameMode().equals("双人")) {
Point head2 = snake2.getHead();
if (head2.equals(food.getPosition())) {
snake2.grow();
panel.increaseScore2();
food.respawn();
}
}
panel.repaint();
}
private void gameOver() {
timer.stop();
String message;
if (panel.getConfig().getGameMode().equals("单人")) {
message = "得分: " + panel.getScore1();
} else {
message = "得分: 蛇1 - " + panel.getScore1() + ", 蛇2 - " + panel.getScore2();
}
Object[] options = {"继续", "退出"};
int result = JOptionPane.showOptionDialog(panel,
message,
"游戏结束",
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE,
null,
options,
options[1]);
if (result == 0) {
Main.showSettingsFrame();
} else {
System.exit(0);
}
}
}
Loading…
Cancel
Save