141 lines
5.1 KiB
Java
141 lines
5.1 KiB
Java
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;
|
|
|
|
public class EditorController extends GridController {
|
|
private Editor model;
|
|
private EditorView view;
|
|
private enum Mode { DISABLED, WALL, THESEE, EXIT }
|
|
private Mode editMode = Mode.DISABLED;
|
|
private JButton editTheseeButton = new JButton("Placer Joueur");
|
|
private JButton editExitButton = new JButton("Placer Sortie");
|
|
private JButton editWallButton = new JButton("Enlever/Ajouter Murs");
|
|
|
|
public EditorController(Editor model, EditorView view) {
|
|
super(model.getGrid(), view);
|
|
this.model = model;
|
|
this.view = view;
|
|
|
|
this.view.addMouseListener(new MouseAdapter() {
|
|
public void mouseClicked(MouseEvent e) {
|
|
edit(view.click(e));
|
|
}
|
|
});
|
|
|
|
JPanel buttons = new JPanel();
|
|
|
|
editWallButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
if (editMode == Mode.DISABLED) {
|
|
editWallButton.setText("Mode Dessin");
|
|
setEditMode(Mode.WALL);
|
|
} else {
|
|
editWallButton.setText("Enlever/Ajouter Murs");
|
|
setEditMode(Mode.DISABLED);
|
|
}
|
|
}
|
|
});
|
|
buttons.add(editWallButton);
|
|
|
|
editTheseeButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
if (editMode == Mode.DISABLED) {
|
|
editTheseeButton.setText("Mode Dessin");
|
|
setEditMode(Mode.THESEE);
|
|
} else {
|
|
editTheseeButton.setText("Placer Joueur");
|
|
setEditMode(Mode.DISABLED);
|
|
}
|
|
}
|
|
});
|
|
buttons.add(editTheseeButton);
|
|
|
|
editExitButton.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent e) {
|
|
if (editMode == Mode.DISABLED) {
|
|
editExitButton.setText("Mode Dessin");
|
|
setEditMode(Mode.EXIT);
|
|
} else {
|
|
editExitButton.setText("Placer Sortie");
|
|
setEditMode(Mode.DISABLED);
|
|
}
|
|
}
|
|
});
|
|
buttons.add(editExitButton);
|
|
this.view.add(buttons, BorderLayout.NORTH);
|
|
}
|
|
|
|
private void edit(Square square) {
|
|
if (square != null) {
|
|
if (this.editMode == Mode.WALL) {
|
|
if (square.isWall()) {
|
|
square.setEmpty();
|
|
} else {
|
|
try {
|
|
square.setWall();
|
|
} catch (Exception ex) {
|
|
JOptionPane.showMessageDialog(this.view, ex.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
|
|
}
|
|
}
|
|
this.view.repaint();
|
|
} else if (this.editMode == Mode.THESEE) {
|
|
try {
|
|
this.model.getGrid().getThesee().setSquare(square);
|
|
} catch (Exception ex) {
|
|
JOptionPane.showMessageDialog(this.view, ex.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
|
|
}
|
|
this.view.repaint();
|
|
} else if (this.editMode == Mode.EXIT) {
|
|
try {
|
|
square.setExit();
|
|
} catch (Exception ex) {
|
|
JOptionPane.showMessageDialog(this.view, ex.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
|
|
}
|
|
this.view.repaint();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the edit mode.
|
|
* @param mode The mode to set.
|
|
*/
|
|
private void setEditMode(Mode mode) {
|
|
this.editMode = mode;
|
|
if (mode != Mode.DISABLED) {
|
|
this.editTheseeButton.setEnabled(mode == Mode.THESEE);
|
|
this.editExitButton.setEnabled(mode == Mode.EXIT);
|
|
this.editWallButton.setEnabled(mode == Mode.WALL);
|
|
} else {
|
|
this.editTheseeButton.setEnabled(true);
|
|
this.editExitButton.setEnabled(true);
|
|
this.editWallButton.setEnabled(true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Randomly fills the grid with an exit, Thésée and walls.
|
|
*/
|
|
public void random() {
|
|
try {
|
|
Random rand = new Random();
|
|
Grid gridModel = this.model.getGrid();
|
|
|
|
gridModel.getSquare(rand.nextInt(gridModel.getSize()), rand.nextInt(gridModel.getSize())).setExit();
|
|
gridModel.getThesee().setSquare(gridModel.getSquare(rand.nextInt(gridModel.getSize()), rand.nextInt(gridModel.getSize())));
|
|
|
|
for (int i = 0; i < gridModel.getSize(); i++) {
|
|
for (int j = 0; j < gridModel.getSize(); j++) {
|
|
if (!gridModel.getSquare(i, j).isExit() && !gridModel.getSquare(i, j).isThesee() && rand.nextInt(3) == 0) gridModel.getSquare(i, j).setWall();
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.println(e.getMessage());
|
|
}
|
|
}
|
|
}
|