Exemple #1
0
        // Costruttore che associa a ciascun campo minato un nome univoco, una descrizione e un creatore
        public MinesweeperHelper()
        {
            // si acquisiscono tutti i tipi contenuti nella libreria
            Type[] libraryTypes = GetType().Assembly.GetTypes();

            // creazione e inizializzazione della lista dei tipi di creatore di campi minati
            List <Type> minefieldCreatorTypes = new List <Type>();

            foreach (Type libraryType in libraryTypes)
            {
                // se il tipo analizzato è un creatore di campi minati allora viene aggiunto alla lista
                if (typeof(IMinefieldCreator).IsAssignableFrom(libraryType))
                {
                    minefieldCreatorTypes.Add(libraryType);
                }
            }
            // si rimuove dalla lista il tipo rappresentante l'interfaccia di un creatore di campi minati
            minefieldCreatorTypes.Remove(typeof(IMinefieldCreator));

            // insieme di elementi non uguali contenente i nomi dei campi minati
            HashSet <string> minefieldNamesHashSet = new HashSet <string>();

            // creazione e inizializzazione della "tabella" delle informazioni dei campi minati
            _minefieldsTable = new List <Tuple <string, string, Type> >();
            foreach (Type creatorType in minefieldCreatorTypes)
            {
                // si crea un'istanza di un creatore di campi minati
                IMinefieldCreator creator = (IMinefieldCreator)Activator.CreateInstance(creatorType);
                // si aggiunge il nome del campo minato a cui il creatore fa riferimento nella struttura HashSet
                minefieldNamesHashSet.Add(creator.GetMinefieldName().Trim());
                // si aggiunge alla "tabella" delle informazioni dei campi minati una nuova entry
                _minefieldsTable.Add(new Tuple <string, string, Type>(creator.GetMinefieldName().Trim(),
                                                                      creator.GetMinefieldInfo().Trim(),
                                                                      creatorType));
            }

            if (minefieldNamesHashSet.Count < minefieldCreatorTypes.Count)
            {
                throw new Exception
                          ("Ciascun creatore di campo minato deve restituire un nome univoco di campo minato!");
            }
        }
Exemple #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();
            }
        }
Exemple #3
0
        // Metodo che richiama il form che visualizza le informazioni relative alla partita in corso
        private void CallUpGameInfo(object sender, EventArgs e)
        {
            // si crea il form delle informazioni sulla partita
            InfoView gameInfo = new InfoView
            {
                // vengono aggiornate le informazioni contenute nel form
                MinefieldName   = _minefieldCreator.GetMinefieldName(),
                MinefieldLength = _length.ToString(),
                MinefieldHeight = _height.ToString(),
                MinefieldMines  = _mines.ToString(),
                ModalityName    = _minesweeperGame.SelectedModality.ToString(),
                Attempts        = "---"
            };

            // vengono visualizzati i tentativi rimanenti e totali se tale informazione è definita
            if (_minesweeperGame.RemainingAttempts != null)
            {
                gameInfo.Attempts = _minesweeperGame.RemainingAttempts + " / " + _minesweeperGame.TotalAttempts;
            }

            // si visualizza il form come finestra di dialogo modale
            gameInfo.ShowDialog();
        }