// 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; } } }