import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.*;
// Les cases du plateau : les coordonnées et le robot présent
class Case{
static int xMax, yMax;
private int x, y;
private Robot r;
public Case(int x, int y){
this.x = x;
this.y = y;
r = null;
}
public Robot getRobot(){return r;}
public void setRobot(Robot r){this.r=r;}
public void removeRobot(){this.r=null;}
public boolean hasRobot(){return (r != null);}
}
// La classe Monde représente le monde cad les robots et le plateau
class Monde{
ArrayList<Robot> lesRobots = new ArrayList<Robot>();
Case [][] plateau;
public int xMax, yMax;
public Monde(int xMax, int yMax){
Case.xMax = this.xMax = xMax;
Case.yMax = this.yMax = yMax;
plateau = new Case[xMax][yMax];
// initialisation du plateau
for(int i=0;i < xMax;i++)
for(int j=0;j < yMax;j++)
plateau[i][j] = new Case(i,j);
// creation des robots
lesRobots.add(new RobotFou(2));
lesRobots.add(new RobotFou(2));
lesRobots.add(new RobotFou(2));
lesRobots.add(new RobotTueur());
lesRobots.add(new RobotTueur());
lesRobots.add(new RobotTueur());
lesRobots.add(new RobotTueur());
lesRobots.add(new RobotTueur());
lesRobots.add(new RobotTueur());
// mise à jour du plateau en fonction des positions des robots
for(Robot r : lesRobots){
int x = r.getX(), y = r.getY();
plateau[x][y].setRobot(r);
}
}
// update() permet de déplacer l’ensemble des robots et de mettre à jour le
plateau en conséquent
// elle est appelée à chaque nouvelle itération de la simulation
public void update(){
Robot r;
for(int i = 0; i < lesRobots.size(); i++){
r = lesRobots.get(i);
if(r instanceof RobotMobile){
mai 14, 13 13:42 Page 1/3robots.java int x = r.getX(), y = r.getY();
// déplacement du robot
((RobotMobile)r).deplace();
plateau[x][y].removeRobot();
// tant qu’il y a collision et que le robot n’est pas mort action du
robot déjà présent sur la case
while((plateau[r.getX()][r.getY()].hasRobot()) && (! r.isMort())){
plateau[r.getX()][r.getY()].getRobot().action(r);
}
// si le robot est mort on le supprime sinon on met à jour le plate
au
if(! r.isMort())
plateau[r.getX()][r.getY()].setRobot(r);
else
lesRobots.remove(r);
}
}
}
}
// L’interface graphique
class Interface extends JFrame{
private JLabel [][] grille = new JLabel[Case.xMax][Case.yMax];
private Monde monde;
public Interface(final Monde monde){
super("Le monde des robots");
this.monde = monde;
setBounds(100,100,400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pan = getContentPane();
pan.setLayout(new BorderLayout());
// le Jpanel p1 pour les boutons de commandes
// le Jpanel p2 pour l’affichage des robots
JPanel p1 = new JPanel(), p2 = new JPanel();
p1.setLayout(new FlowLayout());
p2.setLayout(new GridLayout(monde.xMax,monde.yMax));
pan.add(p1,BorderLayout.NORTH);
pan.add(p2,BorderLayout.CENTER);
// les robots sont une matrice de JLabel
for(int i=0;i < monde.xMax;i++)
for(int j=0;j < monde.yMax;j++){
grille[i][j] = new JLabel();
grille[i][j].setHorizontalAlignment(SwingConstants.CENTER);
grille[i][j].setBorder(LineBorder.createGrayLineBorder());
p2.add(grille[i][j]);
}
// update() permet d’afficher les robots dans les cases adéquates de la g
rille
update();
// Bouton next à ajouter pour faire évoluer le monde et l’interface
}
// Mise à jour de l’interface en fonction de la position des robots sur le p
lateau
private void update(){
for(int i=0;i < monde.xMax;i++)
for(int j=0;j < monde.yMax;j++)
if(monde.plateau[i][j].hasRobot())
grille[i][j].setText(monde.plateau[i][j].getRobot().getName());
else
grille[i][j].setText("");
}
}
mai 14, 13 13:42 Page 2/3robots.java
Printed by Roselyne Chotin Avot
Lundi mai 12, 2014 1/2robots.java