Select Git revision
GameState.java
-
Simon Peter Marneros authoredSimon Peter Marneros authored
GameState.java 7.75 KiB
import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
public class GameState {
private static final int WIDTH = 800, HEIGHT = 600;
private static final int BUNNY_SIZE = 40, CAR_WIDTH = 80, CAR_HEIGHT = 40;
private static final int LANE_HEIGHT = 60, GRASS_HEIGHT = 80, NUM_LANES = 5;
private static final int HOUSE_Y = 50, HOUSE_SIZE = 60;
private Map<String, Player> players = new ConcurrentHashMap<>();
private List<Car> cars = new ArrayList<>();
private boolean gameOver = false;
private String winner = null;
private int score = 0;
private int level = 1;
public void startGame(boolean isSinglePlayer) {
players.clear();
cars.clear();
gameOver = false;
winner = null;
score = 0;
level = 1;
players.put("PLAYER1", new Player(200, HEIGHT - BUNNY_SIZE - 10, Color.RED));
if (!isSinglePlayer) {
players.put("PLAYER2", new Player(600, HEIGHT - BUNNY_SIZE - 10, Color.BLUE));
}
initializeCars();
}
private void initializeCars() {
Random rand = new Random();
for (int i = 0; i < NUM_LANES; i++) {
int y = HOUSE_Y + HOUSE_SIZE + i * (LANE_HEIGHT + GRASS_HEIGHT) + (LANE_HEIGHT - CAR_HEIGHT) / 2;
int speed = (rand.nextInt(3) + 2) * (rand.nextBoolean() ? 1 : -1);
cars.add(new Car(rand.nextInt(WIDTH), y, speed));
}
}
public void update() {
moveCars();
checkCollisions();
checkWinCondition();
updateScore();
}
private void moveCars() {
for (Car car : cars) {
car.move();
if (car.getX() > WIDTH) car.setX(-CAR_WIDTH);
if (car.getX() < -CAR_WIDTH) car.setX(WIDTH);
}
}
private void checkCollisions() {
for (Player player : players.values()) {
for (Car car : cars) {
if (car.checkCollision(player.getX(), player.getY(), BUNNY_SIZE)) {
player.reset();
score = Math.max(0, score - 50);
}
}
}
}
private void checkWinCondition() {
for (Map.Entry<String, Player> entry : players.entrySet()) {