예제 #1
0
        public void visualizzaConfigurazione()
        {
            int i = 1;

            System.Console.WriteLine("   | A  | B  | C  | D  | E  | F  | G  | H  |");
            System.Console.WriteLine("-------------------------------------------");
            foreach (Traversa traversa in Enum.GetValues(typeof(Traversa)))
            {
                System.Console.Write($" {i} |");
                i++;
                foreach (Colonna colonna in Enum.GetValues(typeof(Colonna)))
                {
                    IPezzo pezzo = this[colonna, traversa].PezzoPresente;
                    if (pezzo != null)
                    {
                        System.Console.Write(string.Format(" {0} |", pezzo.ToString()));
                    }
                    else
                    {
                        System.Console.Write(string.Format("    |"));
                    }
                }
                System.Console.WriteLine("\n-------------------------------------------");
            }
        }
예제 #2
0
        public bool PuòMuovere(Colonna colonnaPartenza,
                               Traversa traversaPartenza,
                               Colonna colonnaArrivo,
                               Traversa traversaArrivo,
                               IScacchiera scacchiera)
        {
            var distanzaTraLeColonne  = Math.Abs(colonnaPartenza - colonnaArrivo);
            var distanzaTraLeTraverse = Math.Abs(traversaPartenza - traversaArrivo);

            //controllo se lo spostamento è 2x1
            if ((distanzaTraLeColonne == 2 && distanzaTraLeTraverse == 1) || (distanzaTraLeTraverse == 2 && distanzaTraLeColonne == 1))
            {
                IPezzo pezzoPresente = scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente;
                //controllo pezzo non presente
                if (pezzoPresente == null)
                {
                    return(true);
                }
                //pezzo del avversario
                if (pezzoPresente.Colore != colore)
                {
                    return(true);
                }
                return(false);
            }
            return(false);
        }
예제 #3
0
        public bool PuòMuovere(Colonna colonnaPartenza,
                               Traversa traversaPartenza,
                               Colonna colonnaArrivo,
                               Traversa traversaArrivo,
                               IScacchiera scacchiera)
        {
            var stessaColonna  = colonnaPartenza == colonnaArrivo;
            var stessaTraversa = traversaPartenza == traversaArrivo;

            if (stessaColonna && stessaTraversa)
            {
                return(false);
            }
            if (stessaColonna)
            {
                int verso = Math.Sign(traversaArrivo - traversaPartenza);
                for (int i = (int)traversaPartenza + verso;; i += verso)
                {
                    if (i == (int)traversaArrivo)
                    {
                        IPezzo pezzoSullaCasaDiArrivo = scacchiera[colonnaPartenza, (Traversa)i].PezzoPresente;
                        if (pezzoSullaCasaDiArrivo == null)
                        {
                            return(true);
                        }
                        return(pezzoSullaCasaDiArrivo.Colore != colore? true : false);
                    }
                    if (scacchiera[colonnaPartenza, (Traversa)i].PezzoPresente != null)
                    {
                        return(false);
                    }
                }
            }
            if (stessaTraversa)
            {
                int verso = Math.Sign(colonnaArrivo - colonnaPartenza);
                for (int i = (int)colonnaPartenza + verso;; i += verso)
                {
                    if (i == (int)colonnaArrivo)
                    {
                        IPezzo pezzoSullaCasaDiArrivo = scacchiera[(Colonna)i, traversaPartenza].PezzoPresente;
                        if (pezzoSullaCasaDiArrivo == null)
                        {
                            return(true);
                        }
                        return(pezzoSullaCasaDiArrivo.Colore != colore? true : false);
                    }
                    if (scacchiera[(Colonna)i, traversaPartenza].PezzoPresente != null)
                    {
                        return(false);
                    }
                }
            }
            //per far contento il compilatore
            return(false);
        }
예제 #4
0
        public void IPezziNonPossonoRestareFermi(Type t)
        {
            //Given
            IPezzo     pezzo      = Activator.CreateInstance(t, Colore.Bianco) as IPezzo;
            Scacchiera scacchiera = new Scacchiera();
            //When
            bool esito = pezzo.PuòMuovere(Colonna.A, Traversa.Prima, Colonna.A,
                                          Traversa.Prima, scacchiera);

            //Then
            Assert.False(esito, t.Name);
        }
예제 #5
0
        public bool PuòMuovere(Colonna colonnaPartenza,
                               Traversa traversaPartenza,
                               Colonna colonnaArrivo,
                               Traversa traversaArrivo,
                               IScacchiera scacchiera)
        {
            var distanzaTraLeColonne        = colonnaArrivo - colonnaPartenza;
            int versoSpostamentoOrizzontale = Math.Sign(distanzaTraLeColonne);
            var distanzaTraLeTraverse       = traversaArrivo - traversaPartenza;
            int versoSpostamentoVerticale   = Math.Sign(distanzaTraLeTraverse);

            if (Math.Abs(distanzaTraLeColonne) != Math.Abs(distanzaTraLeTraverse) || distanzaTraLeColonne == 0)
            {
                return(false);
            }
            int j = (int)traversaPartenza + versoSpostamentoVerticale;

            for (int i = (int)colonnaPartenza + versoSpostamentoOrizzontale;;)
            {
                if (i == (int)colonnaArrivo)
                {
                    IPezzo pezzoSullaCasaDiArrivo = scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente;
                    if (pezzoSullaCasaDiArrivo == null)
                    {
                        return(true);
                    }
                    return(pezzoSullaCasaDiArrivo.Colore != colore? true : false);
                }
                if (scacchiera[(Colonna)i, (Traversa)j].PezzoPresente != null)
                {
                    return(false);
                }
                i += versoSpostamentoOrizzontale;
                j += versoSpostamentoVerticale;
            }
        }
예제 #6
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera)
        {
            var stessaColonna         = colonnaPartenza == colonnaArrivo;
            var distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza;

            //caso bianco
            if (colore == Colore.Bianco)
            {
                //solo spostamento
                if (stessaColonna && scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente == null)
                {
                    //spostamento in avanti di una casa
                    if (distanzaTraLeTraverse == 1)
                    {
                        return(true);
                    }
                    //spostamento in avanti di 2 case
                    if (traversaPartenza == Traversa.Seconda && distanzaTraLeTraverse == 2 &&
                        scacchiera[colonnaArrivo, traversaArrivo - 1].PezzoPresente == null)
                    {
                        return(true);
                    }
                }
                //caso in cui un pezzo avversario viene mangiato
                if (Math.Abs((int)colonnaArrivo - (int)colonnaPartenza) == 1 &&
                    distanzaTraLeTraverse == 1)
                {
                    IPezzo pezzo = scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente;
                    if (pezzo == null)
                    {
                        return(false);
                    }
                    if (pezzo.Colore != colore)
                    {
                        return(true);
                    }
                }
                return(false);
            }

            //caso nero
            if (stessaColonna && scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente == null)
            {
                //spostamento in avanti di una casa
                if (distanzaTraLeTraverse == -1)
                {
                    return(true);
                }
                //spostamento in avanti di 2 case
                if (traversaPartenza == Traversa.Settima && distanzaTraLeTraverse == -2 &&
                    scacchiera[colonnaArrivo, traversaArrivo + 1].PezzoPresente == null)
                {
                    return(true);
                }
            }
            //caso in cui un pezzo avversario viene mangiato
            if (Math.Abs((int)colonnaArrivo - (int)colonnaPartenza) == 1 &&
                distanzaTraLeTraverse == -1)
            {
                IPezzo pezzo = scacchiera[colonnaArrivo, traversaArrivo].PezzoPresente;
                if (pezzo == null)
                {
                    return(false);
                }
                if (pezzo.Colore != colore)
                {
                    return(true);
                }
            }
            return(false);
        }