diff --git a/app/src/main/java/controller/GameController.java b/app/src/main/java/controller/GameController.java
index 5c2c1d7346ee30d4313655e5f9f448834d86c422..de471560b405621f3b6fd29606e35ff5edb18842 100644
--- a/app/src/main/java/controller/GameController.java
+++ b/app/src/main/java/controller/GameController.java
@@ -13,7 +13,7 @@ import java.util.List;
 import java.util.Random;
 
 public class GameController {
-    public static final Color COLOR_ONE   = Color.TAN;
+    public static final Color COLOR_ONE   = Color.RED;
     public static final Color COLOR_TWO   = Color.NAVAJOWHITE;
     public static final Color COLOR_THREE = Color.GRAY;
     public static final Color COLOR_FOUR  = Color.GREEN;
@@ -77,7 +77,7 @@ public class GameController {
     @FXML
     public void fillGridDistinct() {
           fillGridUniform();
-          colorGrid( new DistinctColorGenerator(List.of(COLOR_THREE, COLOR_FOUR), COLOR_ONE));//List.of(COLOR_THREE, COLOR_FOUR)));
+          colorGrid( new DistinctColorGenerator( List.of(COLOR_THREE, COLOR_FOUR),COLOR_ONE));//List.of(COLOR_THREE, COLOR_FOUR)));
     }
 
     @FXML
@@ -94,22 +94,22 @@ public class GameController {
     private void playComputerTurn(){
         // TODO
         //  uncomment
-        // if (!game.hasEnded() && !game.isHumanTurn()){
-        //    ComputerPlayer player = ((ComputerPlayer) game.getPlayer());
-        //    Flooder.flood(player.getStartCell(), player.play());
-        //    setScoreLabelTextProperty();
-        //    pause.play();
-        // }
+        if (!game.hasEnded() && !game.isHumanTurn()){
+            ComputerPlayer player = ((ComputerPlayer) game.getPlayer());
+            Flooder.flood(player.getStartCell(), ((ComputerPlayer) game.getPlayer()).play());
+            setScoreLabelTextProperty();
+            pause.play();
+         }
     }
 
     public void playHumanTurn(Color color){
         // TODO
         //  uncomment
-        // if(!game.hasEnded() && game.isHumanTurn()){
-        //     Flooder.flood(game.getPlayer().getStartCell(), color);
-        //    setScoreLabelTextProperty();
-        //    game.incrementTurn();
-        //}
+         if(!game.hasEnded() && game.isHumanTurn()){
+             Flooder.flood(game.getPlayer().getStartCell(), color);
+            setScoreLabelTextProperty();
+            game.incrementTurn();
+        }
     }
 
     private void setPauseAnimation(){
@@ -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,7 +145,7 @@ public class GameController {
     @FXML
     public void setPlayerHuman(){
         // TODO
-        // game.setPlayer(new HumanPlayer("human", getGridStartCell()));
+        game.setPlayer(new HumanPlayer("human", getGridStartCell()));
     }
 
     @FXML
diff --git a/app/src/main/java/model/ArrayGrid.java b/app/src/main/java/model/ArrayGrid.java
index d8c22d7fbb6c18d40bb0c607d3c50249c432f968..c75fa18e09ee3cb2cb3769d6f30ff497709f623e 100644
--- a/app/src/main/java/model/ArrayGrid.java
+++ b/app/src/main/java/model/ArrayGrid.java
@@ -8,17 +8,19 @@ public class ArrayGrid implements Grid{
     private int numberOfRows;
     private int numberOfColumns;
     public ArrayGrid(int numberOfRows, int 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();
+        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++){
+                    cells[i][j] = new SquareCell();
             }
         }
 
-    }
+    }}
     @Override
     public Cell getCell(int row, int column) {
         return this.cells[row][column];
diff --git a/app/src/main/java/model/Cell.java b/app/src/main/java/model/Cell.java
index 4f09b41bc92f4c117ab722f4e7a642c4c691aa54..e34e6d6034b293829d6d1318d6c044c460f4c077 100644
--- a/app/src/main/java/model/Cell.java
+++ b/app/src/main/java/model/Cell.java
@@ -41,6 +41,7 @@ public interface Cell {
      * @return this {@link Cell}'s property
      */
     Property<Color> getColorProperty();
+    Iterator<Cell> iterator();
 
 
 }
diff --git a/app/src/main/java/model/ColoredCellIerator.java b/app/src/main/java/model/ColoredCellIerator.java
new file mode 100644
index 0000000000000000000000000000000000000000..0800efb3bd402c0a77c446ea111b87d7af74f2e8
--- /dev/null
+++ b/app/src/main/java/model/ColoredCellIerator.java
@@ -0,0 +1,42 @@
+package model;
+
+
+
+import javafx.scene.paint.Color;
+import util.SetUtil;
+
+import java.util.*;
+
+public class ColoredCellIerator{ /*implements Iterator<Cell> {
+
+    Color color;
+    List<Cell> cells;
+    Set<Cell> visitedCells;
+    Set<Cell> pendingCells=new HashSet<Cell>();
+
+
+    public ColoredCellIerator(Cell startCell){
+        this.color=startCell.getColor();
+        this.visitedCells= new HashSet<Cell>();
+        this.pendingCells.add(startCell);
+
+    }
+    @Override
+    public boolean hasNext() {
+        if (this.pendingCells.size()==0) return false;
+        return true;
+    }
+
+    @Override
+    public Cell next() {
+        for( int i=0; i< this.pendingCells.size();i++){
+            if (SetUtil.anyElement(this.pendingCells)!= SetUtil.anyElement(this.visitedCells)&&(SetUtil.anyElement(this.pendingCells).getColor()==this.color){
+                //this.visitedCells.add(SetUtil.anyElement())
+            }
+        }
+
+
+
+        return null;
+    }*/
+}
diff --git a/app/src/main/java/model/ComputerPlayer.java b/app/src/main/java/model/ComputerPlayer.java
new file mode 100644
index 0000000000000000000000000000000000000000..7796e9c1bf37746562a0e38c4b13deeb92bf8e5b
--- /dev/null
+++ b/app/src/main/java/model/ComputerPlayer.java
@@ -0,0 +1,29 @@
+package model;
+
+import com.sun.prism.paint.Color;
+
+public class ComputerPlayer implements Player{
+    @Override
+    public boolean isHuman() {
+        return false;
+    }
+
+    @Override
+    public int coloredArea(Cell startCell) {
+        return 0;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public Cell getStartCell() {
+        return null;
+    }
+    public javafx.scene.paint.Color play(){
+        return Color.RED;
+    }
+
+}
diff --git a/app/src/main/java/model/DistinctColorGenerator.java b/app/src/main/java/model/DistinctColorGenerator.java
index 2285c4ccbb61c50930bccc8477572b7974964a0b..f2eb4e2eed7f691b57620fa1421d38378baf7e8e 100644
--- a/app/src/main/java/model/DistinctColorGenerator.java
+++ b/app/src/main/java/model/DistinctColorGenerator.java
@@ -13,21 +13,27 @@ public class DistinctColorGenerator implements ColorGenerator {
 
     }
 
-    public Color nextColor(Cell cell ){
-        List<Cell> neighbors = cell.getNeighbours();
+    public Color nextColor(Cell cell ) {
+
+        List<Cell> neighbors = new ArrayList<>();
+
+        System.out.println(neighbors.size());
 
         List<Color> neighbor_colors = new ArrayList<Color>();
 
-        for(Cell c : neighbors){
+
+        for (Cell c : neighbors) {
             neighbor_colors.add(c.getColor());
         }
-
-        for(int i=0; i < colors.size(); i++){
-            if (!neighbor_colors.contains(colors.get(i))){
-                return colors.get(i);
+        for (int i = 0; i < colors.size(); i++) {
+            for (int j = 0; j < neighbor_colors.size(); j++) {
+                //if (colors.get(i)==neighbor_colors.get(j)) //break;//if (!(neighbor_colors.contains(colors.get(i)))){
             }
-        }
 
+            return this.colors.get(i);
+        }
         return defaultColor;
+
     }
+
 }
diff --git a/app/src/main/java/model/FloodGame.java b/app/src/main/java/model/FloodGame.java
index 64d44a1846ae2c7bb0c04b029682013396941bc0..c451a6e277167f200bc0a4150293a216bb31ba6f 100644
--- a/app/src/main/java/model/FloodGame.java
+++ b/app/src/main/java/model/FloodGame.java
@@ -49,18 +49,18 @@ public class FloodGame {
 
 
     public int getPlayerScore(Player player) {
-        // TODO
-        return 0;
+        //todo
+        return this.getPlayerScore(player);
     }
 
     public boolean hasWon(Player player){
+        return this.getPlayerScore(player)==this.totalFloodingArea;
         // TODO
-        return false;
     }
 
     public boolean hasEnded(){
         // TODO
-        return false;
+        return this.getTurn()>=25;
     }
 
 }
diff --git a/app/src/main/java/model/Flooder.java b/app/src/main/java/model/Flooder.java
new file mode 100644
index 0000000000000000000000000000000000000000..52f78e7240c3aa0e352a83878efe937823ec8272
--- /dev/null
+++ b/app/src/main/java/model/Flooder.java
@@ -0,0 +1,14 @@
+package model;
+
+import javafx.scene.paint.Color;
+
+public class Flooder {
+
+    public static void flood(Cell startCell, Color floodingColor){
+
+    }
+    public static int coloredArea(Cell startCell){
+        return 0;
+
+    }
+}
diff --git a/app/src/main/java/model/GrayCell.java b/app/src/main/java/model/GrayCell.java
index 8007887ea0a9ca53b4ec9b5bf8d7a894c9711ac3..b417d3f743eeb10dcb8eceb312333195f260f52a 100644
--- a/app/src/main/java/model/GrayCell.java
+++ b/app/src/main/java/model/GrayCell.java
@@ -3,10 +3,19 @@ package model;
 import javafx.beans.property.Property;
 import javafx.scene.paint.Color;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 public class GrayCell extends AbstractCell{
 
+    Cell[][] cells;
+    int dim;
+    public GrayCell(Cell[][] cells, int dim){
+
+
+    }
+    public GrayCell(){}
     public static final Cell GRAY_CELL = new GrayCell();
 
     /**
@@ -16,6 +25,8 @@ public class GrayCell extends AbstractCell{
      */
     @Override
     public List<Cell> getNeighbours() {
+        List<Cell> neighbours= new ArrayList<Cell>();
+
         return null;
     }
 
@@ -30,6 +41,11 @@ public class GrayCell extends AbstractCell{
 
     }
 
+    @Override
+    public Iterator<Cell> iterator() {
+        return null;
+    }
+
     @Override
     public void setColor(Color color){
 
diff --git a/app/src/main/java/model/Grid.java b/app/src/main/java/model/Grid.java
index b02c149464004c8e4cd7a62bb0da7924aca58be5..4487a8a2dc7c51132a146d98eca9617166f1e6e3 100644
--- a/app/src/main/java/model/Grid.java
+++ b/app/src/main/java/model/Grid.java
@@ -1,5 +1,7 @@
 package model;
 
+import java.util.Iterator;
+
 public interface  Grid extends Iterable<Cell> {
 
     /**
@@ -29,4 +31,6 @@ public interface  Grid extends Iterable<Cell> {
      */
     void color(ColorGenerator colorGenerator);
 
+
+
 }
diff --git a/app/src/main/java/model/HumanPlayer.java b/app/src/main/java/model/HumanPlayer.java
new file mode 100644
index 0000000000000000000000000000000000000000..e83c215d307ac7e557b53ed475b9b850c12d98a8
--- /dev/null
+++ b/app/src/main/java/model/HumanPlayer.java
@@ -0,0 +1,34 @@
+package model;
+
+public class HumanPlayer implements Player{
+
+    String name;
+    Cell startCell;
+    public HumanPlayer(String name, Cell startCell){
+        this.name=name;
+        this.startCell=startCell;
+    }
+    HumanPlayer(Cell startCell){
+        this.name="player";
+        this.startCell=startCell;
+    }
+    @Override
+    public boolean isHuman() {
+        return false;
+    }
+
+    @Override
+    public int coloredArea(Cell startCell) {
+        return 0;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public Cell getStartCell() {
+        return null;
+    }
+}
diff --git a/app/src/main/java/model/Player.java b/app/src/main/java/model/Player.java
index ded52afe6c06545ba9784bd1fd110e49afd3266d..4ab3d75075d6d87b32ace989e0c857dab10c787f 100644
--- a/app/src/main/java/model/Player.java
+++ b/app/src/main/java/model/Player.java
@@ -2,4 +2,8 @@ package model;
 
 public interface Player {
     boolean isHuman();
+    int coloredArea(Cell startCell);
+    String getName();
+    Cell getStartCell();
+    
 }
diff --git a/app/src/main/java/model/SquareCell.java b/app/src/main/java/model/SquareCell.java
index a5b6866b259250df6a37089c172003fb9e6ac7cb..0ff9a94d25c73df68a997b7f1ffef5d053ed3852 100644
--- a/app/src/main/java/model/SquareCell.java
+++ b/app/src/main/java/model/SquareCell.java
@@ -52,5 +52,11 @@ public class SquareCell extends AbstractCell{
 
     }
 
+    @Override
+    public Iterator<Cell> iterator() {
+      //  return new ColoredCellIterator();
+        return null;
+    }
+
 
 }
diff --git a/app/src/main/java/view/MatrixPane.java b/app/src/main/java/view/MatrixPane.java
index 2843295c2523e1bcf389a15d1d1459d87a864fa8..b9b744ddaa26eb0bdbd5d7d5e0e8ffffbe65771e 100644
--- a/app/src/main/java/view/MatrixPane.java
+++ b/app/src/main/java/view/MatrixPane.java
@@ -32,6 +32,7 @@ public class MatrixPane extends GridPane {
         // TODO replace by new ArrayGrid(numberOfRows, numberOfColumns)
         cellGrid = new ArrayGrid(numberOfRows, numberOfColumns);
         initMatrix();
+
     }