Beispiel #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;
                }
            }
        }
Beispiel #2
0
        // Metodo che acquisisce e analizza la configurazione di gioco più recente stabilita dall'utente
        private void AcquireNewConfiguration()
        {
            // si memorizzano a parte il vecchio creatore di campo minato e la vecchia modalità di gioco
            IMinefieldCreator oldMinefieldCreator = _minefieldCreator;

            MinesweeperGame.GameModality oldModality = _modality;

            // si acquisisce la nuova configurazione di gioco stabilita dall'utente
            _minefieldCreator = _settingsController.GetGameConfiguration(out _length, out _height,
                                                                         out _mines, out _modality);

            // CASO A - se si ha acquisito una nuova tipologia di campo minato oppure una nuova
            // modalità di gioco allora si crea una nuova partita con nuove impostazioni
            if (oldMinefieldCreator.GetMinefieldName() != _minefieldCreator.GetMinefieldName() ||
                oldModality != _modality)
            {
                // si determina se creare un nuovo campo minato dello stesso tipo oppure di tipo diverso
                if (oldMinefieldCreator.GetMinefieldName() != _minefieldCreator.GetMinefieldName())
                {
                    _minefield = _minefieldCreator.CreateMinefield(_length, _height, _mines);
                }
                else
                {
                    _minefield.CreateNewMinefield(_length, _height, _mines);
                }

                // si crea una nuova partita con nuove impostazioni
                _minesweeperGame.NewGame(_minefield, _modality);
            }
            else
            {
                // CASO B - se si ha acquisito la stessa tipologia di campo minato e la stessa
                // modalità di gioco allora si crea una nuova partita con le medesime impostazioni
                _minefield.CreateNewMinefield(_length, _height, _mines);
                _minesweeperGame.NewGame();
            }
        }