Exemplo n.º 1
0
        public AzioneSelezioneDestra(Quantum quantum, Casella casellaPartenza)
        {
            this.casellaPartenza = casellaPartenza;
            this.quantum = quantum;
            naveUsata = casellaPartenza.Occupante;

            GuiManager gui = quantum.getGUI();
            gui.Tabellone.ResetSelezioneMouse();
            gui.Tabellone.MostraSelezione = false;

            // HACK: gestire in maniera sensata  e più agile il posizionamento dei Widget
            // (magari con un costruttore nuovo a cui si passa invece di solo un punto qualche informazione in più per posizionarsi?)
            // P.S: se ne è occupato Mirco! Ci metterà mano lui
            Vector2 pos1 = gui.Tabellone.Tile2Pixel(this.casellaPartenza);
            Vector2 pos2 = pos1;
            var lato = gui.Tabellone.LatoCasella;

            pos1 -= new Vector2(20 - lato / 2, 15);
            pos2 += new Vector2(20 + lato / 2, -15);

            bool puòRiconfig = !naveUsata.Riconfigurata;
            bool puòUsareSpecial = !naveUsata.SpecialUsata && checkSpecial(naveUsata);

            Riconfig = new Widget(pos1, doveDisegnoWidget.sinistra, widget.Riconfigura, puòRiconfig);
            Special = new Widget(pos2, doveDisegnoWidget.destra, widget.UsaSpecial, puòUsareSpecial);

            Riconfig.Click += riconfigura;
            Special.Click += usaSpecial;
            gui.Iscrivi(Riconfig);
            gui.Iscrivi(Special);
        }
Exemplo n.º 2
0
        public AzioneMovimento(Quantum quantum, Casella casellaPartenza, bool puòAttaccare = true)
        {
            this.casellaPartenza = casellaPartenza;
            naveMossa = casellaPartenza.Occupante;
            this.quantum = quantum;
            this.puòAttaccare = puòAttaccare;

            // Faccio partire il pathfinder
            pathFinder = new PathFinder();
            pathFinder.Start(this.casellaPartenza, naveMossa.MuoveInDiagonale);

            // Illumino le caselle raggiungibili
            int[] caselleRaggiungibili =

                Tile.Tiles(t =>
                {
                    Casella casella = t as Casella;
                    int d = pathFinder.DistanzaCasella(t);
                    return (d <= naveMossa.Pwr && d > 0 && (puòAttaccare || (casella != null && casella.Occupante == null) ));
                }
                ).Select(t => t.ID).ToArray();

            quantum.getGUI().Tabellone.ResetSelezioneMouse();
            quantum.getGUI().Tabellone.IlluminaCaselle(caselleRaggiungibili);
        }
Exemplo n.º 3
0
        private int numero;         //<Número de la casella.

        public Casella(Posicio posicio, Element element, Casella parella, int numero)
        {
            this.posicio = posicio;
            this.element = element;
            this.parella = parella;
            this.numero  = numero;
        }
    public Casella Muovi(int dado)
    {
        if (this.contatorePrigione != -1)
        {
            controller.Doppio = 0;
        }

        effettoCasella = false;
        Casella arrivo = partenza;

        percorso = new Casella[dado];
        for (int i = 0; i < dado; i++)
        {
            arrivo      = arrivo.prossimaCasella;
            percorso[i] = arrivo;
            if (percorso[i].name == "1" && this.contatorePrigione == -1)
            {
                this.TrasferimentoDenaro(200);
            }
        }
        if (this.contatorePrigione == -2)
        {
            this.contatorePrigione = -1;
        }

        this.indicePercorso = 0;
        return(arrivo);
    }
Exemplo n.º 5
0
        // Metodo per controllare se la nave sia stata affondata
        public bool ControlloDanni(Casella parteNaveColpita)
        {
            // dichiaro le variabili utili alla funzione
            bool colpitoeAffondato = true;

            // ciclo for per settare la casella come colpita
            for (int i = 0; i < this.Lunghezza; i++)
            {
                // vado a individuare il punto della nave che è stata colpito
                if (this.Posizione[i].Riga == parteNaveColpita.Riga &&
                    this.Posizione[i].Colonna == parteNaveColpita.Colonna)
                {
                    // casella trovata, vado a settare lo stato come colpita
                    this.Posizione[i].StatoCasella = Stato.colpita;
                }
            }

            // ciclo for per controllare se la nave sia affondata
            for (int i = 0; i < this.Lunghezza; i++)
            {
                if (this.Posizione[i].StatoCasella != Stato.colpita)
                {
                    colpitoeAffondato = false;
                }
            }
            return(colpitoeAffondato);
        }
Exemplo n.º 6
0
        private void bottoneCampoDaGioco_Click(object sender, MouseEventArgs e)
        {
            // Ottengo le cordinate del bottone cliccato
            Button bottoneCliccato = (Button)sender;
            Point  posizione       = (Point)bottoneCliccato.Tag;

            Casella casellaSelezionata = new Casella(posizione.X, posizione.Y);

            if (naveSelezionata == null)
            {
                formPartita.ConsoleLabel.Text = "Non hai selezionato ancora nessuna nave!";
            }
            else
            {
                switch (e.Button)
                {
                case MouseButtons.Right:
                    // Se premo il tasto destro del mouse devo modificare la direzione dell'inserimento da orizzontale
                    // a verticale o viceversa
                    direzioneInserimento          = !direzioneInserimento;
                    formPartita.ConsoleLabel.Text = "Direzione inserirento:" + ((direzioneInserimento)? "orizzontale" : "verticale");

                    break;

                case MouseButtons.Left:
                    // Controllo che la nave non sia stata inserita in precedenza
                    if (naveSelezionata.Inserita)
                    {
                        formPartita.ConsoleLabel.Text = "La nave selezionata è gia stata inserita.";
                    }
                    else
                    {
                        // Provo l'inserimento della nave nel campo del giocatore
                        naveSelezionata.InserimentoNave(casellaSelezionata, giocatore_1.MioCampo, direzioneInserimento);
                        // Condizione if per controllare che l'inserimento sia andato a buon fine
                        if (naveSelezionata.Inserita)
                        {
                            // Se l'inserimento è andato a buon fine aggiorno il campo da gioco del giocatore in modo che l'utente
                            // possa vedere l'avvenuto inserimento
                            picSelezionata.BackColor = Color.FromArgb(73, 255, 93);
                            for (int i = 0; i < naveSelezionata.Lunghezza; i++)
                            {
                                campoG1Btn[naveSelezionata.Posizione[i].Riga, naveSelezionata.Posizione[i].Colonna].Text      = "" + naveSelezionata.SimboloNave;
                                campoG1Btn[naveSelezionata.Posizione[i].Riga, naveSelezionata.Posizione[i].Colonna].BackColor = Color.Gray;
                            }
                        }
                        else
                        {
                            formPartita.ConsoleLabel.Text = "La casella e/o la direzione scelta non risulta valida";
                        }
                    }
                    break;
                }
            }
            // Invoco la funzione che andrà a controllare se la partita può iniziare
            controlloInizioPartita();
        }
        public AzioneSpecialDestroyer(Quantum quantum, Casella casellaPartenza)
        {
            _partenza = casellaPartenza;
            this.quantum = quantum;
            _naveMossa = casellaPartenza.Occupante;

            int[] disponibili =
                Tile.Tiles(t => t.PresenzaAlleata(quantum.getGestoreDiGiocatori().getGiocatoreDiTurno())).Select(t => t.ID).ToArray();

            quantum.getGUI().Tabellone.IlluminaCaselle(disponibili);
            quantum.getGUI().Tabellone.ResetSelezioneMouse();
            Interfaccia.ConsoleMessaggi.NuovoMessaggio("Scegli l'alleato con cui fare il warp:");
        }
Exemplo n.º 8
0
 /// <summary>
 /// Azione per piazzare una nave dova clicca il giocatore
 /// </summary>
 public AzionePiazzaNave(Quantum quantum, Nave naveDaPiazzare, Casella[] caselleDisponibili)
 {
     // Piazzo una Nave in una casella arbitraria fra quelle dell'argomento
     this.quantum = quantum;
     this.caselleDisponibili = caselleDisponibili;
     this.naveDaPiazzare = naveDaPiazzare;
     quantum.getGUI().Tabellone.ResetSelezioneMouse();
     if (!caselleDisponibili.Any())
     {
         Interfaccia.ConsoleMessaggi.NuovoMessaggio("Impossibile piazzare la nave!", Color.Salmon);
         Cleanup();
     }
 }
    public Casella Muovi(Casella partenza, Casella arrivo)
    {
        int numeroPartenza = int.Parse(partenza.name);
        int numeroArrivo   = int.Parse(arrivo.name);

        if (numeroPartenza < numeroArrivo)
        {
            return(Muovi(numeroArrivo - numeroPartenza));
        }
        else
        {
            return(Muovi(40 + numeroArrivo - numeroPartenza));
        }
    }
Exemplo n.º 10
0
        public AzioneSpecialFlagship(Quantum quantum, Casella casellaPartenza)
        {
            this.quantum = quantum;
            this.casellaFlagship = casellaPartenza;
            flagship = casellaPartenza.Occupante;

            // Selezione caselle da illuminare
            Func<Tile, bool> filtraAlleati = (t => t.EunaCasella && t.PresenzaAlleata(flagship));

            int[] tiles = Tile.IdTiles(filtraAlleati);
            int[] caselle = tiles.Where(t => { return casellaFlagship.Adiacente(t, true); }).ToArray();

            quantum.getGUI().Tabellone.IlluminaCaselle(caselle);
            fase = sceltaAlleato;
            Interfaccia.ConsoleMessaggi.NuovoMessaggio("Clicca su un alleato adiacente");
        }
        public AzioneSpecialBattlestation(Quantum quantum, Casella posizioneIniziale)
        {
            this.quantum = quantum;
            this.posizione = posizioneIniziale;
            this.nave = posizione.Occupante;

            var bersagli = Tile.Tiles(
                (Tile t) =>
                {
                    var c = t as Casella;
                    return c?.Adiacente(posizione, false) == true && c?.Occupante?.Alleato(quantum.getGestoreDiGiocatori().getGiocatoreDiTurno()) == false;

                }).Select(c => c.ID).ToArray();

            quantum.getGUI().Tabellone.IlluminaCaselle(bersagli);
            quantum.getGUI().Tabellone.ResetSelezioneMouse();
            ConsoleMessaggi.NuovoMessaggio("Scegli l'avversario da attaccare");
        }
    public void Effetto(giocatore giocatoreDiTurno)
    {
        if (valore == 0 && movimento == 0)
        {
            giocatoreDiTurno.uscitaDiPrigione = true;
            GameObject.FindObjectOfType <StateController>().uscitaPrigione.SetActive(true);
            return;
        }

        giocatoreDiTurno.TrasferimentoDenaro(this.valore);

        if (movimento == -3)
        {
            giocatoreDiTurno.contatorePrigione = -2;
            movimento = int.Parse(giocatoreDiTurno.partenza.name) - 3;
            if (movimento <= 0)
            {
                movimento += 40;
            }
        }

        if (movimento != 0)
        {
            Casella[] caselle = GameObject.FindObjectsOfType <Casella>();
            Casella   casella = null;
            foreach (Casella item in caselle)
            {
                if (item.name == movimento.ToString())
                {
                    casella = item;
                }
            }
            if (casella.name == "11")
            {
                giocatoreDiTurno.contatorePrigione = 0;
            }

            giocatoreDiTurno.partenza = giocatoreDiTurno.Muovi(giocatoreDiTurno.partenza, casella);
        }
    }
Exemplo n.º 13
0
        //float pos = 0f;
        //Curve percorsoX;
        //Curve percorsoY;
        public Movimento(Quantum quantum, Nave naveMossa, Casella[] percorso)
        {
            // Avevo provato ad usare le curve, ma è un po' difficile (bisogna settare tutte le tangenti una per una)
            // e forse, con il tabellone quadrato, non viene nemmeno bene
            // però, con i percorsi dritti, viene un po' troppo squadrato
            // qualche idea?

            //percorsoX = new Curve();
            //percorsoY = new Curve();
            //float i = 0;
            //float n = percorso.Length;
            //foreach (var p in percorso)
            //{
            //    percorsoX.Keys.Add(new CurveKey(i / n, p.X));
            //    percorsoY.Keys.Add(new CurveKey(i / n, p.X));
            //    i++;

            //}
            this.quantum = quantum;
            this.naveMossa = naveMossa;
            _percorso = percorso.Select(casella => quantum.getGUI().Tabellone.Tile2Pixel(casella)).ToArray();
            lungh = percorso.Length;
        }
Exemplo n.º 14
0
        void lancioAnimazione()
        {
            // Prendo tutti i punti del percorso della nave
            IEnumerable<Casella> casellePercorso =
                pathFinder.PercorsoXCasella(casellaTarget).Select
                (
                    idCasella => (Casella)Tile.id2Tile(idCasella)
                );
            //Aggiungo la casella di partenza della nave
            Casella[] caselleDaPercorrere = new Casella[] { casellaPartenza }.Concat(casellePercorso).ToArray();

            quantum.getGestoreDiAzioni().ImpilaAzione(new Movimento(quantum, naveMossa, caselleDaPercorrere));
            Cleanup();
        }
Exemplo n.º 15
0
        //Metodo per il controllo e il successivo inserimento della nave in griglia di gioco
        public void InserimentoNave(Casella cordinata, CampoDaGioco campo, bool direzione)
        {
            bool casellaLibera = true;

            if (direzione)                               // Se direzione = true la nave sarà disposta orizzontalmente
            {
                for (int i = 0; i < this.Lunghezza; i++) // ciclo per controllare tutte le caselle necessarie alla nave per inserirsi
                {
                    if (casellaLibera == true)
                    {
                        // Controllo che i valori siano validi e non eccedano la dimensione della matrice
                        if ((cordinata.Riga) > 9 ||
                            (cordinata.Colonna + i) > 9)
                        {
                            casellaLibera = false;
                        }
                        // Faccio un ulteriore controllo che la casella non risulti occupata
                        else if (campo.Casella[cordinata.Riga, cordinata.Colonna + i].StatoCasella != Stato.libera)
                        {
                            casellaLibera = false;
                        }
                    }
                }
                if (casellaLibera) // tutte le caselle sono libere
                {
                    // Vado a inserire la nave
                    for (int i = 0; i < this.Lunghezza; i++)
                    {
                        // Disegno nella griglia il simbolo della nave
                        campo.Casella[cordinata.Riga, cordinata.Colonna + i].SimboloCasella = this.SimboloNave;
                        // Setto la casella come occupata
                        campo.Casella[cordinata.Riga, cordinata.Colonna + i].StatoCasella = Stato.occupata;
                        // Salvo nella nave la posizione nella griglia
                        this.Posizione[i] = new Casella(cordinata.Riga, cordinata.Colonna + i);
                        // Setto la variabile Inserita come true
                        this.Inserita = true;
                    }
                }
            }
            else // direzione = false. La nave deve essere disposta in modo verticale
            {
                for (int i = 0; i < this.Lunghezza; i++) // ciclo per conttrollare tutte le caselle necessarie alla nave per inserirsi
                {
                    if (casellaLibera)
                    {
                        // Controllo che i valori siano validi e non eccedano la dimensione della matrice
                        if ((cordinata.Riga + i) > 9 ||
                            (cordinata.Colonna) > 9)
                        {
                            casellaLibera = false;
                        }
                        // Faccio un ulteriore controllo che la casella non risulti occupata
                        else if (campo.Casella[cordinata.Riga + i, cordinata.Colonna].StatoCasella != Stato.libera)
                        {
                            casellaLibera = false;
                        }
                    }
                }
                if (casellaLibera) // tutte le caselle sono libere vado a inserire la nave
                {
                    for (int i = 0; i < this.Lunghezza; i++)
                    {
                        // Disegno nella griglia il simbolo della nave
                        campo.Casella[cordinata.Riga + i, cordinata.Colonna].SimboloCasella = this.SimboloNave;
                        // Setto la casella come occupata
                        campo.Casella[cordinata.Riga + i, cordinata.Colonna].StatoCasella = Stato.occupata;
                        // Salvo nella nave la posizione nella griglia
                        this.Posizione[i] = new Casella(cordinata.Riga + i, cordinata.Colonna);
                        // Setto la variabile Inserita come true
                        this.Inserita = true;
                    }
                }
            }
        }
Exemplo n.º 16
0
        private void bottoneCampoAvversario_Click(object sender, MouseEventArgs e)
        {
            // dichiaro una variabile button e la rendo uguale a sender
            Button bottoneCliccato = (Button)sender;
            // faccio una conversione in Point in modo da poter utilizzare il tag
            // ovvero i valori x e y della casella cliccata
            Point   posizione          = (Point)bottoneCliccato.Tag;
            Casella casellaSelezionata = new Casella(posizione.X, posizione.Y);
            bool    naveColpita;
            bool    colpitaeAffondata;

            // Faccio un controllo preventivo per vedere se la casella può essere colpita
            if (giocatore_2.MioCampo.Casella[casellaSelezionata.Riga, casellaSelezionata.Colonna].StatoCasella == Stato.colpita ||
                giocatore_2.MioCampo.Casella[casellaSelezionata.Riga, casellaSelezionata.Colonna].StatoCasella == Stato.mancata)
            {
                formPartita.ConsoleLabel.Text = "Hai già fatto fuoco su questa casella. Selezionane un'altra";
            }
            else
            {
                // la casella è libera. Posso sparare
                naveColpita = giocatore_1.FaccioFuoco(casellaSelezionata, giocatore_2.MioCampo);
                // Una volta sparato faccio un controllo nel caso la nave sia stata affondata
                if (naveColpita)
                {
                    // La nave è stata colpita, devo colorare la casella di rosso
                    campoG2Btn[casellaSelezionata.Riga, casellaSelezionata.Colonna].BackColor = Color.Red;
                    colpitaeAffondata = giocatore_2.ControllaNaveColpita(casellaSelezionata);
                    if (colpitaeAffondata)
                    {
                        formPartita.ConsoleLabel.Text  = giocatore_1.Nome + ": hai ";
                        formPartita.ConsoleLabel.Text += "colpito e affondato una nave nemica";
                        // Se la nave è stata affondata controllo che il giocatore avversario abbia altre navi.
                        // In caso contrario sarebbe gameover
                        if (giocatore_2.GameOver())
                        {
                            // Il giocatore 2 ha perso. Faccio in modo che non si possa più cliccare
                            // sulla casella del campo avversario
                            for (int i = 0; i < 10; i++)
                            {
                                for (int j = 0; j < 10; j++)
                                {
                                    campoG2Btn[i, j].MouseClick -= bottoneCampoAvversario_Click;
                                }
                            }

                            formPartita.ConsoleLabel.Text += "\nComplimenti " + giocatore_1.Nome + " hai vinto la partita!";

                            formPartita.NaviPosizionateBtn.Text        = "TORNA AL MENU PRINCIPALE";
                            formPartita.NaviPosizionateBtn.Visible     = true;
                            formPartita.NaviPosizionateBtn.MouseClick += tornoAlMenuPrincipale_Click;
                        }
                    }
                    else
                    {
                        // La nave è stata solamente colpita
                        formPartita.ConsoleLabel.Text  = giocatore_1.Nome + ": hai ";
                        formPartita.ConsoleLabel.Text += "colpito una nave nemica";
                    }
                }
                else
                {
                    // non è stato colpita nessuna nave avversaria. Devo colorare
                    // la casella di blu
                    campoG2Btn[casellaSelezionata.Riga, casellaSelezionata.Colonna].BackColor = Color.Blue;
                    formPartita.ConsoleLabel.Text  = giocatore_1.Nome + ": hai ";
                    formPartita.ConsoleLabel.Text += "mancato il nemico!";
                }
                // Turno del giocatore 1 finito. Inizio turno giocatore 2
                if (giocatore_2.GameOver() == false)
                {
                    // Inizio turno giocatore 2. Devo disabilitare il click
                    // sui bottoni del campo del giocatore 1
                    for (int i = 0; i < giocatore_1.MioCampo.Dimensione; i++)
                    {
                        for (int j = 0; j < giocatore_1.MioCampo.Dimensione; j++)
                        {
                            campoG2Btn[i, j].MouseClick -= bottoneCampoAvversario_Click;
                        }
                    }
                    // Se il giocatore 2 non ha ancora perso, può eseguire il suo turno
                    // verrà utilizzato un timer per far in modo che l'utente possa riuscire
                    // a leggere il risultato del suo sparo nella consoleLabel
                    timer          = new System.Windows.Forms.Timer();
                    timer.Tick    += new EventHandler(turnoIA);
                    timer.Interval = 1500; // setto un intervallo di 1 secondo
                    timer.Start();
                }
            }
        }
Exemplo n.º 17
0
    public void carregar(int nivell, string[] linies)
    {
        int indexLinia = 0;

        //Primera línia: mida del costat del tauler.
        int nFiles    = System.Int32.Parse(linies[indexLinia].Split(';')[0]);
        int nColumnes = System.Int32.Parse(linies[indexLinia].Split(';')[1]);

        //Debug.Log("Files: " + nFiles + ", columnes: " + nColumnes);
        indexLinia++;

        //Línia en blanc.
        indexLinia++;

        //Debug.Log("Començem a llegir el taulell en la linia " + indexLinia);

        Dictionary <int, Posicio> vinculador = new Dictionary <int, Posicio>();
        List <List <Casella> >    t          = new List <List <Casella> >();
        Jugador jugador = null;
        Sortida sortida = null;

        //Aplicar la capa d'estructura
        {
            for (int i = 0; i < nFiles; i++)
            {
                string[] sFila = linies[indexLinia++].Split(';');
                if (sFila.Length != nColumnes)
                {
                    throw new FitxerFormatException("La fila " + i + " de l'estructura del taulell no és valida, hauria de tenir: " + nColumnes + " columnes i en té: " + sFila.Length);
                }
                List <Casella> f = new List <Casella>(nColumnes);
                t.Add(f);
                for (int j = 0; j < nColumnes; j++)
                {
                    Element element = Element.BUIT;
                    Casella parella = null;
                    int     valor   = System.Int32.Parse(sFila[j]);
                    Posicio pos     = new Posicio(i, j);
                    if (valor > 0)
                    {
                        //Fem el doble enllaç de la posició.
                        if (!vinculador.ContainsKey(valor))
                        {
                            //Debug.Log("Afegim " + pos + " per vincular amb etiqueta "+valor);
                            vinculador.Add(valor, pos);
                        }
                        else
                        {
                            Posicio pParella = vinculador[valor];
                            //Debug.Log("Anem a vincular la etiqueta " + valor + ", trobat: " + pParella);
                            parella = t[pParella.y][pParella.x];
                            vinculador.Remove(valor);
                        }
                    }
                    else
                    {
                        element = valor == PARED_IN_H ? Element.PARED_IN_H: Element.PARED_IN_V;
                    }
                    f.Add(new Casella(pos, element, parella, valor));
                }
            }
        }

        Debug.Log("Fase 1 acabada, estructura del taulell");

        //Línia en blanc.
        indexLinia++;

        //Aplicar la capa d'objectes.
        {
            for (int i = 0; i < nFiles; i++)
            {
                string[] sFila = linies[indexLinia++].Split(';');
                if (sFila.Length != nColumnes)
                {
                    throw new FitxerFormatException("La fila " + i + " de l'estructura dels objectes del taulell no és valida, hauria de tenir: " + nColumnes + " columnes i en té: " + sFila.Length);
                }
                for (int j = 0; j < nColumnes; j++)
                {
                    //Debug.Log("Trobat: " + sFila[j]);
                    switch (sFila[j])
                    {
                    case "C":
                        //Coin -> Moneda
                        t[i][j].setElement(Element.MONEDA);
                        break;

                    case "E":
                        //Exit -> Sortida
                        sortida = new Sortida(new Posicio(i, j));
                        break;

                    case "P":
                        //Player -> Jugador
                        jugador = new Jugador(new Posicio(i, j));
                        break;
                    }
                }
            }
        }

        Debug.Log("Fase 2 acabada, objectes del taulell");

        if (vinculador.Keys.Count > 0)
        {
            //El taulell està mal format, cal llençar excepció.
        }

        this.setup(new Taulell(nivell, nFiles, nColumnes, t, jugador, sortida).validar());
    }
Exemplo n.º 18
0
        private void turnoIA(object source, EventArgs e)
        {
            bool    naveColpita;
            bool    colpitaeAffondata;
            Casella bersaglio = new Casella();

            timer.Stop();

            // Racchiudo il generatore di cordinate casuali in un ciclo do-while in modo da essere
            // sicuro che le cordinate generate possano essere accettate.
            do
            {
                // Genero un seme sempre diverso
                Random rand = new Random((int)DateTime.Now.Millisecond);
                // Genero 2: uno per la riga, uno per la colonna
                bersaglio.Riga    = rand.Next(0, 10);
                bersaglio.Colonna = rand.Next(0, 10);
            } while (giocatore_1.MioCampo.Casella[bersaglio.Riga, bersaglio.Colonna].StatoCasella == Stato.colpita ||
                     giocatore_1.MioCampo.Casella[bersaglio.Riga, bersaglio.Colonna].StatoCasella == Stato.mancata);

            // Una volta generate le cordinate corrette faccio fuoco sul campo avversario
            naveColpita = giocatore_2.FaccioFuoco(bersaglio, giocatore_1.MioCampo);

            // Una volta sparato faccio un controllo nel caso la nave sia stata affondata
            if (naveColpita)
            {
                // La nave è stata colpita, devo colorare la casella di rosso
                campoG1Btn[bersaglio.Riga, bersaglio.Colonna].BackColor = Color.Red;
                colpitaeAffondata = giocatore_1.ControllaNaveColpita(bersaglio);
                if (colpitaeAffondata)
                {
                    formPartita.ConsoleLabel.Text  = giocatore_2.Nome + ": hai ";
                    formPartita.ConsoleLabel.Text += "colpito e affondato una nave nemica!";
                    if (giocatore_1.GameOver())
                    {
                        // Il giocatore 1 ha perso. Faccio in modo che non si possa più cliccare
                        // sulla casella del campo avversario
                        for (int i = 0; i < 10; i++)
                        {
                            for (int j = 0; j < 10; j++)
                            {
                                campoG2Btn[i, j].MouseClick -= bottoneCampoAvversario_Click;
                            }
                        }

                        formPartita.ConsoleLabel.Text += "\nComplimenti " + giocatore_2.Nome + " hai vinto la partita!";

                        formPartita.NaviPosizionateBtn.Text        = "TORNA AL MENU PRINCIPALE";
                        formPartita.NaviPosizionateBtn.Visible     = true;
                        formPartita.NaviPosizionateBtn.MouseClick += tornoAlMenuPrincipale_Click;
                    }
                }
                else
                {
                    formPartita.ConsoleLabel.Text  = giocatore_2.Nome + ": hai ";
                    formPartita.ConsoleLabel.Text += "colpito una nave nemica!";
                }
            }
            else
            {
                campoG1Btn[bersaglio.Riga, bersaglio.Colonna].BackColor = Color.Blue;
                formPartita.ConsoleLabel.Text  = giocatore_2.Nome + ": hai ";
                formPartita.ConsoleLabel.Text += "mancato il nemico!";
            }

            if (!giocatore_1.GameOver())
            {
                // Turno del giocatore 2 finito. Devo riabilitare il click
                // sul campo avversario
                for (int i = 0; i < giocatore_1.MioCampo.Dimensione; i++)
                {
                    for (int j = 0; j < giocatore_1.MioCampo.Dimensione; j++)
                    {
                        campoG2Btn[i, j].MouseClick += bottoneCampoAvversario_Click;
                    }
                }
            }
        }