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);
+    }
+}