Skip to content
Snippets Groups Projects
Commit 867e2588 authored by plojolo's avatar plojolo
Browse files

Ajout de la classe abstraite board + classe RockScissorPaperBoard

parent 521e86bb
Branches
No related tags found
No related merge requests found
Showing
with 198 additions and 101 deletions
......@@ -13,7 +13,7 @@ import javafx.scene.control.ToggleGroup;
import javafx.util.Duration;
import javafx.util.Pair;
import model.Board;
import model.fireFighterElements.ModelElement;
import model.fireFighterElements.FireFighterModelElement;
import model.FirefighterBoard;
import util.Position;
import view.Grid;
......@@ -40,7 +40,7 @@ public class Controller {
@FXML
private Grid<ViewElement> grid;
private Timeline timeline;
private Board<List<ModelElement>> board;
private Board<List<FireFighterModelElement>> board;
@FXML
private void initialize() {
......@@ -62,7 +62,7 @@ public class Controller {
List<Position> updatedPositions = board.updateToNextGeneration();
List<Pair<Position, ViewElement>> updatedSquares = new ArrayList<>();
for(Position updatedPosition : updatedPositions){
List<ModelElement> squareState = board.getState(updatedPosition);
List<FireFighterModelElement> squareState = board.getState(updatedPosition);
ViewElement viewElement = getViewElement(squareState);
updatedSquares.add(new Pair<>(updatedPosition, viewElement));
}
......@@ -81,26 +81,26 @@ public class Controller {
updateGenerationLabel(board.stepNumber());
}
private ViewElement getViewElement(List<ModelElement> squareState) {
if(squareState.contains(ModelElement.FIREFIGHTER)){
private ViewElement getViewElement(List<FireFighterModelElement> squareState) {
if(squareState.contains(FireFighterModelElement.FIREFIGHTER)){
return ViewElement.FIREFIGHTER;
}
if (squareState.contains(ModelElement.FIRE)){
if (squareState.contains(FireFighterModelElement.FIRE)){
return ViewElement.FIRE;
}
if (squareState.contains(ModelElement.CLOUD)){
if (squareState.contains(FireFighterModelElement.CLOUD)){
return ViewElement.CLOUD;
}
if (squareState.contains(ModelElement.FIRETRUCK)){
if (squareState.contains(FireFighterModelElement.FIRETRUCK)){
return ViewElement.FIRETRUCK;
}
if (squareState.contains(ModelElement.MOUNTAIN)){
if (squareState.contains(FireFighterModelElement.MOUNTAIN)){
return ViewElement.MOUNTAIN;
}
if (squareState.contains(ModelElement.ROAD)){
if (squareState.contains(FireFighterModelElement.ROAD)){
return ViewElement.ROAD;
}
if (squareState.contains(ModelElement.ROCKERY)){
if (squareState.contains(FireFighterModelElement.ROCKERY)){
return ViewElement.ROCKERY;
}
return ViewElement.EMPTY;
......
package model;
import model.fireFighterElements.*;
import util.Position;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractBoard<F> implements Board<List<FireFighterModelElement>>{
public int columnCount;
public int rowCount;
public Elements[] elements = new Elements[]{};
private int step = 0;
public AbstractBoard(int columnCount, int rowCount){
this.columnCount = columnCount;
this.rowCount = rowCount;
}
public abstract void initializeElements();
@Override
public List<FireFighterModelElement> getState(Position position) {
List<FireFighterModelElement> result = new ArrayList<>();
for(Elements element : elements)
if (element.getElementsPositions().contains(position))
result.add(element.getFireFighterModelElement());
return result;
}
@Override
public int rowCount() {
return rowCount;
}
@Override
public int columnCount() {
return columnCount;
}
public abstract List<Position> updateToNextGeneration();
@Override
public int stepNumber() {
return step;
}
@Override
public void reset() {
step = 0;
initializeElements();
}
}
package model.fireFighterElements;
package model;
import model.RockScissorPaperElements.RockScissorPaperModelElement;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.*;
public abstract class AbstractElements implements Elements {
final Random randomGenerator = new Random();
protected Random randomGenerator = new Random();
int rowCount;
int columnCount;
ModelElement modelElement;
List<Position> elementsPositions;
protected List<Position> elementsPositions;
AbstractElements(int columnCount, int rowCount,ModelElement modelElement){
protected FireFighterModelElement fireFighterModelElement;
protected RockScissorPaperModelElement rockScissorPaperModelElement;
protected AbstractElements(int columnCount, int rowCount){
this.columnCount = columnCount;
this.rowCount = rowCount;
this.modelElement = modelElement;
}
public abstract void nextMove();
......@@ -63,7 +70,12 @@ public abstract class AbstractElements implements Elements {
}
@Override
public ModelElement getModelElement() {
return modelElement;
public FireFighterModelElement getFireFighterModelElement() {
return fireFighterModelElement;
}
@Override
public RockScissorPaperModelElement getRockScissorPaperModelElement() {
return rockScissorPaperModelElement;
}
}
......@@ -19,13 +19,7 @@ public interface Board<S> {
*/
S getState(Position position);
/**
* Set the state of a specific position on the board to the specified state.
*
* @param state The state to set for the given position.
* @param position The position on the board for which to set the state.
*/
void setState(S state, Position position);
/**
* Get the number of rows in the board.
......
package model.fireFighterElements;
package model;
import model.RockScissorPaperElements.RockScissorPaperModelElement;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.List;
......@@ -16,8 +18,7 @@ public interface Elements {
List<Position> getElementsPositions();
void addElement(Position position);
ModelElement getModelElement();
FireFighterModelElement getFireFighterModelElement();
RockScissorPaperModelElement getRockScissorPaperModelElement();
}
......@@ -6,13 +6,10 @@ import util.Position;
import java.util.*;
public class FirefighterBoard implements Board<List<ModelElement>> {
public class FirefighterBoard extends AbstractBoard<FireFighterModelElement> {
public int columnCount;
public int rowCount;
public final Elements[] elements;
private final int initialFireCount;
private final int initialFirefighterCount;
private final int initialCloudCount;
......@@ -35,8 +32,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public Rockery rockery;
public FirefighterBoard(int columnCount, int rowCount, int[] elementsCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
super(columnCount, rowCount);
this.initialFireCount = elementsCount[0];
this.initialFirefighterCount = elementsCount[1];
......@@ -54,8 +50,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
cloud = new Cloud(columnCount, rowCount, fire);
fireTrucks = new FireTruck(columnCount, rowCount, fire, mountain);
elements = new Elements[]{fire, fireFighters, cloud, fireTrucks, mountain, road, rockery};
initializeElements();
......@@ -72,26 +66,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>();
for(Elements element : elements)
if (element.getElementsPositions().contains(position))
result.add(element.getModelElement());
return result;
}
@Override
public int rowCount() {
return rowCount;
}
@Override
public int columnCount() {
return columnCount;
}
public List<Position> updateToNextGeneration() {
......@@ -123,39 +97,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
modifiedElements.addAll(element.getElementsPositions());
}
return modifiedElements;
}
@Override
public int stepNumber() {
return step;
}
@Override
public void reset() {
step = 0;
initializeElements();
}
@Override
public void setState(List<ModelElement> state, Position position) {
fire.getElementsPositions().remove(position);
for (;;) {
if (!fireFighters.getElementsPositions().remove(position)) break;
}
for(ModelElement element : state){
switch (element){
case FIRE -> fire.addElement(position);
case FIREFIGHTER -> fireFighters.addElement(position);
case CLOUD -> cloud.addElement(position);
case FIRETRUCK -> fireTrucks.addElement(position);
case MOUNTAIN -> mountain.addElement(position);
case ROAD -> road.addElement(position);
case ROCKERY -> rockery.addElement(position);
}
}
}
}
\ No newline at end of file
package model;
import model.fireFighterElements.FireFighterModelElement;
import util.Position;
import java.util.List;
public class RockScissorPaperBoard extends AbstractBoard<FireFighterModelElement>{
public RockScissorPaperBoard(int columnCount, int rowCount) {
super(columnCount, rowCount);
}
@Override
public void initializeElements() {
}
@Override
public List<Position> updateToNextGeneration() {
return null;
}
}
package model.RockScissorPaperElements;
import model.AbstractElements;
public class Rock extends AbstractElements {
public Rock(int columnCount, int rowCount) {
super(columnCount, rowCount);
}
@Override
public void nextMove() {
}
}
package model.RockScissorPaperElements;
public enum RockScissorPaperModelElement {
ROCK, SCISSOR, PAPER
}
package model.fireFighterElements;
import model.AbstractElements;
import util.Position;
import java.util.*;
......@@ -8,10 +9,11 @@ public abstract class AbstractFireFighters extends AbstractElements{
public Fire fire;
public Mountain mountain;
public AbstractFireFighters(int columnCount, int rowCount, Fire fire, Mountain mountain, ModelElement modelElement){
super(columnCount, rowCount,modelElement);
public AbstractFireFighters(int columnCount, int rowCount, Fire fire, Mountain mountain, FireFighterModelElement modelElement){
super(columnCount, rowCount);
this.fire = fire;
this.mountain = mountain;
this.fireFighterModelElement = modelElement;
}
......@@ -25,7 +27,7 @@ public abstract class AbstractFireFighters extends AbstractElements{
while (!toVisit.isEmpty()) {
Position current = toVisit.poll();
if (fire.elementsPositions.contains(current)){
if (fire.getElementsPositions().contains(current)){
return firstMove.get(current);}
for (Position adjacent : neighborsWithoutSelectedElements(current, mountain)) {
if (seen.contains(adjacent)) continue;
......
package model.fireFighterElements;
import model.AbstractElements;
import util.Position;
import java.util.ArrayList;
......@@ -10,8 +11,9 @@ public class Cloud extends AbstractElements{
public Cloud(int columnCount, int rowCount, Fire fire) {
super(columnCount, rowCount, ModelElement.CLOUD);
super(columnCount, rowCount);
this.fire = fire;
this.fireFighterModelElement = FireFighterModelElement.CLOUD;
}
@Override
public void nextMove() {
......
package model.fireFighterElements;
import model.AbstractElements;
import util.Position;
import java.util.*;
......@@ -13,10 +14,11 @@ public class Fire extends AbstractElements{
HashMap<Position,Integer> rockeryCountStep = new HashMap<>();
public Fire(int columnCount, int rowCount, Mountain mountain,Road road, Rockery rockery){
super(columnCount, rowCount, ModelElement.FIRE);
super(columnCount, rowCount);
this.mountain = mountain;
this.road = road;
this.rockery = rockery;
this.fireFighterModelElement = FireFighterModelElement.FIRE;
}
public void nextMove(){
......
package model.fireFighterElements;
public enum ModelElement {
public enum FireFighterModelElement {
FIREFIGHTER, FIRE, CLOUD, FIRETRUCK, MOUNTAIN, ROAD, ROCKERY
}
......@@ -7,7 +7,7 @@ import java.util.List;
public class FireFighterPerson extends AbstractFireFighters{
public FireFighterPerson(int columnCount, int rowCount, Fire fire, Mountain mountain) {
super(columnCount, rowCount, fire, mountain, ModelElement.FIREFIGHTER);
super(columnCount, rowCount, fire, mountain, FireFighterModelElement.FIREFIGHTER);
}
@Override
......
......@@ -7,7 +7,7 @@ import java.util.List;
public class FireTruck extends AbstractFireFighters{
public FireTruck(int columnCount, int rowCount, Fire fire, Mountain mountain) {
super(columnCount, rowCount, fire, mountain, ModelElement.FIRETRUCK);
super(columnCount, rowCount, fire, mountain, FireFighterModelElement.FIRETRUCK);
}
......
package model.fireFighterElements;
import model.AbstractElements;
public class Mountain extends AbstractElements {
public Mountain(int columnCount, int rowCount){
super(columnCount, rowCount, ModelElement.MOUNTAIN);
super(columnCount, rowCount);
this.fireFighterModelElement = FireFighterModelElement.MOUNTAIN;
}
@Override
public void nextMove() {
}
......
package model.fireFighterElements;
import model.AbstractElements;
public class Road extends AbstractElements {
public Road(int columnCount, int rowCount){
super(columnCount, rowCount, ModelElement.ROAD);
super(columnCount, rowCount);
this.fireFighterModelElement = FireFighterModelElement.ROAD;
}
@Override
public void nextMove() {
......
package model.fireFighterElements;
import model.AbstractElements;
public class Rockery extends AbstractElements {
public Rockery(int columnCount, int rowCount) {
super(columnCount, rowCount, ModelElement.ROCKERY);
super(columnCount, rowCount);
this.fireFighterModelElement = FireFighterModelElement.ROCKERY;
}
@Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment