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