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