diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 4121b6be45ff8815913f414f8a36c395282bfdb5..a3384eb12bb3f8d0fd4bd9a401aec2ad01a62d9a 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application { private static final String APP_NAME = "Firefighter simulator"; private static final int ROW_COUNT = 20; private static final int COLUMN_COUNT = 20; - private static final int SQUARE_WIDTH = 30; - private static final int SQUARE_HEIGHT = 30; + private static final int SQUARE_WIDTH = 40; + private static final int SQUARE_HEIGHT = 40; public static final int INITIAL_FIRE_COUNT = 5; public static final int INITIAL_FIREFIGHTER_COUNT = 3; public static final int INITIAL_CLOUD_COUNT = 15; diff --git a/src/main/java/app/miniRAPORT b/src/main/java/app/miniRAPORT new file mode 100644 index 0000000000000000000000000000000000000000..13793de96956ab9ae1bd5ce7b469418ed6db9e70 --- /dev/null +++ b/src/main/java/app/miniRAPORT @@ -0,0 +1,42 @@ +MINI RAPORT + + +Explication de ce quui se voit: la couleure rouge represente le feu qui se propage + la couleure bleu represente les pompiers qui se deplacent pour eteindre les feu + la couleure verte represente les pompiers qui se deplacent pour eteindre les feu + la couleure bleu ciel represente les nuages qui se propage pour eteindre le feu + la couleure sendre represente les montagnes + la couleure sendre tes foncé represente les route + + +1. Utilisation des Principes SOLID : + + Single Responsibility Principle (SRP) : Chaque classe a une seule raison de changer, + par exemple, la classe Firefighter est responsable de la logique liée aux pompiers, + et la classe Fire est responsable de la logique liée au feu. + + Open/Closed Principle (OCP) : Les classes sont conçues pour être extensibles sans modification. + JE PEUX ajouter de nouveaux types d'éléments en implémentant l'interface GridElement sans modifier les classes existantes. + L'EXAMPLE si je voulais creer un mofel de virus : avec les virus qui se deplacerait aléatoirement comme le feu mais en + infectant + les personnes. on aurait des medecins a la place despompiers qui se deplaceraient aléatoirement ppour suprimer les virus les plus proche + + Liskov Substitution Principle (LSP) : Les objets des classes dérivées (par exemple, Firefighter et Fire) peuvent être + utilisés à la place des objets de la classe de base (GridElement). + + Interface Segregation Principle (ISP) : Les classes ne dépendent que des méthodes dont elles ont besoin. + Par exemple, Firefighter utilise la méthode update de l'interface GridElement qui est pertinente pour lui. + + +2. paton +je me suis inspirer du patron de conception Factory : + + j'ai utilisé ce patron pour créer des instances d'éléments de la grille (pompiers, feux, etc.). + avec ce patron je peux avoir une usine pour chaque type d'élément de la grille. comme : les flammable, obstacles, les ExtinguishFire; + + + +3. Diagramme + + + diff --git a/src/main/java/model/Flammable/Virus.java b/src/main/java/model/Flammable/Virus.java new file mode 100644 index 0000000000000000000000000000000000000000..5862d4335533f409b203eb5817af379291a3299f --- /dev/null +++ b/src/main/java/model/Flammable/Virus.java @@ -0,0 +1,117 @@ +package model.Flammable; + +import javafx.scene.paint.Color; +import model.BoardElement; +import model.GameBoard; +import model.Visitor.CrossMountain; +import model.Visitor.CrossRoad; +import model.Visitor.FireFinder; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/*public class Virus implements Flammable{ + + + private final Color color; + + public Virus(Color color){ + this.color = color; + initialize(); + } + + @Override + public Color getColor() { + return this.color; + } + + @Override + public Boolean accept(Visitor visitor){ + return visitor.visit(this); + } + + @Override + public void initialize() { + FireFinder fireFinder=new FireFinder(); + CrossMountain crossMountain = new CrossMountain(); + Position position = GameBoard.randomPosition(); + boolean canInitialise; + if(GameBoard.elementPosition.containsKey(position)) { + for (;;) { + canInitialise=true; + for (BoardElement element : GameBoard.elementPosition.get(position)) { + if (element.accept(fireFinder) || element.accept(crossMountain)) { + canInitialise=false; + break; + } + } + if(canInitialise){ + break; + } + position = GameBoard.randomPosition(); + if(!GameBoard.elementPosition.containsKey(position))break; + } + if(GameBoard.elementPosition.containsKey(position)) + GameBoard.elementPosition.get(position).add(this); + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + GameBoard.elementPosition.put(position,boardElements); + } + } + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + GameBoard.elementPosition.put(position,boardElements); + } + + @Override + public void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + if(extinguishPosition.contains(position)){ + return ; + } + if (gameBoard.stepNumber() % 2 == 0) { + List<Position> newPositions = new ArrayList<>(); + newPositions.addAll(gameBoard.neighbors(position)); + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } + for(Position newPosition : newPositions){ + if(extinguishPosition.contains(newPosition)) + continue; + if(GameBoard.elementPosition.containsKey(newPosition)) { + for(BoardElement boardElement : GameBoard.elementPosition.get(newPosition)){ + if(boardElement.accept(new FireFinder()) || boardElement.accept(new CrossRoad()) || boardElement.accept(new CrossMountain())){ + break; + } + else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){ + newElementPosition.get(newPosition).add(this); + } + } + + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(newPosition,boardElements); + } + + } + } + else{ + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } + } + + } + } +*/