diff --git a/app/src/main/java/model/ArrayGrid.java b/app/src/main/java/model/ArrayGrid.java index 8838c6431b8810f711a7c8f8ec29da75bc4e7db7..0f5904bb4541f97a6e7a5e69f072538461fb67ad 100644 --- a/app/src/main/java/model/ArrayGrid.java +++ b/app/src/main/java/model/ArrayGrid.java @@ -12,34 +12,62 @@ public class ArrayGrid implements Grid{ public ArrayGrid(int numberOfRows, int numberOfColumns){ if (numberOfRows <= 0 || numberOfColumns <= 0){ throw new IllegalArgumentException();} - else{ - this.numberOfColumns=numberOfColumns; - this.numberOfRows=numberOfRows; - this.cells=new SquareCell[numberOfRows][numberOfColumns]; - for (int i=0; i< numberOfRows;i++){ - for (int j=0; j < numberOfColumns; j++){ + else { + this.numberOfColumns = numberOfColumns; + this.numberOfRows = numberOfRows; + 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(); } } - } - for(int i=0; i< this.numberOfRows;i++){ - for(int j=0; j< this.numberOfColumns; j++){ - List<Cell> neighbours= new ArrayList<Cell>(); - if (i==0) - neighbours.add(getCell(i+1,j)); - if (i==numberOfRows-1) - neighbours.add(getCell(i-1,j)); - if (j==0) - neighbours.add(getCell(i,j+1)); - if (j==numberOfColumns-1) - neighbours.add(getCell(i, j-1)); - else { - neighbours.add(getCell(i - 1, j)); - neighbours.add(getCell(i, j - 1)); - neighbours.add(getCell(i + 1, j)); - neighbours.add(getCell(i, j + 1)); + + for (int i = 0; i < this.numberOfRows; i++) { + for (int j = 0; j < this.numberOfColumns; j++) { + if ((0 < i && i < this.numberOfRows - 1) && (0 < j && j < this.numberOfColumns - 1)) { + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + this.getCell(i,i).getNeighbours().add(getCell(i, j - 1)); + this.getCell(i,i).getNeighbours().add(getCell(i + 1, j)); + this.getCell(i,i).getNeighbours().add(getCell(i, j + 1)); + } + if (i == 0 && j == 0) { + this.getCell(i,i).getNeighbours().add(this.cells[i + 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j + 1]); + } + if (i == numberOfRows - 1 && j == this.numberOfColumns - 1) { + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j - 1]); + } + if (i == this.numberOfRows - 1 && j == 0) { + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j + 1]); + } + if (i == 0 && j == numberOfColumns - 1) { + this.getCell(i,i).getNeighbours().add(this.cells[i + 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j - 1]); + } + if (i == 0 & 0 < j && j < this.numberOfColumns - 1) { + this.getCell(i,i).getNeighbours().add(this.cells[i][j - 1]); + this.getCell(i,i).getNeighbours().add(this.cells[i + 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j + 1]); + + } + if (i == this.numberOfRows - 1 & 0 < j && j < this.numberOfColumns - 1) { + this.getCell(i,i).getNeighbours().add(this.cells[i][j - 1]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j + 1]); + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + } + if ((0 < i && i < this.numberOfRows - 1) && j == 0) { + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i + 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j + 1]); + } + if ((0 < i && i < this.numberOfRows - 1) && j == this.numberOfColumns - 1) { + this.getCell(i,i).getNeighbours().add(this.cells[i - 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i + 1][j]); + this.getCell(i,i).getNeighbours().add(this.cells[i][j - 1]); + } } - getCell(i,j).setNeighbours(neighbours); } } } diff --git a/app/src/main/java/model/ColoredCellIterator.java b/app/src/main/java/model/ColoredCellIterator.java index 010e0c7fc3cde1dd336c1c3ec1b4e6e3227255cb..6afd3776c1af59626eea4a9461d0f72fbdb07a09 100644 --- a/app/src/main/java/model/ColoredCellIterator.java +++ b/app/src/main/java/model/ColoredCellIterator.java @@ -10,8 +10,8 @@ import java.util.*; public class ColoredCellIterator implements Iterator<Cell> { private final Color color; - Set<Cell> visitedCells; - Set<Cell> pendingCells=new HashSet<Cell>(); + public Set<Cell> visitedCells; + public Set<Cell> pendingCells=new HashSet<Cell>(); public ColoredCellIterator(Cell startCell){ diff --git a/app/src/main/java/model/ComputerPlayer.java b/app/src/main/java/model/ComputerPlayer.java index b97bf17de1df754bb2ab0fbf93b27bd36fa7e2aa..fd7ac9f22d840be221d6e0e05d311bf1f7a530ba 100644 --- a/app/src/main/java/model/ComputerPlayer.java +++ b/app/src/main/java/model/ComputerPlayer.java @@ -1,30 +1,55 @@ package model; -import com.sun.prism.paint.Color; +import javafx.scene.paint.Color; public class ComputerPlayer implements Player{ - //PlayStrate sdfdsfdsfm + + private String name; + private Cell cellStart; + private PlayStrategy strategi; + public ComputerPlayer(String name, Cell start){ + this.name=name; + this.cellStart=start; + } + public ComputerPlayer(Cell start, PlayStrategy strategi){ + this.name="player"; + this.cellStart=start; + this.strategi=strategi; + + } + public ComputerPlayer(String name, Cell start,PlayStrategy strategi){ + this.name=name; + this.cellStart=start; + this.strategi= strategi; + } @Override public boolean isHuman() { return false; } @Override - public int coloredArea(Cell startCell) { - return 0; + public void setName(String name) { + this.name = name; } @Override public String getName() { - return null; + return this.name; } @Override public Cell getStartCell() { - return null; + return this.cellStart; + } + public Color play(){ + return this.strategi.play(this.getStartCell());// Color.RED; + } + public Color setStrategy(PlayStrategy strategy){ + this.strategi=strategy; + return this.play(); } - public javafx.scene.paint.Color play(){ - return null ;// Color.RED; + public void setStartCell(Cell start){ + this.cellStart=start; } } diff --git a/app/src/main/java/model/CyclicColorGenerator.java b/app/src/main/java/model/CyclicColorGenerator.java index 7e6df5cccafcdc707ebb76b353c3fb6ded4dd7f9..00dc1e40f2129a5ea02b810359f937601a2b380d 100644 --- a/app/src/main/java/model/CyclicColorGenerator.java +++ b/app/src/main/java/model/CyclicColorGenerator.java @@ -6,13 +6,13 @@ import javafx.scene.paint.Color; import java.util.List; public class CyclicColorGenerator implements ColorGenerator { - List<Color> colors; - + private final List<Color> colors; + private int count; public CyclicColorGenerator(List<Color> colors){ this.colors=colors; - + this.count=0; } - int count=0; + @Override diff --git a/app/src/main/java/model/CyclicStrategy.java b/app/src/main/java/model/CyclicStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..450fc16d9a7bb3ff13136a2c6e94a4d4a639f797 --- /dev/null +++ b/app/src/main/java/model/CyclicStrategy.java @@ -0,0 +1,22 @@ +package model; + +import javafx.scene.paint.Color; + +import java.util.List; + +public class CyclicStrategy implements PlayStrategy{ + + private final List<Color>colors; + private int count; + public CyclicStrategy(List<Color> colors){ + this.colors=colors; + this.count=0; + + } + @Override + public Color play(Cell startCell) { + int color_index = count % this.colors.size(); + count++; + return this.colors.get(color_index); + } +} diff --git a/app/src/main/java/model/FloodGame.java b/app/src/main/java/model/FloodGame.java index c451a6e277167f200bc0a4150293a216bb31ba6f..317b3ecfedd6598b1bb3e87c55697601aaade44b 100644 --- a/app/src/main/java/model/FloodGame.java +++ b/app/src/main/java/model/FloodGame.java @@ -50,17 +50,19 @@ public class FloodGame { public int getPlayerScore(Player player) { //todo - return this.getPlayerScore(player); + if (player.getStartCell().getColor() == AbstractCell.DEFAULT_CELL_COLOR) + return 0; + return Flooder.coloredArea(player.getStartCell()); } public boolean hasWon(Player player){ - return this.getPlayerScore(player)==this.totalFloodingArea; + return this.getPlayerScore(player)==this.totalFloodingArea&& this.getTurn()<26; // TODO } public boolean hasEnded(){ // TODO - return this.getTurn()>=25; + return (this.getTurn()>=25 || hasWon(player)); } } diff --git a/app/src/main/java/model/Flooder.java b/app/src/main/java/model/Flooder.java index 52f78e7240c3aa0e352a83878efe937823ec8272..b984f52a3ab93bac0dccaa1202efeff3ee5857ee 100644 --- a/app/src/main/java/model/Flooder.java +++ b/app/src/main/java/model/Flooder.java @@ -2,13 +2,25 @@ package model; import javafx.scene.paint.Color; -public class Flooder { +import java.util.ArrayList; +import java.util.List; +public class Flooder { public static void flood(Cell startCell, Color floodingColor){ - + ColoredCellIterator start= new ColoredCellIterator(startCell); + while(start.hasNext()){ + start.next().setColor(floodingColor); + } } public static int coloredArea(Cell startCell){ - return 0; + ColoredCellIterator start= new ColoredCellIterator(startCell); + int count=0; + while(start.hasNext()) { + start.next(); + count++; + } + return count; } + } diff --git a/app/src/main/java/model/GreedyStrategy.java b/app/src/main/java/model/GreedyStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..79676a26898efdc853b1703d0c7725ca3b9c8c53 --- /dev/null +++ b/app/src/main/java/model/GreedyStrategy.java @@ -0,0 +1,10 @@ +package model; + +import javafx.scene.paint.Color; + +public class GreedyStrategy implements PlayStrategy{ + @Override + public Color play(Cell startCell) { + return null; + } +} diff --git a/app/src/main/java/model/HumanPlayer.java b/app/src/main/java/model/HumanPlayer.java index e83c215d307ac7e557b53ed475b9b850c12d98a8..bd12f9f5c7e3aa7b6da11cf0f2534937c387024a 100644 --- a/app/src/main/java/model/HumanPlayer.java +++ b/app/src/main/java/model/HumanPlayer.java @@ -14,21 +14,20 @@ public class HumanPlayer implements Player{ } @Override public boolean isHuman() { - return false; + return true; } @Override - public int coloredArea(Cell startCell) { - return 0; + public void setName(String name) { + this.name=name; } - @Override public String getName() { - return null; + return this.name; } @Override public Cell getStartCell() { - return null; + return this.startCell; } } diff --git a/app/src/main/java/model/Player.java b/app/src/main/java/model/Player.java index 4ab3d75075d6d87b32ace989e0c857dab10c787f..22a6ebfcaa560556efb184eac457dc8ef1eae012 100644 --- a/app/src/main/java/model/Player.java +++ b/app/src/main/java/model/Player.java @@ -2,7 +2,7 @@ package model; public interface Player { boolean isHuman(); - int coloredArea(Cell startCell); + void setName(String name); String getName(); Cell getStartCell(); diff --git a/app/src/main/java/model/RandomStrategy.java b/app/src/main/java/model/RandomStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..bbeefabf066d4602a1a8e64a08c53bfb9540f7e7 --- /dev/null +++ b/app/src/main/java/model/RandomStrategy.java @@ -0,0 +1,20 @@ +package model; +import javafx.scene.paint.Color; +import java.awt.*; +import java.util.Random; +import java.util.List; +import util.RandomUtil; +public class RandomStrategy implements PlayStrategy{ + private final List<Color> colors; + private Random randomColor; + + public RandomStrategy(List<Color>colors,Random randomColor){ + this.colors=colors; + this.randomColor=randomColor; + + } + @Override + public Color play(Cell startCell) { + return RandomUtil.randomElement(this.colors, this.randomColor); + } +} diff --git a/app/src/main/java/model/RandomWalk.java b/app/src/main/java/model/RandomWalk.java new file mode 100644 index 0000000000000000000000000000000000000000..6acc7b55e779aa279f47862eb53647d63b99ef3a --- /dev/null +++ b/app/src/main/java/model/RandomWalk.java @@ -0,0 +1,29 @@ +package model; + +import javafx.scene.paint.Color; +import util.RandomUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RandomWalk implements PlayStrategy{ + private List<Color> colors; + private Random randomColor; + private Cell cellStart; + public RandomWalk(List<Color> colors, Random randomColor){ + this.colors=colors; + this.randomColor=randomColor ; + + + } + @Override + public Color play(Cell startCell) { + List<Color>colorNeighbor=new ArrayList<Color>(); + for(Cell cell:startCell.getNeighbours()) + colorNeighbor.add(cell.getColor()); + if (colorNeighbor.contains(startCell.getColor())){ + colorNeighbor.remove(startCell.getColor());} + return RandomUtil.randomElement(colorNeighbor,this.randomColor); + } +}