Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • main
  • variant
2 results

Target

Select target project
  • l22015417/firefighterstarter
  • m19023837/firefighter-starter-mansour-chadi-chahine-rami
  • r24025701/firefighterstarter
  • n24026202/firefighterstarter
  • couetoux.b/firefighterstarter
  • b23027938/firefighterstarter
  • z20039716/fire-fighter
  • a18023913/firefighterstarter
  • o22010261/firefighterstarter
  • b22015516/firefighterstarter
  • alaboure/firefighter-template
  • p21211679/firefighter-luis-parra-yanis-lounadi
  • v23014723/firefighter-project
  • k20014011/firefighter-template
  • m23022217/firefighter-template
  • p20006624/firefighter-template
  • l21221596/firefighter-template
  • s21232465/firefighter-template
  • y21224754/firefighter-template
  • w21225935/firefighter-template
  • h22023886/firefighter-template
  • b21221604/firefighter-template-boucenna-yacine-zeghar-mohamed-lamine
  • c23025119/firefighterstarter
  • b20031964/firefighterstarter
24 results
Select Git revision
  • main
  • variant
2 results
Show changes
Showing
with 308 additions and 11 deletions
package model.Obstacle;
import model.Board.BoardElement;
import util.Position;
public class Road extends BoardElement implements Terrain {
public Road(Position position) {
super(position);
}
@Override
public String getType() {
return null;
}
@Override
public String toString() {
return null;
}
@Override
public boolean isTraversableByFire() {
return false;
}
@Override
public boolean isTraversableByFirefighter() {
return true;
}
}
package model.Obstacle;
public interface Terrain {
boolean isTraversableByFire();
boolean isTraversableByFirefighter();
}
package model;
import util.Position;
public interface PositionGenerator {
public Position generateRandomPosition(int rowCount, int columnCount);
}
package model;
import util.Position;
import java.util.Collection;
import java.util.List;
public interface StrategyElement {
public List<Position> updateElements();
public void initializeElement(int rowCount, int columnCount);
Collection<Position> getPositions();
}
package model.flammable;
import model.Board.BoardElement;
import util.Position;
public class Fire extends BoardElement {
public Fire(Position position) {
super(position);
}
@Override
public String getType() {
return "FIRE";
}
@Override
public String toString() {
return "Fire{" +
"position=" + position +
'}';
}
}
package model.flammable;
import model.ElementFactory;
import model.PositionGenerator;
import util.Position;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class FireFactory implements ElementFactory<Fire>, PositionGenerator {
private final Random random;
private int count;
public FireFactory(Random random, int count) {
this.random = random; // Injecte un générateur aléatoire pour une flexibilité.
this.count=count;
}
/**
* Crée une liste de feux avec des positions et intensités aléatoires.
*
* @param rowCount Nombre de lignes du plateau.
* @param columnCount Nombre de colonnes du plateau.
* @return Une liste d'objets `Fire`.
*/
public List<Fire> createElements(int rowCount, int columnCount) {
List<Fire> fires = new ArrayList<>();
for (int i = 0; i < count; i++) {
Position randomPosition = generateRandomPosition(rowCount, columnCount);
boolean add = fires.add(new Fire(randomPosition));
}
System.out.println(fires.size());
return fires;
}
/**
* Génère une position aléatoire sur le plateau.
*
* @param rowCount Nombre de lignes.
* @param columnCount Nombre de colonnes.
* @return Une position aléatoire.
*/
@Override
public Position generateRandomPosition(int rowCount, int columnCount) {
int row = random.nextInt(rowCount);
int column = random.nextInt(columnCount);
return new Position(row, column);
}
public int getCount() {
return count;
}
}
package model.flammable;
import model.ElementFactory;
import model.StrategyElement;
import util.Position;
import java.util.*;
import static model.Board.BoardFireFighterBehavior.*;
public class FireStrategyElement implements StrategyElement {
private final ElementFactory<Fire> fireFactory;
private Set<Position> firePositions;
public FireStrategyElement(ElementFactory<Fire> fireFactory) {
this.fireFactory = fireFactory;
this.firePositions = new HashSet<>();
}
@Override
public void initializeElement(int rowCount, int columnCount) {
// Feux
List<Fire> fires = fireFactory.createElements(rowCount, columnCount);
for (Fire fire : fires) {
firePositions.add(fire.getPosition());
}
}
@Override
public Collection<Position> getPositions() {
return firePositions;
}
@Override
public List<Position> updateElements() {
List<Position> modifiedPositions = new ArrayList<>();
if (getStep() % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
// Pour chaque feu existant, vérifier ses voisins
for (Position fire : firePositions) {
// Si la position voisine est libre (non occupée par un feu ou un pompier), le feu peut se propager
for (Position neighbor : getNeighbors().get(fire)) {
// Vérifier si le feu peut se propager à cette position (pas de feu déjà là et pas un terrain bloqué)
if (canMoveTo(neighbor, firePositions, (List<Position>)getFirefighterPositions()) && !firePositions.contains(neighbor)) {
newFirePositions.add(neighbor);
}
}
}
// Ajouter les nouvelles positions de feu à la liste des feux existants
firePositions.addAll(newFirePositions);
modifiedPositions.addAll(newFirePositions);
}
return modifiedPositions;
}
}
package model.flammable;
import model.Board.BoardElement;
import util.Position;
public class Rocky extends BoardElement {
private static int firePropagationCounter;
public Rocky(Position position) {
super(position);
}
public static boolean canFirePropagate() {
// Le feu ne peut se propager que tous les 4 tours
if (firePropagationCounter >= 4) {
firePropagationCounter = 0; // Reset le compteur
return true;
}
firePropagationCounter++;
return false;
}
@Override
public String getType() {
return null;
}
@Override
public String toString() {
return null;
}
}
package model.flammable;
import model.ElementFactory;
import model.PositionGenerator;
import util.Position;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RockyFactory implements ElementFactory<Rocky>, PositionGenerator {
private final Random random;
private int count;
public RockyFactory(Random random, int count) {
this.random = random;
this.count = count;
}
@Override
public List<Rocky> createElements(int rowCount, int columnCount) {
List<Rocky> rocky = new ArrayList<>();
for (int i = 0; i < count; i++) {
Position randomPosition = generateRandomPosition(rowCount, columnCount);
rocky.add(new Rocky(randomPosition));
}
return rocky;
}
@Override
public int getCount() {
return count;
}
@Override
public Position generateRandomPosition(int rowCount, int columnCount) {
int row = random.nextInt(rowCount);
int column = random.nextInt(columnCount);
return new Position(row, column);
}
}
package util;
public record Position(int row, int column) {
public boolean isAtPosition(Position position) {
return row == position.row() && column == position.column();
}
}
package util;
import view.ViewElement;
import java.util.Collection;
import java.util.List;
import java.util.Map;
public interface Strategy {
Position neighborClosestToTarget(Position position, Collection<Position> targets, Map<Position, List<Position>> neighbors);
}
package model;
package util;
import util.Position;
import view.ViewElement;
import java.util.*;
public class TargetStrategy {
public class TargetStrategy implements Strategy{
/**
......@@ -12,7 +13,7 @@ public class TargetStrategy {
* @param targets positions that are targeted.
* @return the position next to the current position that is on the path to the closest target.
*/
Position neighborClosestToFire(Position position, Collection<Position> targets,
public Position neighborClosestToTarget(Position position, Collection<Position> targets,
Map<Position, List<Position>> neighbors) {
Set<Position> seen = new HashSet<Position>();
HashMap<Position, Position> firstMove = new HashMap<Position, Position>();
......@@ -21,6 +22,7 @@ public class TargetStrategy {
firstMove.put(initialMove, initialMove);
while (!toVisit.isEmpty()) {
Position current = toVisit.poll();
// if (grid[current.row()][current.column()] == ViewElement.MOUNTAIN) continue;
if (targets.contains(current))
return firstMove.get(current);
for (Position adjacent : neighbors.get(current)) {
......
......@@ -96,4 +96,5 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
private void clearBox(int row, int column){
getGraphicsContext2D().clearRect(column * boxWidth,row * boxHeight, boxWidth, boxHeight);
}
}
\ No newline at end of file
......@@ -3,7 +3,8 @@ package view;
import javafx.scene.paint.Color;
public enum ViewElement {
FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE);
FIREFIGHTER(Color.AQUA), FIRE(Color.RED), EMPTY(Color.WHITE) , CLOUD(Color.PINK),MOTORIZED(Color.DARKBLUE) , MOUNTAIN(Color.DARKGRAY), ROCKY(Color.GREEN),
ROAD(Color.BLACK);
final Color color;
ViewElement(Color color) {
this.color = color;
......
......@@ -10,7 +10,7 @@
<?import javafx.scene.control.Label?>
<HBox styleClass="background" stylesheets="@DarkTheme.css"
xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
fx:controller="controller.Controller">
fx:controller="controller.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity">
<VBox>
<Separator maxHeight="-Infinity" maxWidth="-Infinity"
prefHeight="24.0" prefWidth="200.0"/>
......
......@@ -8,19 +8,20 @@ import java.util.List;
import static org.assertj.core.api.Assertions.*;
public class FirefighterBoardTest {
/*
@Test
void testColumnCount(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
FirefighterBoard board = new FirefighterBoard(20, 10, 1, 3);
assertThat(board.columnCount()).isEqualTo(20);
}
@Test
void testRowCount(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
FirefighterBoard board = new FirefighterBoard(20, 10, 1, 3);
assertThat(board.rowCount()).isEqualTo(10);
}
@Test
void testStepNumber(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
FirefighterBoard board = new FirefighterBoard(20, 10, 1, 3);
for(int index = 0; index < 10; index++){
assertThat(board.stepNumber()).isEqualTo(index);
board.updateToNextGeneration();
......@@ -29,11 +30,11 @@ public class FirefighterBoardTest {
}
@Test
void testGetState_afterSet(){
Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
FirefighterBoard board = new FirefighterBoard(20, 10, 0, 0);
Position position = new Position(1,2);
assertThat(board.getState(position)).isEmpty();
board.setState(List.of(ModelElement.FIRE), position);
assertThat(board.getState(position)).containsExactly(ModelElement.FIRE);
}
}*/
}