Skip to content
Snippets Groups Projects
Commit c6c509e0 authored by Anthony Viola's avatar Anthony Viola
Browse files

Firefighter rebuild

parent 66bbe873
Branches
No related tags found
No related merge requests found
Pipeline #24537 passed
......@@ -18,7 +18,9 @@ public class SimulatorApplication extends javafx.application.Application {
private static final int SQUARE_WIDTH = 50;
private static final int SQUARE_HEIGHT = 50;
public static final int INITIAL_FIRE_COUNT = 3;
public static final int INITIAL_FIREFIGHTER_COUNT = 6;
public static final int INITIAL_FIREFIGHTER_COUNT = 0;
public static final int INITIAL_CLOUD_COUNT = 3;
private Stage primaryStage;
private Parent view;
......@@ -44,7 +46,7 @@ public class SimulatorApplication extends javafx.application.Application {
view = loader.load();
Controller controller = loader.getController();
controller.initialize(SQUARE_WIDTH, SQUARE_HEIGHT, COLUMN_COUNT, ROW_COUNT,
INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT);
INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT);
}
private void showScene() {
......
......@@ -21,6 +21,7 @@ import view.Grid;
import view.ViewElement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static java.util.Objects.requireNonNull;
......@@ -72,13 +73,18 @@ public class Controller {
}
private void updateBoard2(){
board.testScreen();
List<Position> updatedPositions = board.updateToNextGeneration2();
List<Position> updatedClearSquares = new ArrayList<>();
List<Item> updatedSquares = new ArrayList<>();
for(Position updatedPosition : updatedPositions){
Item squareState = board.getItemByPosition(updatedPosition);
updatedClearSquares.add(updatedPosition);
if (squareState != null){
updatedSquares.add(squareState);
}
grid.repaint(updatedSquares);
}
grid.repaint2(updatedSquares, updatedClearSquares);
updateGenerationLabel(board.stepNumber());
}
......@@ -93,6 +99,12 @@ public class Controller {
updateGenerationLabel(board.stepNumber());
}
private void repaintGrid2(){
grid.initialize(board.itemList());
updateGenerationLabel(board.stepNumber());
}
private ViewElement getViewElement(List<ModelElement> squareState) {
if(squareState.contains(ModelElement.FIREFIGHTER)){
return ViewElement.FIREFIGHTER;
......@@ -106,7 +118,7 @@ public class Controller {
private void initializeTimeline() {
Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
EventHandler<ActionEvent> eventHandler =
event -> updateBoard();
event -> updateBoard2();
KeyFrame keyFrame = new KeyFrame(duration, eventHandler);
timeline = new Timeline(keyFrame);
timeline.setCycleCount(Animation.INDEFINITE);
......@@ -132,7 +144,7 @@ public class Controller {
this.pause();
board.reset();
pauseToggleButton.setSelected(true);
repaintGrid();
repaintGrid2();
}
public void initialize(int squareWidth, int squareHeight, int columnCount,
......@@ -142,9 +154,17 @@ public class Controller {
repaintGrid();
}
public void initialize(int squareWidth, int squareHeight, int columnCount,
int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) {
this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialCloudCount));
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
repaintGrid2();
}
public void oneStepButtonAction() {
this.pause();
updateBoard();
updateBoard2();
}
private void updateGenerationLabel(int value){
......
......@@ -71,6 +71,9 @@ public interface Board<S> {
*/
int stepNumber();
List<Item> itemList();
Item getItemByPosition(Position position);
void testScreen();
}
package model;
import javafx.scene.paint.Color;
import util.Position;
import java.util.ArrayList;
......@@ -9,6 +10,7 @@ import java.util.Random;
public class Cloud extends Extinguisher implements Item {
public Cloud(Position position) {
super(position);
color = Color.GREY;
}
......@@ -29,4 +31,9 @@ public class Cloud extends Extinguisher implements Item {
result.add(position);
return result;
}
public String toString(){
return "Nuage position : [" + position.row() + ", " + position.column()+ "]";
}
}
package model;
import javafx.scene.paint.Color;
import util.Position;
import view.FirefighterGrid;
import java.util.ArrayList;
import java.util.List;
public abstract class Extinguisher {
protected Position position;
protected Color color;
public Extinguisher(Position position){
this.position = position;
......@@ -41,4 +45,11 @@ public abstract class Extinguisher {
}
abstract List<Position> move(FirefighterBoard board);
public void paint(FirefighterGrid grid){
grid.paintCircle(position.row(), position.column(), color);
}
public abstract String toString();
}
package model;
import javafx.scene.paint.Color;
import util.Position;
import view.FirefighterGrid;
import java.util.ArrayList;
import java.util.List;
......@@ -8,9 +10,11 @@ import java.util.List;
public class Fire implements Item{
private final Position position;
private final Color color;
public Fire(Position position) {
this.position = position;
this.color = Color.RED;
}
public List<Position> update(FirefighterBoard board) {
......@@ -22,9 +26,17 @@ public class Fire implements Item{
result.add(neighborposition);
}
}
return neighborslist;
return result;
}
public Position position() {
return position;
}
public void paint(FirefighterGrid grid){
grid.paintTriangle(position.row(), position.column(), color);
}
public String toString(){
return "Feu position : [" + position.row() + ", " + position.column()+ "]";
}
}
package model;
import javafx.scene.paint.Color;
import util.Position;
import java.util.List;
import java.util.*;
public class Firefighter extends Extinguisher implements Item{
public Firefighter(Position position) {
super(position);
this.color = Color.BLUE;
}
public List<Position> move(FirefighterBoard board) {
......@@ -38,4 +41,9 @@ public class Firefighter extends Extinguisher implements Item{
}
return null;
}
public String toString(){
return "Pompier position : [" + position.row() + ", " + position.column()+ "]";
}
}
......@@ -11,6 +11,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final int initialFireCount;
private final int initialFirefighterCount;
private final int initialCloudCount;
private List<Item> itemList;
private List<Box> boxList;
private List<Position> firefighterPositions;
......@@ -23,9 +25,21 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
this.initialCloudCount = 0;
initializeElements();
}
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.itemList = new ArrayList<>();
this.boxList = new ArrayList<>();
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
this.initialCloudCount = initialCloudCount;
initializeElements2();
}
public void initializeElements() {
firefighterPositions = new ArrayList<>();
firePositions = new HashSet<>();
......@@ -35,10 +49,30 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
firefighterPositions.add(randomPosition());
}
public void initializeElements2() {
for (int i = 0; i < initialFireCount; i++){
itemList.add(new Fire(randomEmptyPosition()));
}
for (int i = 0; i < initialFirefighterCount; i++){
itemList.add(new Firefighter(randomEmptyPosition()));
}
for (int i = 0; i < initialCloudCount; i++){
itemList.add(new Cloud(randomEmptyPosition()));
}
}
private Position randomPosition() {
return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
}
private Position randomEmptyPosition() {
Position result;
for(;;){
result = new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
if (getItemByPosition(result) == null) return result;
}
}
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>();
......@@ -70,11 +104,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public List<Position> updateToNextGeneration2() {
List<Position> result = new ArrayList<Position>();
for (Item item: itemList) {
List<Item> actualItemList = new ArrayList<Item>(itemList);
for (Item item: actualItemList) {
if (!(item instanceof Fire)) result.addAll(item.update(this));
}
if (step%2 == 0){
for (Item item: itemList) {
actualItemList = new ArrayList<Item>(itemList);
if (step % 2 == 1){
for (Item item: actualItemList) {
if (item instanceof Fire) result.addAll(item.update(this));
}
}
......@@ -103,7 +139,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public Item getItemByPosition(Position position) {
for (Item item : itemList) {
if (item.position() == position){
if (item.position().equals(position)) {
return item;
}
}
......@@ -134,7 +170,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
@Override
public void reset() {
step = 0;
initializeElements();
itemList.clear();
boxList.clear();
initializeElements2();
}
private void extinguish(Position position) {
......@@ -184,4 +222,24 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
}
}
public void testScreen(){
Position position;
for (int row = 0; row < rowCount; row++){
for (int column = 0; column < columnCount; column++){
position = new Position(row,column);
if (getItemByPosition(position) == null){
System.out.print("□ ");
} else if (getItemByPosition(position) instanceof Fire) {
System.out.print("f ");
} else if (getItemByPosition(position) instanceof Cloud) {
System.out.print("c ");
} else if (getItemByPosition(position) instanceof Firefighter) {
System.out.print("F ");
}
}
System.out.println();
}
System.out.println();
}
}
\ No newline at end of file
package model;
import util.Position;
import view.FirefighterGrid;
import java.util.ArrayList;
import java.util.List;
......@@ -9,4 +11,8 @@ public interface Item {
List<Position> update(FirefighterBoard board);
Position position();
void paint(FirefighterGrid grid);
String toString();
}
......@@ -3,8 +3,12 @@ package view;
import javafx.scene.canvas.Canvas;
import javafx.scene.paint.Color;
import javafx.util.Pair;
import model.Fire;
import model.Item;
import util.Position;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
......@@ -24,6 +28,19 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
paintLines();
}
@Override
public void repaint(ViewElement[][] elements) {
clear();
paint(elements);
paintLines();
}
public void repaint2(List<Item> itemList, List<Position> clearList) {
clear2(clearList);
paint2(itemList);
paintLines();
}
private void clear(List<Pair<Position, ViewElement>> positionedElements) {
for (Pair<Position, ViewElement> positionElement : positionedElements) {
Position position = positionElement.getKey();
......@@ -31,19 +48,37 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
}
}
private void clear2(List<Position> positions) {
for (Position position : positions) {
clearSquare(position.row(), position.column());
paintSquare(position.row(), position.column(), Color.WHITE);
}
}
private void paint(List<Pair<Position, ViewElement>> positionedElements) {
for(Pair<Position, ViewElement> pair : positionedElements){
paintElementAtPosition(pair.getValue(), pair.getKey());
}
}
@Override
public void repaint(ViewElement[][] elements) {
clear();
paint(elements);
private void paint2(List<Item> itemList) {
for (Item item : itemList) {
item.paint(this);
}
}
public void initialize(List<Item> itemList) {
for (int row = 0; row < rowCount; row++){
for (int column = 0; column < columnCount; column++){
paintSquare(row, column, Color.WHITE);
}
}
paintLines();
paint2(itemList);
}
private void clear() {
getGraphicsContext2D().clearRect(0,0,getWidth(), getHeight());
}
......@@ -91,6 +126,18 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
getGraphicsContext2D().fillRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
}
public void paintTriangle(int row, int column, Color color){
getGraphicsContext2D().setFill(color);
getGraphicsContext2D().fillPolygon(new double[]{row*squareHeight , row*squareHeight + squareHeight/2, (row+1)*squareHeight},
new double[]{(column+1)*squareWidth , column*squareHeight, (column+1)*squareHeight},
3);
}
public void paintCircle(int row, int column, Color color){
getGraphicsContext2D().setFill(color);
getGraphicsContext2D().fillOval(row*squareHeight, column*squareWidth, squareHeight, squareWidth);
}
private void clearSquare(int row, int column){
getGraphicsContext2D().clearRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
}
......
package view;
import javafx.util.Pair;
import model.Item;
import util.Position;
import model.Board;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
......@@ -27,6 +31,8 @@ public interface Grid<E> {
*/
void repaint(E[][] elements);
void repaint2(List<Item> itemList, List<Position> clearList);
/**
* Set the dimensions of the grid to the specified number of columns, number of rows, square width,
* and square height.
......@@ -51,5 +57,7 @@ public interface Grid<E> {
* @return The number of rows in the grid.
*/
int rowCount();
void initialize(List<Item> itemList);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment