Esempio n. 1
0
        // Metodo che aggiorna opportunamente il form principale di gioco in caso di partita persa
        private void GameLost()
        {
            // si acquisiscono le coordinate di posizione delle mine
            List <Tuple <int, int> > minesCoordinates = _minefield.GetMinesCoordinates();

            // si visualizzano le mine non individuate e le zone erroneamente contrassegnate come minate
            for (int y = 0; y < _height; y++)
            {
                for (int x = 0; x < _length; x++)
                {
                    if (minesCoordinates.Contains(new Tuple <int, int>(x, y)))
                    {
                        // se le coordinate analizzate fanno riferimento a una zona minata ma la corrispondente
                        // zona interagibile non è stata contrassegnata allora lo stato della zona interagibile
                        // viene modificato per indicare una zona minata non individuata
                        if (_mainForm.GetInteractableZoneState(x, y) == InteractableZone.ZoneState.Covered)
                        {
                            _mainForm.SetInteractableZoneState(x, y, InteractableZone.ZoneState.Mined);
                        }
                    }
                    else
                    {
                        // se le coordinate analizzate non fanno riferimento a una zona minata ma la
                        // corrispondente zona interagibile è stata contrassegnata allora lo stato della zona
                        // interagibile viene modificato per indicare una zona erroneamente contrassegnata
                        if (_mainForm.GetInteractableZoneState(x, y) == InteractableZone.ZoneState.Flagged)
                        {
                            _mainForm.SetInteractableZoneState(x, y, InteractableZone.ZoneState.IncorrectlyFlagged);
                        }
                    }
                }
            }

            // numero di mine non contrassegnate come minate al termine della partita
            int minesNotFlagged = 0;

            // si conteggiano tutte le zone minate che non sono state contrassegnate al termine della partita
            for (int y = 0; y < _height; y++)
            {
                for (int x = 0; x < _length; x++)
                {
                    if (_mainForm.GetInteractableZoneState(x, y) == InteractableZone.ZoneState.Mined ||
                        _mainForm.GetInteractableZoneState(x, y) == InteractableZone.ZoneState.Exploded)
                    {
                        minesNotFlagged++;
                    }
                }
            }

            // si aggiorna l'etichetta-contatore per indicare la quantità totale di mine non individuate
            UpdateMinesCounterLabel(minesNotFlagged);

            // si modifica l'immagine associata al bottone della partita per indicare la sconfitta
            _mainForm.SetGameButtonImage(Properties.Resources.DefeatButton);
        }