Skip to content
Snippets Groups Projects
Select Git revision
  • 8cc55c1e3857faf5fd254ea7d2179cf593b5e832
  • main default protected
  • jvu2-main-patch-76854
  • jvu2-main-patch-36437
4 results

GameState.java

Blame
  • 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()) {