예제 #1
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var differenzaColonne  = colonnaPartenza - colonnaArrivo;
            var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo;
            var stessaColonna      = colonnaPartenza == colonnaArrivo;
            var stessaTraversa     = traversaPartenza == traversaArrivo;

            if (differenzaColonne == 0 && differenzaTraverse == 0)
            {
                return(false);
            }
            if ((Math.Abs(differenzaColonne) <= 1 && Math.Abs(differenzaTraverse) <= 1) || ((stessaTraversa && !stessaColonna) ||
                                                                                            (stessaColonna && !stessaTraversa)) || ((Math.Abs(differenzaColonne) - Math.Abs(differenzaTraverse)) == 0))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var stessaColonna = colonnaPartenza == colonnaArrivo;
            int distanzaTraLeTraverse;

            if (Colore == Colore.Bianco)
            {
                distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza;
            }
            else
            {
                distanzaTraLeTraverse = (int)traversaPartenza - (int)traversaArrivo;
            }

            if (stessaColonna && distanzaTraLeTraverse == 1)
            {
                return(true);
            }
            else if (stessaColonna && ((distanzaTraLeTraverse == 2 && colore == Colore.Bianco && traversaPartenza == Traversa.Seconda) || (colore == Colore.Nero && traversaPartenza == Traversa.Settima && distanzaTraLeTraverse == -2)))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #3
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var stessaColonna = colonnaPartenza == colonnaArrivo;
            int distanzaTraLeTraverse;

            if (Colore == Colore.Bianco)
            {
                distanzaTraLeTraverse = (int)traversaArrivo - (int)traversaPartenza;
            }
            else
            {
                distanzaTraLeTraverse = (int)traversaPartenza - (int)traversaArrivo;
            }

            if (stessaColonna && distanzaTraLeTraverse == 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
0
 public bool PuòMuovere(
     Colonna colonnaPartenza,
     Traversa traversaPartenza,
     Colonna colonnaArrivo,
     Traversa traversaArrivo,
     IScacchiera scacchiera)
 {
     return(new Torre(colore).PuòMuovere(colonnaPartenza, traversaPartenza,
                                         colonnaArrivo, traversaArrivo, scacchiera) || new Alfiere(colore).
            PuòMuovere(colonnaPartenza, traversaPartenza, colonnaArrivo, traversaArrivo, scacchiera));
 }
예제 #7
0
 private static string DeterminaMossa(IScacchiera scacchiera, Colore colore){
     var pezziGiocabili = scacchiera.Case.Where(casa => casa.PezzoPresente?.Colore == colore).OrderBy(casa => Guid.NewGuid()).ToList();
     foreach (var pezzoGiocabile in pezziGiocabili) {
         var destinazioneScelta = scacchiera
         .Case.ToList()
         .Where(casa => casa.PezzoPresente==null || casa.PezzoPresente.Colore != colore)
         .OrderBy(casa => Guid.NewGuid())
         .FirstOrDefault(casa => pezzoGiocabile.PezzoPresente.PuòMuovere(pezzoGiocabile.Colonna, pezzoGiocabile.Traversa, casa.Colonna, casa.Traversa, scacchiera.Case));
         if (destinazioneScelta == null)
             continue;
         return $"{pezzoGiocabile.Colonna}{(int) pezzoGiocabile.Traversa} {destinazioneScelta.Colonna}{(int) destinazioneScelta.Traversa}";
     }
     return "";
 }
예제 #8
0
 public bool PuòMuovere(Colonna colonnaPartenza,
                        Traversa traversaPartenza,
                        Colonna colonnaArrivo,
                        Traversa traversaArrivo,
                        IScacchiera scacchiera)
 {
     if (Math.Abs((int)(colonnaArrivo - colonnaPartenza) *
                  (int)(traversaArrivo - traversaPartenza)) <= 1)
     {
         return(new Donna(colore).PuòMuovere(colonnaPartenza, traversaPartenza,
                                             colonnaArrivo, traversaArrivo, scacchiera));
     }
     return(false);
 }
예제 #9
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var stessaColonna  = colonnaPartenza == colonnaArrivo;
            var stessaTraversa = traversaPartenza == traversaArrivo;

            if ((stessaTraversa && !stessaColonna) || (stessaColonna && !stessaTraversa))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #10
0
 private static void Disegna(IScacchiera scacchiera) {
 for (var i = 8; i>=1; i--){
         Console.Write(i);
         Console.Write(" ");
         
         for (var j = 1; j<=8; j++) {
             Console.BackgroundColor = (i+j) % 2 != 0 ? ConsoleColor.Black : ConsoleColor.DarkGray;
             var pezzo = scacchiera[(Colonna) j, (Traversa) i].PezzoPresente;
             var carattere = pezzo != null ? pezzo.Carattere : ' ';
             Console.Write($" {carattere} ");
         }
         Console.BackgroundColor = ConsoleColor.Black;
         Console.WriteLine(" ");
     }
     Console.Write("  ");
     for (var i = 1; i<=8; i++){
         Console.Write($" {(Colonna)i} ");
     }
     Console.WriteLine();
 }
예제 #11
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var differenzaColonne  = colonnaPartenza - colonnaArrivo;
            var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo;

            if (differenzaColonne == 0 && differenzaTraverse == 0)
            {
                return(false);
            }
            if (Math.Abs(differenzaColonne) <= 1 && Math.Abs(differenzaTraverse) <= 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #12
0
        public bool PuòMuovere(
            Colonna colonnaPartenza,
            Traversa traversaPartenza,
            Colonna colonnaArrivo,
            Traversa traversaArrivo,
            IScacchiera scacchiera = null)
        {
            var differenzaColonne  = colonnaPartenza - colonnaArrivo;
            var differenzaTraverse = (int)traversaPartenza - (int)traversaArrivo;

            if (differenzaTraverse == 2 || differenzaTraverse == -2)
            {
                if (differenzaColonne == 1 || differenzaColonne == -1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else if (differenzaColonne == 2 || differenzaColonne == -2)
            {
                if (differenzaTraverse == 1 || differenzaTraverse == -1)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
예제 #13
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;
            }
        }
예제 #14
0
 public Tavolo(IScacchiera scacchiera, IOrologio orologio, IBloccoNote bloccoNote)
 {
     Scacchiera = scacchiera;
     Orologio = orologio;
     BloccoNote = bloccoNote;
 }
예제 #15
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);
        }
예제 #16
0
 public Tavolo(IScacchiera scacchiera, IOrologio orologio)
 {
     Scacchiera = scacchiera;
     Orologio   = orologio;
 }