Ejemplo n.º 1
0
        // Metodo eseguito quando l'utente ha stabilito la configurazione di gioco
        private void AcquireConfiguration(object sender, EventArgs e)
        {
            if (_settingsMemento == null)
            {
                // CASO A - Non è stata acquisita alcuna configurazione di gioco
                // si acquisisce la configurazione di gioco stabilita dall'utente
                _minefieldCreator = _settingsController.GetGameConfiguration(out _length, out _height,
                                                                             out _mines, out _modality);

                // si crea un campo minato e una partita opportunamente configurate con le scelte dell'utente
                _minefield       = _minefieldCreator.CreateMinefield(_length, _height, _mines);
                _minesweeperGame = new MinesweeperGame(_minefield, _modality);
                // si crea un gestore eventi per la scoperta di una zona del campo minato
                _minesweeperGame.ZoneUncovered += UpdateInteractableZone;
                // si configurano le zone interagibili e i controlli del form di gioco
                _mainForm.SetInteractableMinefieldSize(_length, _height);
                _interactableZoneUncovered = false;
                SetFormControls();
                // si memorizza lo stato attuale del form delle impostazioni
                _settingsMemento = _settingsController.SaveState();
            }
            else
            {
                // CASO B - Almeno una configurazione di gioco è stata acquisita
                // si acquisisce lo stato attuale del form delle impostazioni
                IMemento newMemento = _settingsController.SaveState();

                // si configura una nuova partita se almeno una zona interagibile è stata scoperta
                // oppure se il vecchio e il nuovo memento delle impostazioni differiscono tra loro
                if (_interactableZoneUncovered || !_settingsMemento.Equals(newMemento))
                {
                    // si acquisisce e si analizza la configurazione di gioco più recente
                    AcquireNewConfiguration();
                    // si configurano le zone interagibili e i controlli del form di gioco
                    _mainForm.SetInteractableMinefieldSize(_length, _height);
                    _interactableZoneUncovered = false;
                    SetFormControls();
                    // si memorizza lo stato attuale del form delle impostazioni
                    _settingsMemento = newMemento;
                }
            }
        }