diff --git a/app/src/main/java/controller/GameController.java b/app/src/main/java/controller/GameController.java index 98cfd89b907136b23a441b72ad84cf7888632ad9..5c2c1d7346ee30d4313655e5f9f448834d86c422 100644 --- a/app/src/main/java/controller/GameController.java +++ b/app/src/main/java/controller/GameController.java @@ -8,19 +8,22 @@ import javafx.util.Duration; import model.*; import view.MatrixPane; +import java.util.ArrayList; import java.util.List; import java.util.Random; public class GameController { - public static final Color COLOR_ONE = Color.RED; - public static final Color COLOR_TWO = Color.BLUE; - public static final Color COLOR_THREE = Color.YELLOW; + public static final Color COLOR_ONE = Color.TAN; + public static final Color COLOR_TWO = Color.NAVAJOWHITE; + public static final Color COLOR_THREE = Color.GRAY; public static final Color COLOR_FOUR = Color.GREEN; private static final List<Color> availableColors = List.of(COLOR_ONE, COLOR_TWO, COLOR_THREE, COLOR_FOUR); public static final double PAUSE_MILLISECONDS = 400; private final PauseTransition pause = new PauseTransition(Duration.millis(PAUSE_MILLISECONDS)); + + private final Random random = new Random(); @FXML @@ -36,8 +39,7 @@ public class GameController { public void initialize(){ - this.game = new FloodGame( - matrixPane.getGrid().getNumberOfColumns() * matrixPane.getGrid().getNumberOfRows()); + this.game = new FloodGame(matrixPane.getGrid().getNumberOfColumns() * matrixPane.getGrid().getNumberOfRows()); setPlayerHuman(); matrixPane.setGameController(this); setScoreLabelTextProperty(); @@ -56,39 +58,37 @@ public class GameController { private void colorGrid(ColorGenerator colorGenerator){ // TODO - // matrixPane.getGrid().color(colorGenerator); + matrixPane.getGrid().color(colorGenerator); + } @FXML public void fillGridUniform() { - // TODO uncomment: - // colorGrid(new UniformColorGenerator(COLOR_ONE)); + colorGrid(new UniformColorGenerator(COLOR_ONE)); + } @FXML public void fillGridRandom() { - // TODO uncomment - // colorGrid(new RandomColorGenerator(availableColors,random)); + colorGrid(new RandomColorGenerator(availableColors,random)); } @FXML public void fillGridDistinct() { - // TODO uncomment - // fillGridUniform(); - // colorGrid(new DistinctColorGenerator(COLOR_ONE,List.of(COLOR_THREE, COLOR_FOUR))); + fillGridUniform(); + colorGrid( new DistinctColorGenerator(List.of(COLOR_THREE, COLOR_FOUR), COLOR_ONE));//List.of(COLOR_THREE, COLOR_FOUR))); } @FXML public void fillGridCycle() { - // TODO uncomment - // colorGrid(new CyclingColorGenerator(availableColors)); + // colorGrid(new CyclingColorGenerator(availableColors)); + colorGrid(new CyclicColorGenerator(availableColors)); } @FXML public void fillGridUniformExceptOne() { - // TODO uncomment - // colorGrid(new UniformExceptOneColorGenerator(COLOR_ONE,COLOR_TWO)); + colorGrid(new UniformExceptOneGenerator(COLOR_ONE,COLOR_TWO)); } private void playComputerTurn(){ @@ -123,8 +123,8 @@ public class GameController { private void setScoreLabelTextProperty() { // TODO // uncomment - // Player player = game.getPlayer(); - // scoreLabel.textProperty().setValue(Integer.toString(game.getPlayerScore(player))); + // Player player = game.getPlayer(); + // scoreLabel.textProperty().setValue(Integer.toString(game.getPlayerScore(player))); } @@ -145,14 +145,14 @@ public class GameController { @FXML public void setPlayerHuman(){ // TODO - // game.setPlayer(new HumanPlayer("human", getGridStartCell())); + // game.setPlayer(new HumanPlayer("human", getGridStartCell())); } @FXML public void setPlayerRandom() { // TODO - // Player player = ... instantiate a ComputerPlayer named "random" that follows the random strategy - // game.setPlayer(player); + //Player player = ... instantiate a ComputerPlayer named "random" that follows the random strategy + //game.setPlayer(player); } @FXML public void setPlayerRobin() { diff --git a/app/src/main/java/model/ArrayGrid.java b/app/src/main/java/model/ArrayGrid.java index 2252182bb1389aaa676c220a3c8588795b09c417..d8c22d7fbb6c18d40bb0c607d3c50249c432f968 100644 --- a/app/src/main/java/model/ArrayGrid.java +++ b/app/src/main/java/model/ArrayGrid.java @@ -8,9 +8,16 @@ public class ArrayGrid implements Grid{ private int numberOfRows; private int numberOfColumns; public ArrayGrid(int numberOfRows, int numberOfColumns){ - this.cells=new SquareCell[numberOfRows][numberOfColumns]; if (numberOfRows <= 0 || numberOfColumns <= 0) throw new IllegalArgumentException(); + + this.cells=new SquareCell[numberOfRows][numberOfColumns]; + for (int i=0; i< numberOfRows;i++){ + for (int j=0; j < numberOfColumns; j++){ + cells[i][j] = new SquareCell(); + } + } + } @Override public Cell getCell(int row, int column) { diff --git a/app/src/main/java/model/CellGridIterator.java b/app/src/main/java/model/CellGridIterator.java index 9d0468341fe169d7f294d84e4b0c31d3e989905e..ffebf05410a15beaf8c76fdd926be065cecb77a6 100644 --- a/app/src/main/java/model/CellGridIterator.java +++ b/app/src/main/java/model/CellGridIterator.java @@ -1,6 +1,8 @@ package model; -public class CellGridIterator { +import java.util.Iterator; + +public class CellGridIterator implements Iterator<Cell> { ArrayGrid grid; int indixRow; int indixColum; @@ -12,9 +14,12 @@ public class CellGridIterator { } public Cell next() { final Cell result = grid.getCell(indixRow, indixColum); - indixColum = (indixColum +1) % grid.getNumberOfColumns(); - if(indixColum == 0){ - indixRow++; + + this.indixColum = this.indixColum +1; + + if (this.indixColum == this.grid.getNumberOfColumns()) { + this.indixRow = this.indixRow + 1; + this.indixColum = 0; } return result; @@ -23,4 +28,6 @@ public class CellGridIterator { public boolean hasNext(){ return this.indixColum < this.grid.getNumberOfColumns() && indixRow < this.grid.getNumberOfRows(); } + + } diff --git a/app/src/main/java/model/CyclicColorGenerator.java b/app/src/main/java/model/CyclicColorGenerator.java index 0aec9a40cfb46d507832b45e986970d70a62b8c0..7e6df5cccafcdc707ebb76b353c3fb6ded4dd7f9 100644 --- a/app/src/main/java/model/CyclicColorGenerator.java +++ b/app/src/main/java/model/CyclicColorGenerator.java @@ -17,9 +17,10 @@ public class CyclicColorGenerator implements ColorGenerator { @Override public Color nextColor(Cell cell) { + int color_index = count % this.colors.size(); count++; - return this.colors.get(count-1); + return this.colors.get(color_index);} + - } } diff --git a/app/src/main/java/model/DistinctColorGenerator.java b/app/src/main/java/model/DistinctColorGenerator.java index b777fb3deaa1d855ed3eaa1d490678d18eec6751..2285c4ccbb61c50930bccc8477572b7974964a0b 100644 --- a/app/src/main/java/model/DistinctColorGenerator.java +++ b/app/src/main/java/model/DistinctColorGenerator.java @@ -1,12 +1,12 @@ package model; - -import java.awt.*; +import java.util.ArrayList; +import javafx.scene.paint.Color; import java.util.List; -public class DistinctColorGenerator { - List<Color> colors; - Color defaultColor; +public class DistinctColorGenerator implements ColorGenerator { + private List<Color> colors; + private Color defaultColor; public DistinctColorGenerator(List<Color> colors, Color defaultColor){ this.colors=colors; this.defaultColor=defaultColor; @@ -14,11 +14,20 @@ public class DistinctColorGenerator { } public Color nextColor(Cell cell ){ + List<Cell> neighbors = cell.getNeighbours(); + + List<Color> neighbor_colors = new ArrayList<Color>(); + + for(Cell c : neighbors){ + neighbor_colors.add(c.getColor()); + } + for(int i=0; i < colors.size(); i++){ - if (colors.get(i)==cell){ + if (!neighbor_colors.contains(colors.get(i))){ return colors.get(i); } } + return defaultColor; } } diff --git a/app/src/main/java/model/SquareCell.java b/app/src/main/java/model/SquareCell.java index 00c7d6bdbb9ac188e2b322da225eacb9b015ffc1..a5b6866b259250df6a37089c172003fb9e6ac7cb 100644 --- a/app/src/main/java/model/SquareCell.java +++ b/app/src/main/java/model/SquareCell.java @@ -2,6 +2,7 @@ package model; import javafx.scene.paint.Color; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -11,15 +12,19 @@ public class SquareCell extends AbstractCell{ public SquareCell (){ - Cell DEFAULT_CELL_COLOR; + this.setColor( DEFAULT_CELL_COLOR); + this.neighbours=new ArrayList<Cell>(); } public SquareCell(Color color){ this.setColor(color); + this.neighbours=new ArrayList<Cell>(); + } public SquareCell(Color color,List<Cell> neighbours ){ this.setColor(color); this.neighbours= neighbours; + } diff --git a/app/src/test/java/model/ArrayGridTest.java b/app/src/test/java/model/ArrayGridTest.java index 91d1b9f982349973bec57b8c30e27f1fdc421a7b..9e2c352ecf5a4c31c711ca4e2469c0d76f343a7c 100644 --- a/app/src/test/java/model/ArrayGridTest.java +++ b/app/src/test/java/model/ArrayGridTest.java @@ -66,7 +66,7 @@ class ArrayGridTest { @Test void testColor() { setArrayGridThreeFourRed(); - arrayGridThreeFour.color(cell -> Color.BLACK); + arrayGridThreeFour.color(cell -> Color.GREEN); for (int rowIndex = 0; rowIndex < 3; rowIndex++) { for (int columnIndex = 0; columnIndex < 4; columnIndex++) { assertThat(arrayGridThreeFour.getCell(rowIndex,columnIndex).getColor()).isEqualTo(Color.BLACK);