Skip to content
Snippets Groups Projects
Commit 546e7d78 authored by HANI Walakiyim's avatar HANI Walakiyim
Browse files

ajout du mini rapport

parent ce48df78
No related branches found
No related tags found
No related merge requests found
Pipeline #25836 canceled
...@@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application {
private static final String APP_NAME = "Firefighter simulator"; private static final String APP_NAME = "Firefighter simulator";
private static final int ROW_COUNT = 20; private static final int ROW_COUNT = 20;
private static final int COLUMN_COUNT = 20; private static final int COLUMN_COUNT = 20;
private static final int SQUARE_WIDTH = 30; private static final int SQUARE_WIDTH = 40;
private static final int SQUARE_HEIGHT = 30; private static final int SQUARE_HEIGHT = 40;
public static final int INITIAL_FIRE_COUNT = 5; public static final int INITIAL_FIRE_COUNT = 5;
public static final int INITIAL_FIREFIGHTER_COUNT = 3; public static final int INITIAL_FIREFIGHTER_COUNT = 3;
public static final int INITIAL_CLOUD_COUNT = 15; public static final int INITIAL_CLOUD_COUNT = 15;
......
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
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);
}
}
}
}
*/
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment