예제 #1
0
        public void AvviaPartita()
        {
            if (Giocatori == null)
                throw new InvalidOperationException("Attenzione, prima devi indicare i nomi dei giocatori!");

            Orologio.Accendi();
            Orologio.Avvia();
            Orologio.TempoScaduto += (Orologio, colore) => {
                if(colore == Colore.Bianco)
                    Vittoria.Invoke(Orologio, Colore.Nero);
                else
                    Vittoria.Invoke(Orologio, Colore.Bianco);
            };
        }
예제 #2
0
        public void InserisciMossa(string mossa)
        {
            Coordinata partenza     = InterpretaCoordinataCasa(mossa.Substring(0, 2));
            Coordinata arrivo       = InterpretaCoordinataCasa(mossa.Substring(3, 2));
            ICasa      casaPartenza = Scacchiera[partenza.Colonna, partenza.Traversa];
            ICasa      casaArrivo   = Scacchiera[arrivo.Colonna, arrivo.Traversa];

            if (casaPartenza.PezzoPresente == null ||
                casaPartenza.PezzoPresente?.Colore != Orologio.TurnoAttuale ||
                casaArrivo.PezzoPresente?.Colore == Orologio.TurnoAttuale ||
                casaPartenza.PezzoPresente?.PuòMuovere(partenza.Colonna, partenza.Traversa,
                                                       arrivo.Colonna, arrivo.Traversa, Scacchiera.Case) == false
                )
            {
                throw new InvalidOperationException("Mossa non valida");
            }

            Scacchiera.SpostaPezzo(casaPartenza, casaArrivo);
            BloccoNote.ScriviMossa(mossa);
            //Controllo che il re non sia stato mangiato
            Colore coloreControlloSconfitta;

            if (Orologio.TurnoAttuale == Colore.Bianco)
            {
                coloreControlloSconfitta = Colore.Nero;
            }
            else
            {
                coloreControlloSconfitta = Colore.Bianco;
            }
            bool reInVita = Scacchiera.ReInVita(coloreControlloSconfitta);

            if (!reInVita)
            {
                Vittoria.Invoke(Scacchiera, Orologio.TurnoAttuale);
            }
            Orologio.FineTurno();
        }