From c098ee634ed3afe2c1abc54afef915e791570f9f Mon Sep 17 00:00:00 2001 From: Allan POINT Date: Fri, 7 Jan 2022 09:48:48 +0100 Subject: [PATCH] Ajout des classes CellulesVivantes, CompteurCellule, ObservableCellule et Position --- code/jeu de la vie/src/model/Arbitre.java | 17 ++++-- .../src/model/ArbitreConwayStyle.java | 56 +++--------------- code/jeu de la vie/src/model/Cellule.java | 7 ++- .../src/model/CellulesVivantes.java | 17 ++++++ .../src/model/CompteurDeCellule.java | 59 +++++++++++++++++++ .../src/model/ObservableCellule.java | 30 ++++++++++ code/jeu de la vie/src/model/Plateau.java | 26 ++++++-- code/jeu de la vie/src/model/Position.java | 19 ++++++ code/jeu de la vie/src/model/Regles.java | 5 -- 9 files changed, 172 insertions(+), 64 deletions(-) create mode 100644 code/jeu de la vie/src/model/CellulesVivantes.java create mode 100644 code/jeu de la vie/src/model/CompteurDeCellule.java create mode 100644 code/jeu de la vie/src/model/ObservableCellule.java create mode 100644 code/jeu de la vie/src/model/Position.java delete mode 100644 code/jeu de la vie/src/model/Regles.java diff --git a/code/jeu de la vie/src/model/Arbitre.java b/code/jeu de la vie/src/model/Arbitre.java index 62bd027..e242e0c 100644 --- a/code/jeu de la vie/src/model/Arbitre.java +++ b/code/jeu de la vie/src/model/Arbitre.java @@ -2,12 +2,21 @@ package model; public abstract class Arbitre { - Regles regle; - Plateau plateau; + private Plateau plateau; + private CompteurDeCellule compteurCell; + private CellulesVivantes cellulesVivantes; - public Arbitre(Plateau plateau, Regles regle) { - this.regle = regle; + public Arbitre(Plateau plateau) { this.plateau = plateau; + cellulesVivantes = new CellulesVivantes(); + compteurCell = new CompteurDeCellule(); + } + public Plateau getPlateau(){ + return plateau; + } + + protected CompteurDeCellule getCompteurCell(){ + return getCompteurCell(); } public abstract CellState VerifierChangementCellules(int x, int y); } diff --git a/code/jeu de la vie/src/model/ArbitreConwayStyle.java b/code/jeu de la vie/src/model/ArbitreConwayStyle.java index 161ebe3..c480c85 100644 --- a/code/jeu de la vie/src/model/ArbitreConwayStyle.java +++ b/code/jeu de la vie/src/model/ArbitreConwayStyle.java @@ -2,8 +2,8 @@ package model; public class ArbitreConwayStyle extends Arbitre{ - public ArbitreConwayStyle(Plateau plateau, Regles regle) { - super(plateau, regle); + public ArbitreConwayStyle(Plateau plateau) { + super(plateau); } @Override @@ -14,60 +14,22 @@ public class ArbitreConwayStyle extends Arbitre{ if(verifierMort(x, y)) { return CellState.DIE; } - return plateau.getCell(x, y).estAlive() ? CellState.LIVE : CellState.DIE; + return getPlateau().getCell(x, y).estAlive() ? CellState.LIVE : CellState.DIE; } private boolean verifierNaissance(int x, int y) { - int cpt = compterNbCellAutour(x, y); - if(cpt == 3 && !plateau.getCell(x, y).estAlive()) { - return true; + int cpt = getCompteurCell().compteNombreCellulesAutour(x, y, getPlateau()); + if(cpt == 3 && !getPlateau().getCell(x, y).estAlive()) { + return true; } return false; } private boolean verifierMort(int x, int y) { - int cpt = compterNbCellAutour(x, y); - if(!(cpt == 2 || cpt == 3) && plateau.getCell(x, y).estAlive()) { - return true; + int cpt = getCompteurCell().compteNombreCellulesAutour(x, y, getPlateau()); + if(!(cpt == 2 || cpt == 3) && getPlateau().getCell(x, y).estAlive()) { + return true; } return false; } - - private int compterNbCellAutour(int x, int y) - { - int cpt = 0; - if(plateau.getCell(x-1, y-1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x, y-1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x+1, y-1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x+1, y).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x+1, y+1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x, y+1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x-1, y+1).estAlive()) - { - ++cpt; - } - if(plateau.getCell(x-1, y).estAlive()) - { - ++cpt; - } - return cpt; - } } diff --git a/code/jeu de la vie/src/model/Cellule.java b/code/jeu de la vie/src/model/Cellule.java index 61b037b..45a3762 100644 --- a/code/jeu de la vie/src/model/Cellule.java +++ b/code/jeu de la vie/src/model/Cellule.java @@ -3,7 +3,7 @@ package model; import javafx.beans.property.BooleanProperty; import javafx.beans.property.ReadOnlyBooleanProperty; -public class Cellule { +public class Cellule extends ObservableCellule { private int x; private int y; private BooleanProperty alive; @@ -14,8 +14,11 @@ public class Cellule { } public Boolean estAlive() { return alive.get(); } - public void setAlive(Boolean alive) { this.alive.set(alive); } public ReadOnlyBooleanProperty aliveProperty() { return alive; } + public void setAlive(Boolean alive) { + notifier(); + this.alive.set(alive); + } public int getX() { return x; } public void setX(int valeur) throws IllegalArgumentException{ diff --git a/code/jeu de la vie/src/model/CellulesVivantes.java b/code/jeu de la vie/src/model/CellulesVivantes.java new file mode 100644 index 0000000..0c809dc --- /dev/null +++ b/code/jeu de la vie/src/model/CellulesVivantes.java @@ -0,0 +1,17 @@ +package model; + +import java.util.HashMap; + +public class CellulesVivantes { + private HashMap cellVivantes; + + public Cellule getAt(int x, int y){ + Position p = new Position(x, y); + return cellVivantes.get(p); + } + + public void addPeer(int x, int y, Cellule cell){ + Position p = new Position(x, y); + cellVivantes.put(p, cell); + } +} diff --git a/code/jeu de la vie/src/model/CompteurDeCellule.java b/code/jeu de la vie/src/model/CompteurDeCellule.java new file mode 100644 index 0000000..3b4b7b1 --- /dev/null +++ b/code/jeu de la vie/src/model/CompteurDeCellule.java @@ -0,0 +1,59 @@ +package model; + +public class CompteurDeCellule { + public int compteNombreCellulesAutour(int x, int y, Plateau plateau){ + int cpt = 0; + try { + if(plateau.getCell(x-1, y-1).estAlive()) + { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if (plateau.getCell(x, y - 1).estAlive()) { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if(plateau.getCell(x+1, y-1).estAlive()) + { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if(plateau.getCell(x+1, y).estAlive()) + { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if (plateau.getCell(x + 1, y + 1).estAlive()) { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if (plateau.getCell(x, y + 1).estAlive()) { + ++cpt; + } + }catch (IllegalArgumentException e) {} + + try { + if (plateau.getCell(x - 1, y + 1).estAlive()) { + ++cpt; + } + }catch (IllegalArgumentException e){} + + try { + if (plateau.getCell(x - 1, y).estAlive()) { + ++cpt; + } + }catch (IllegalArgumentException e){} + + return cpt; + } +} diff --git a/code/jeu de la vie/src/model/ObservableCellule.java b/code/jeu de la vie/src/model/ObservableCellule.java new file mode 100644 index 0000000..0acd605 --- /dev/null +++ b/code/jeu de la vie/src/model/ObservableCellule.java @@ -0,0 +1,30 @@ +package model; + +import java.util.Collection; +import java.util.TreeSet; + +public abstract class ObservableCellule { + Collection observeurs; + public ObservableCellule(){ + observeurs = new TreeSet<>(); + } + public void attacher(Observer o) throws IllegalArgumentException{ + if(o == null){ + throw new IllegalArgumentException("L'observer ne doit pas être null"); + } + observeurs.add(o); + } + + public void detacher(Observer o) throws IllegalArgumentException{ + if(o == null){ + throw new IllegalArgumentException("L'observer ne doit pas être null"); + } + observeurs.remove(o); + } + + public void notifier() { + for (Observer observeur : observeurs) { + observeur.update(); + } + } +} diff --git a/code/jeu de la vie/src/model/Plateau.java b/code/jeu de la vie/src/model/Plateau.java index a3d4561..5324d1a 100644 --- a/code/jeu de la vie/src/model/Plateau.java +++ b/code/jeu de la vie/src/model/Plateau.java @@ -1,7 +1,11 @@ package model; import javafx.beans.property.*; +import javafx.collections.ObservableList; +import javafx.collections.FXCollections; +import java.util.Collection; +import java.util.LinkedList; import java.util.List; public class Plateau { @@ -15,13 +19,23 @@ public class Plateau { public void setLargeur( int valeur ) { largeur.set(valeur); } public IntegerProperty largeurProperty() { return largeur; } - private ObjectProperty grille = new SimpleObjectProperty(); - public List> getGrille() { return (List>) grille.get(); } - public void setGrille(List cells) { grille.set(cells); } - public ReadOnlyObjectProperty grilleProperty() { return grille; } + private ObservableList grilleObs = FXCollections.observableArrayList(); + private ListProperty> grille = new SimpleListProperty<>(grilleObs); + public ObservableList> getGrille() { return grille.get(); } + public void setGrille(ObservableList> cells) { grille.set(cells); } + public ReadOnlyListProperty grilleProperty() { return grille; } - public Cellule getCell(int x, int y) { - return ((List>) grille.get()).get(y).get(x); + public Cellule getCell(int x, int y) throws IllegalArgumentException{ + if(x < 0 || y < 0) { + throw new IllegalArgumentException("X ou Y est inférieur à 0"); + } + if(y >= getGrille().size()){ + throw new IllegalArgumentException("Y est trop grand !!!"); + } + if(x >= getGrille().get(y).size()){ + throw new IllegalArgumentException("X est trop grand !!!"); + } + return grille.get().get(y).get(x); } } diff --git a/code/jeu de la vie/src/model/Position.java b/code/jeu de la vie/src/model/Position.java new file mode 100644 index 0000000..0491363 --- /dev/null +++ b/code/jeu de la vie/src/model/Position.java @@ -0,0 +1,19 @@ +package model; + +public class Position { + private int x; + private int y; + + public Position(int x, int y){ + this.x = x; + this.y = y; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } +} diff --git a/code/jeu de la vie/src/model/Regles.java b/code/jeu de la vie/src/model/Regles.java deleted file mode 100644 index 24535f1..0000000 --- a/code/jeu de la vie/src/model/Regles.java +++ /dev/null @@ -1,5 +0,0 @@ -package model; - -public enum Regles { - ConwaySStyle -}