2023-04-27 17:57:02 +02:00
|
|
|
import javax.swing.*;
|
|
|
|
import java.awt.*;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
import java.util.Random;
|
|
|
|
|
2023-04-11 09:45:48 +02:00
|
|
|
public class GridController {
|
|
|
|
private Grid model;
|
|
|
|
private GridView view;
|
2023-04-27 17:57:02 +02:00
|
|
|
private enum Mode { DISABLED, WALL, THESEE, EXIT }
|
|
|
|
private Mode editMode = Mode.DISABLED;
|
|
|
|
private JButton editTheseeButton;
|
|
|
|
private JButton editExitButton;
|
|
|
|
private JButton editWallButton;
|
2023-04-11 09:45:48 +02:00
|
|
|
|
|
|
|
public GridController(Grid model, GridView view) {
|
|
|
|
this.model = model;
|
|
|
|
this.view = view;
|
|
|
|
|
2023-04-27 17:57:02 +02:00
|
|
|
this.view.setGrid(this.model);
|
2023-04-11 09:45:48 +02:00
|
|
|
|
2023-04-27 17:57:02 +02:00
|
|
|
TheseeController theseeController = new TheseeController(this.model.getThesee(), this.view);
|
|
|
|
|
|
|
|
this.view.setPreferredSize(new Dimension(700, 500));
|
|
|
|
this.view.setBackground(Color.WHITE);
|
|
|
|
|
|
|
|
this.view.addMouseListener(new MouseAdapter() {
|
|
|
|
public void mouseClicked(MouseEvent e) {
|
|
|
|
Square square = view.click(e);
|
2023-04-11 09:45:48 +02:00
|
|
|
|
2023-04-27 17:57:02 +02:00
|
|
|
if (square != null) {
|
|
|
|
if (editMode == Mode.WALL) {
|
|
|
|
if (square.isWall()) {
|
|
|
|
square.setEmpty();
|
|
|
|
} else {
|
|
|
|
square.setWall();
|
|
|
|
}
|
|
|
|
view.repaint();
|
|
|
|
} else if (editMode == Mode.THESEE) {
|
|
|
|
model.getThesee().setSquare(square);
|
|
|
|
view.repaint();
|
|
|
|
} else if (editMode == Mode.EXIT) {
|
|
|
|
square.setExit();
|
|
|
|
view.repaint();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
editWallButton = new JButton("Enlever/Ajouter Murs");
|
|
|
|
editWallButton.addActionListener(new ActionListener() {
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
if (editMode == Mode.DISABLED) {
|
|
|
|
editMode = Mode.WALL;
|
|
|
|
editWallButton.setText("Mode Dessin");
|
|
|
|
editTheseeButton.setEnabled(false);
|
|
|
|
editExitButton.setEnabled(false);
|
|
|
|
} else {
|
|
|
|
editMode = Mode.DISABLED;
|
|
|
|
editWallButton.setText("Enlever/Ajouter Murs");
|
|
|
|
editTheseeButton.setEnabled(true);
|
|
|
|
editExitButton.setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.view.add(editWallButton);
|
|
|
|
|
|
|
|
editTheseeButton = new JButton("Placer Joueur");
|
|
|
|
editTheseeButton.addActionListener(new ActionListener() {
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
if (editMode == Mode.DISABLED) {
|
|
|
|
editMode = Mode.THESEE;
|
|
|
|
editTheseeButton.setText("Mode Dessin");
|
|
|
|
editWallButton.setEnabled(false);
|
|
|
|
editExitButton.setEnabled(false);
|
|
|
|
} else {
|
|
|
|
editMode = Mode.DISABLED;
|
|
|
|
editTheseeButton.setText("Placer Joueur");
|
|
|
|
editWallButton.setEnabled(true);
|
|
|
|
editExitButton.setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.view.add(editTheseeButton);
|
|
|
|
|
|
|
|
editExitButton = new JButton("Placer Sortie");
|
|
|
|
editExitButton.addActionListener(new ActionListener() {
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
if (editMode == Mode.DISABLED) {
|
|
|
|
editMode = Mode.EXIT;
|
|
|
|
editExitButton.setText("Mode Dessin");
|
|
|
|
editWallButton.setEnabled(false);
|
|
|
|
editTheseeButton.setEnabled(false);
|
|
|
|
} else {
|
|
|
|
editMode = Mode.DISABLED;
|
|
|
|
editExitButton.setText("Placer Sortie");
|
|
|
|
editWallButton.setEnabled(true);
|
|
|
|
editTheseeButton.setEnabled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.view.add(editExitButton);
|
2023-04-11 09:45:48 +02:00
|
|
|
}
|
|
|
|
|
2023-04-27 17:57:02 +02:00
|
|
|
/**
|
|
|
|
* Randomly fills the grid with walls, an exit and Thésée
|
|
|
|
*/
|
|
|
|
public void random() {
|
|
|
|
try {
|
|
|
|
Random rand = new Random();
|
|
|
|
for (int i = 0; i < this.model.getSize(); i++) {
|
|
|
|
for (int j = 0; j < this.model.getSize(); j++) {
|
|
|
|
if (rand.nextInt(3) == 0) this.model.getSquare(i, j).setWall();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.model.getSquare(rand.nextInt(this.model.getSize()), rand.nextInt(this.model.getSize())).setExit();
|
|
|
|
|
|
|
|
this.model.getThesee().setSquare(this.model.getSquare(rand.nextInt(this.model.getSize()), rand.nextInt(this.model.getSize())));
|
|
|
|
} catch (Exception e) {
|
|
|
|
System.out.println(e.getMessage());
|
|
|
|
}
|
2023-04-11 09:45:48 +02:00
|
|
|
}
|
|
|
|
|
2023-04-27 17:57:02 +02:00
|
|
|
public GridView getView() {
|
|
|
|
return this.view;
|
2023-04-11 09:45:48 +02:00
|
|
|
}
|
|
|
|
}
|