package view; import javax.swing.*; import java.awt.*; import java.awt.geom.Ellipse2D; import model.*; /** * Panneau qui dessine le circuit et les voitures. * Il se met à jour à chaque étape du jeu. */ public class PanneauCircuit extends JPanel { private Game jeu; public PanneauCircuit(Game jeu) { this.jeu = jeu; setBackground(Color.DARK_GRAY); } public void mettreAJour(Game jeu) { this.jeu = jeu; repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Map map = jeu.getMap(); int tailleCase = 40; // Dessin de la grille for (int y = 0; y < 10; y++) { for (int x = 0; x < 20; x++) { Circuit.Cell cell = map.getCell(x, y); g2.setColor(couleurCellule(cell)); g2.fillRect(x * tailleCase, y * tailleCase, tailleCase, tailleCase); g2.setColor(Color.BLACK); g2.drawRect(x * tailleCase, y * tailleCase, tailleCase, tailleCase); } } // Dessin des voitures Car[] voitures = jeu.getCars(); for (int i = 0; i < voitures.length; i++) { Car v = voitures[i]; int pos = v.getPosition(); Point p = map.getPath(pos); int px = p.x * tailleCase + 5; int py = p.y * tailleCase + 5; g2.setColor(couleurVoiture(i)); g2.fill(new Ellipse2D.Double(px, py, tailleCase - 10, tailleCase - 10)); } } /** Couleur en fonction du type de cellule */ private Color couleurCellule(Circuit.Cell cell) { return switch (cell) { case ROAD -> Color.GRAY; case START -> Color.GREEN; case FINISH -> Color.RED; case YROAD -> Color.YELLOW; default -> Color.WHITE; }; } /** Couleur de chaque voiture */ private Color couleurVoiture(int i) { return switch (i) { case 0 -> Color.RED; case 1 -> Color.BLUE; case 2 -> Color.ORANGE; default -> Color.MAGENTA; }; } }