From f1908b4d0d33aa72eaec70e5655f70b57e54290a Mon Sep 17 00:00:00 2001 From: Hang <thi-hang.NGUYEN@etu.univ-amu.fr> Date: Fri, 18 Nov 2022 17:19:45 +0100 Subject: [PATCH] THN --- app/src/main/java/model/ArrayGrid.java | 76 +++++++++++++------ .../main/java/model/ColoredCellIterator.java | 4 +- app/src/main/java/model/ComputerPlayer.java | 41 ++++++++-- .../main/java/model/CyclicColorGenerator.java | 8 +- app/src/main/java/model/CyclicStrategy.java | 22 ++++++ app/src/main/java/model/FloodGame.java | 8 +- app/src/main/java/model/Flooder.java | 18 ++++- app/src/main/java/model/GreedyStrategy.java | 10 +++ app/src/main/java/model/HumanPlayer.java | 11 ++- app/src/main/java/model/Player.java | 2 +- app/src/main/java/model/RandomStrategy.java | 20 +++++ app/src/main/java/model/RandomWalk.java | 29 +++++++ 12 files changed, 198 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/model/CyclicStrategy.java create mode 100644 app/src/main/java/model/GreedyStrategy.java create mode 100644 app/src/main/java/model/RandomStrategy.java create mode 100644 app/src/main/java/model/RandomWalk.java diff --git a/app/src/main/java/model/ArrayGrid.java b/app/src/main/java/model/ArrayGrid.java index 8838c64..0f5904b 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 010e0c7..6afd377 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 b97bf17..fd7ac9f 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 7e6df5c..00dc1e4 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 0000000..450fc16 --- /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 c451a6e..317b3ec 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 52f78e7..b984f52 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 0000000..79676a2 --- /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 e83c215..bd12f9f 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 4ab3d75..22a6ebf 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 0000000..bbeefab --- /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 0000000..6acc7b5 --- /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); + } +} -- GitLab