Exemple #1
0
        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);
            }
        }