// Metodo per collocare le navi in maniera casuale per l'IA public void CollocaNaviIA() { /* Questo metodo deve generare delle cordinate casuali e, se le cordinate * risulteranno valide, inserire la nave selezionata grazie ad un foreach * nel proprio campo da gioco. */ Casella casellaEstratta = new Casella(); int scelta; bool direzione; // qui ho cambiano la variabe da Nave a ListaNave visto che ha un nuovo nome e la stessa cosa l'ho fatto dalle altre parti foreach (var naveAttuale in this.ListaNavi) { do { // Genero un seme sempre diverso Random rand = new Random((int)DateTime.Now.Millisecond); // genero 2 numeri: uno per la riga, l'altro per la colonna casellaEstratta.Riga = rand.Next(0, 10); casellaEstratta.Colonna = rand.Next(0, 10); scelta = (rand.Next(1, 101)); // se il numero è pari direzione sarà uguale a orizzontale if ((scelta % 2) == 0) { direzione = true; } else { direzione = false; } naveAttuale.InserimentoNave(casellaEstratta, this.MioCampo, direzione); } while (naveAttuale.Inserita != true); } }
// Metodo per controllare quale nave sia stata colpita public bool ControllaNaveColpita(Casella casellaBersagliata) { bool naveAffondata = true; // Ciclo foreach per trovare quale nave del giocatore è stata colpita foreach (Nave naveAttuale in this.ListaNavi.ToList()) { if (naveAffondata) { // ciclo for per controllare se la naveAttuale sia la nave bersagliata for (int i = 0; i < naveAttuale.Lunghezza; i++) { // faccio un controllo tramite la casellaBersagliata e la casella attuale della nave if (naveAttuale.Posizione[i].Riga == casellaBersagliata.Riga && naveAttuale.Posizione[i].Colonna == casellaBersagliata.Colonna) { // nave trovata! invoco il metodo per controllare lo stato della nave naveAffondata = naveAttuale.ControlloDanni(casellaBersagliata); // se naveAffondata è uguale a true setto la variabile booleana Affondata della nave a true if (naveAffondata) { naveAttuale.Affondata = true; ListaNavi.Remove(naveAttuale); } } } } } return(naveAffondata); }
// Metodo per sparare nel campo dell'avversario public bool FaccioFuoco(Casella bersaglio, CampoDaGioco campoNemico) { bool colpito = false; // stati della casella: libera, occupata, mancata, colpita // Controllo che nella casella bersaglio sia presente una nave if (campoNemico.Casella[bersaglio.Riga, bersaglio.Colonna].StatoCasella == Stato.occupata) { colpito = true; // cambio lo stato della casella in modo che non possa essere più colpita campoNemico.Casella[bersaglio.Riga, bersaglio.Colonna].StatoCasella = Stato.colpita; campoNemico.Casella[bersaglio.Riga, bersaglio.Colonna].SimboloCasella = 'O'; } else { // anche se non è stata colpita nessuna nave devo cambiare lo stato della casella campoNemico.Casella[bersaglio.Riga, bersaglio.Colonna].StatoCasella = Stato.mancata; campoNemico.Casella[bersaglio.Riga, bersaglio.Colonna].SimboloCasella = 'X'; } return(colpito); }