public GameState GenerateNewNumber() { FreeSpace.Clear(); GameState OKGameStateReturn = GameState.Continue; // fill with nulls for (int i = 0; i < Cols; i++) { for (int j = 0; j < Rows; j++) { if (GameBoard[i, j] == 0) { FreeSpace.Add(new int[2] { i, j }); } if (GameBoard[i, j] == 2048) { if (!ContinueGameMode) { OKGameStateReturn = GameState.Won; } } } } if (FreeSpace.Count > 0) { // 80% chance to generate one number, 20% chance to generate two numbers int repeatNewNumber = 1; if (RNG.Next(1, 6) == 5) { repeatNewNumber = 2; } for (int k = 1; k <= repeatNewNumber; k++) { // 80% chance to 2, 20% chance to 4 int numberValue = 2; if (RNG.Next(1, 6) == 5) { numberValue = 4; } // select random free spot int[] selectedSpot = FreeSpace[RNG.Next(0, FreeSpace.Count)]; // place the number to the spot GameBoard[selectedSpot[0], selectedSpot[1]] = numberValue; } return(OKGameStateReturn); } else { return(GameState.Lost); } }