/// <exception cref="ArgumentOutOfRangeException"/> /// <exception cref="ArgumentException"/> public void Gioca(Livello livello, params int[] numeri) { int[] a = { 70, 40, 20 }; _numeriDaEstrarre = a[(int)livello]; // creo ogni volta un nuovo array così viene inizializzato // con tutti false _numeriGiocati = new bool[N + 1]; ContatoreEstratti = 0; foreach (int n in numeri) { if (n < 1 || n > N) { throw new ArgumentOutOfRangeException($"I numeri devono essere compresi tra 1 e {N}"); } // se n è già stato giocato, nell'array _numeriGiocati // la cella di indice n contiene true if (_numeriGiocati[n]) // se ho già giocato il numero n { throw new ArgumentException("I numeri da giocare devono essere diversi"); } _numeriGiocati[n] = true; } OnGiocoIniziato(); _gc.Reset(); // per ogni volta che si gioca NumeriEstratti.Clear(); ContatoreIndovinati = 0; NumeriIndovinati.Clear(); }
public int Estrai() { if (ContatoreEstratti >= _numeriDaEstrarre) { throw new InvalidOperationException("Estrazioni esaurite"); } int estratto = _gc.Next(); NumeriEstratti.Add(estratto); ContatoreEstratti++; OnEstratto(); AggiornaSituazione(estratto); if (ContatoreEstratti == _numeriDaEstrarre) { OnGiocoTerminato(); } return(estratto); }