Files
archived-L3-racing-game/view/PanneauCircuit.java
2025-11-06 20:29:58 +01:00

81 lines
2.3 KiB
Java

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;
};
}
}