/// <summary>
 /// Set readonly property
 /// </summary>
 public void UpdateIsReadOnly()
 {
     // if all panels are locked readonly is true
     IsReadOnly = Panels.All(panel => (bool)TypeDescriptor.GetProperties(panel.Controls[0])["Locked"].GetValue(panel.Controls[0]));
 }
Exemple #2
0
        public void Reveal(int x, int y)
        {
            //1. Encontrar o painel
            var selectedPanel = Panels.First(panel => panel.X == x && panel.Y == y);

            //2. Apenas revelar se não estiver marcado
            if (!selectedPanel.IsFlagged)
            {
                var first = false;

                //3. Se não há nenhum painel revelado é o primeiro movimento
                if (Panels.All(panel => !panel.IsRevealed))
                {
                    //O primeiro movimento adiciona as minas
                    FirstMove(x, y, rand);
                    first = true;
                }

                //4. Spawnar cogumelo
                if (selectedPanel.IsMushroom)
                {
                    coroutines.Start(SpawnMushroom(x, y, rand));
                }

                //Revelar o painel
                selectedPanel.IsRevealed    = true;
                selectedPanel.ShowSelection = false;

                //5. Checar se o painel clicado é mina
                if (selectedPanel.IsMine)
                {
                    //Se o jogador não tiver mais chances terminar o jogo
                    if (chances <= 0)
                    {
                        GameOver();
                    }
                    else
                    {
                        chances--;
                    }
                }

                //6. se o painel é um zero, revelar vizinhos em cascata
                if (!selectedPanel.IsMine && selectedPanel.AdjacentMines == 0)
                {
                    RevealZeros(x, y);
                }

                //7. Adicionar Cogumelos se for o primeiro movimento
                if (first)
                {
                    PlaceMushrooms(rand);
                }

                //8. se o movimento causar o fim do jogo, terminar o jogo
                if (!selectedPanel.IsMine)
                {
                    CompletionCheck();
                }
            }
        }