示例#1
0
 public virtual void PonerFicha(Tablero tablero, Movimiento Mov, Pieza pieza)
 {
     if (tablero.casilleros[Mov.X, Mov.Y].color == pieza.color)
     {
         Console.WriteLine("Ya tenes una pieza");
         Console.ReadKey();
     }
     if (tablero.casilleros[Mov.X, Mov.Y].color != pieza.color)
     {
         tablero.PoneFichaAca(Mov, pieza, color);
     }
 }
示例#2
0
 public void AgregarFicha(Movimiento movimiento, Pieza pieza)
 {
     casilleros[movimiento.X, movimiento.Y].PonerFicha(this, movimiento, pieza);
     if (pieza.color == 1)
     {
         Casilleros[movimiento.X, movimiento.Y].CalcularMov(casilleros, movimiento, MovimientosNegros);
     }
     if (pieza.color == 2)
     {
         Casilleros[movimiento.X, movimiento.Y].CalcularMov(casilleros, movimiento, MovimientosBlancos);
     }
 }
示例#3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            //Creamos la celda
            Celda c1 = new Celda(2, 3);

            //Creamos la pieza
            Pieza p1 = new Pieza(false, false, c1);

            Celda posicion = p1.GetPosicion();

            Console.WriteLine("La pieza se encuentra en la posicion X: " + p1.GetPosicion().GetPosicionX().ToString());
            Console.WriteLine("La pieza se encuentra en la posicion Y: " + posicion.GetPosicionY().ToString());

            //seteamos el ocupante
            c1.SetOcupante(p1);
            Console.WriteLine("La celda tiene el ocupante" + c1.GetOcupante().ToString());

            //Otro cambio desde el vs code
        }
示例#4
0
        public void onButtonClick(object source, EventArgs e)
        {
            Button b = (Button)source;
            int    x = b.Location.X / 69, y = b.Location.Y / 69;

            if (seleccionada)
            {
                seleccionada = false;
                String tag = (String)tablero[x, y].btn.BackgroundImage.Tag;
//----------------------------------------------Mueve Pieza-----------------------------------------------
                if (tag == "l" || tag == "r")
                {
                    bool cr = false;
                    limpiaEnroque();
                    iluminaPosibles(selectX, selectY, "");
                    Pieza aux = tablero[x, y].pza;
                    tablero[x, y].pza             = tablero[selectX, selectY].pza;
                    tablero[selectX, selectY].pza = null;
                    //Posicion de los Reyes
                    if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
                    {
                        reyb.x = x; reyb.y = y; cr = true;
                    }
                    else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
                    {
                        reyn.x = x; reyn.y = y; cr = true;
                    }
                    tablero[selectX, selectY].colocaPieza();
                    tablero[x, y].colocaPieza();
                    //---------------------
                    if (jaqueAlRey(turnoBlanca))
                    {
                        if (turnoBlanca)
                        {
                            MessageBox.Show("El Rey Blanco está en Jaque", "Jaque");
                        }
                        else
                        {
                            MessageBox.Show("El Rey Dorado está en Jaque", "Jaque");
                        }
                        tablero[selectX, selectY].pza = tablero[x, y].pza;
                        tablero[x, y].pza             = aux;
                        //Regresar posicion de los Reyes
                        if (cr)
                        {
                            if (tablero[selectX, selectY].pza.color)
                            {
                                reyb.x = selectX; reyb.y = selectY;
                            }
                            else
                            {
                                reyn.x = selectX; reyn.y = selectY;
                            }
                        }
                        tablero[selectX, selectY].colocaPieza();
                        tablero[x, y].colocaPieza();
                    }
                    else
                    {
                        //Comprueba piezaz que ateren el enroque
                        alteranEnroque(x, y);
                        //Peon a Dama
                        if (tablero[x, y].piezaBlanca() && tablero[x, y].pza.roll == "pawn" && y == 0)
                        {
                            tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon blanco a Reina", "Promocion");
                        }
                        else if (tablero[x, y].piezaNegra() && tablero[x, y].pza.roll == "pawn" && y == 7)
                        {
                            tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon dorado a Reina", "Promocion");
                        }
                        //Turno
                        if (turnoBlanca)
                        {
                            turnoBlanca = false;
                        }
                        else
                        {
                            turnoBlanca = true;
                        }
                        int i, j, auxX = selectX, auxY = selectY;
                        iluminado = 0;
                        amenaza   = false;
                        for (j = 0; j < 8; j++)
                        {
                            for (i = 0; i < 8; i++)
                            {
                                if (tablero[i, j].pza != null)
                                {
                                    if (tablero[i, j].pza.color == turnoBlanca)
                                    {
                                        selectX = i;
                                        selectY = j;
                                        iluminaPosibles(i, j, "j");
                                    }
                                }
                            }
                        }
                        if (jaqueAlRey(turnoBlanca))
                        {
                            if (iluminado == 0)
                            {
                                terminado = true;
                                tm        = false;
                                MessageBox.Show("Jaque Mate", "Jaque");
                                DialogResult res = MessageBox.Show("Comenzar Nuevo?", "Juego Terminado");
                                tm = true;
                                if (res.ToString() == "OK")
                                {
                                    comenzarNuevo();
                                }
                            }
                            else
                            {
                                if (turnoBlanca)
                                {
                                    MessageBox.Show("Jaque al Rey Blanco", "Jaque");
                                }
                                else
                                {
                                    MessageBox.Show("Jaque al Rey Dorado", "Jaque");
                                }
                            }
                        }
                        else
                        if (iluminado == 0)
                        {
                            MessageBox.Show("Ahogado", "Empate");
                        }
                    }
                }
                else
                {
                    limpiaEnroque();
                    iluminaPosibles(selectX, selectY, "");
                    if (tag == "g")
                    {
                        enroque(x, y);
                        //Turno
                        if (turnoBlanca)
                        {
                            turnoBlanca = false;
                        }
                        else
                        {
                            turnoBlanca = true;
                        }
                    }
                    if (tag == "y")
                    {
                        MessageBox.Show("No es posible enrocar en esta direccion", "Enroque");
                    }
                }
            }
//--------------------------------------------------Seleccionar la Pieza----------------------------------
            else
            {
                if (!terminado)
                {
                    if (tablero[x, y].pza != null)
                    {
                        if ((turnoBlanca && tablero[x, y].piezaBlanca()) || (!turnoBlanca && tablero[x, y].piezaNegra()))
                        {
                            iluminado = 0;
                            selectX   = x;
                            selectY   = y;
                            amenaza   = false;
                            iluminaPosibles(x, y, "l");
                            if (iluminado > 0)
                            {
                                seleccionada = true;
                                //Comprueba condiciones para enroque
                                compruebaEnroque();
                            }
                            else
                            if (amenaza)
                            {
                                if (turnoBlanca)
                                {
                                    MessageBox.Show("Rey Blanco quedará en Jaque", "Jaque");
                                }
                                else
                                {
                                    MessageBox.Show("Rey Dorado quedará en Jaque", "Jaque");
                                }
                                iluminaPosibles(x, y, "");
                            }
                        }
                        else
                        {
                            if (turnoBlanca)
                            {
                                MessageBox.Show("Es el turno de las Blancas", "Turno");
                            }
                            else
                            {
                                MessageBox.Show("Es el turno de las Doradas", "Turno");
                            }
                        }
                    }
                }
            }
        }
示例#5
0
 public void mosaico(int x, int y, String l)
 {
     if (l == "l" || l == "j")
     {
         bool  cr  = false;
         Pieza aux = tablero[x, y].pza;
         tablero[x, y].pza             = tablero[selectX, selectY].pza;
         tablero[selectX, selectY].pza = null;
         //Posicion de los Reyes
         if (tablero[x, y].pza != null)
         {
             if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
             {
                 reyb.x = x; reyb.y = y; cr = true;
             }
             else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
             {
                 reyn.x = x; reyn.y = y; cr = true;
             }
         }
         if (jaqueAlRey(turnoBlanca))
         {
             if (l == "j")
             {
                 l = "";
             }
             else
             {
                 l = "r";
             }
             amenaza = true;
         }
         else
         {
             iluminado++;
         }
         tablero[selectX, selectY].pza = tablero[x, y].pza;
         tablero[x, y].pza             = aux;
         //Regresar posicion de los Reyes
         if (cr)
         {
             if (tablero[selectX, selectY].pza.color)
             {
                 reyb.x = selectX; reyb.y = selectY;
             }
             else
             {
                 reyn.x = selectX; reyn.y = selectY;
             }
         }
         if (l == "j")
         {
             l = "";
         }
     }
     if ((x + y) % 2 == 0)
     {
         tablero[x, y].btn.BackgroundImage = Image.FromFile(l + "wmarbel.png");
     }
     else
     {
         tablero[x, y].btn.BackgroundImage = Image.FromFile(l + "bmarbel.png");
     }
     tablero[x, y].btn.BackgroundImage.Tag = l;
 }
示例#6
0
 public Casilla(String r, bool c)
 {
     pza = new Pieza(r, c);
 }
示例#7
0
        static void Main(string[] args)
        {
            List <Pieza> tablero = new List <Pieza>();

            IniciarTablero();

            do
            {
                Console.WriteLine("Ajedrez!\n");
                DibujarTablero();
                string coordenada;
                Console.WriteLine("Ingrese una coordenada o 0 para salir:");
                coordenada = Console.ReadLine();
                if (coordenada == "0")
                {
                    Console.Clear();
                    Console.WriteLine("Gracias por jugar Ajedrez!!! Saludos.");
                    return;
                }
                Tuple <int, int> xy = CoordenadaValida(coordenada);
                Pieza            p1 = xy != null?tablero.FirstOrDefault(x => x.Fila == xy.Item1 && x.Columna == xy.Item2) : null;

                while (xy == null || p1 == null)
                {
                    if (xy == null)
                    {
                        Console.WriteLine("La coordenada ingresada anteriormente es inválida.\nIngrese una nueva coordenada:");
                    }
                    else
                    {
                        Console.WriteLine("La coordenada ingresada anteriormente no contiene una pieza.\nIngrese una nueva coordenada:");
                    }
                    coordenada = Console.ReadLine();
                    xy         = CoordenadaValida(coordenada);
                    p1         = xy != null?tablero.FirstOrDefault(x => x.Fila == xy.Item1 && x.Columna == xy.Item2) : null;
                }

                Console.WriteLine("Ingrese una coordenada de destino:");

                coordenada = Console.ReadLine();
                Tuple <int, int> wz = CoordenadaValida(coordenada);
                Pieza            p2 = wz != null?tablero.FirstOrDefault(x => x.Fila == wz.Item1 && x.Columna == wz.Item2) : null;

                if (wz != null && (p2 == null || p2.Equipo != p1.Equipo))
                {
                    try
                    {
                        List <Tuple <int, int> > camino = new List <Tuple <int, int> >();

                        if (p1.GetType().Name == "Peon")
                        {
                            camino = ((Peon)p1).Mover(wz.Item1, wz.Item2, p2 != null);
                        }
                        else
                        {
                            camino = p1.Mover(wz.Item1, wz.Item2);
                        }

                        if (camino != null)
                        {
                            foreach (var mov in camino)
                            {
                                if (tablero.Any(x => x.Fila == mov.Item1 && x.Columna == mov.Item2))
                                {
                                    throw new Exception("Otra pieza en camino.");
                                }
                            }
                        }

                        p1.Fila    = wz.Item1;
                        p1.Columna = wz.Item2;
                        if (p2 != null)
                        {
                            tablero.Remove(p2);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                        wz = null;
                        p2 = null;
                    }
                }
                else
                {
                    if (wz == null)
                    {
                        Console.WriteLine("La coordenada ingresada anteriormente es inválida.");
                    }
                    else
                    {
                        Console.WriteLine("No se pueden comer piezas del mismo color.");
                    }
                }

                Console.WriteLine("Presione cualquier tecla para continuar");
                Console.ReadKey();
                Console.Clear();
            } while (tablero.Count() > 0);


            void DibujarTablero()
            {
                bool   band     = true;
                string caracter = "   ";

                Console.ForegroundColor = ConsoleColor.Black;
                Console.BackgroundColor = ConsoleColor.DarkYellow;
                Console.Write("   ");
                for (char t = 'a'; t <= 'h'; t++)
                {
                    Console.Write(" " + t + " ");
                }
                Console.WriteLine("   ");
                for (int f = 7; f >= 0; f--)
                {
                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.BackgroundColor = ConsoleColor.DarkYellow;
                    Console.Write(" " + (f + 1) + " ");
                    for (int c = 0; c <= 7; c++)
                    {
                        caracter = "   ";
                        if (band)
                        {
                            Console.BackgroundColor = ConsoleColor.White;
                        }
                        else
                        {
                            Console.BackgroundColor = ConsoleColor.Black;
                        }

                        Pieza pieza = tablero.Where(x => x.Fila == f && x.Columna == c).FirstOrDefault();

                        if (pieza != null)
                        {
                            caracter = pieza.Inicial;
                            Console.ForegroundColor = pieza.Color;
                        }

                        if (c != 7)
                        {
                            band = !band;
                        }

                        Console.Write(caracter);
                    }

                    Console.ForegroundColor = ConsoleColor.Black;
                    Console.BackgroundColor = ConsoleColor.DarkYellow;
                    Console.WriteLine(" " + (f + 1) + " ");
                }

                Console.ForegroundColor = ConsoleColor.Black;
                Console.BackgroundColor = ConsoleColor.DarkYellow;
                Console.Write("   ");
                for (char t = 'a'; t <= 'h'; t++)
                {
                    Console.Write(" " + t + " ");
                }
                Console.WriteLine("   ");

                Console.ResetColor();
            }

            void IniciarTablero()
            {
                List <int> listaInicial;

                do
                {
                    listaInicial = new List <int>();
                    for (int i = 0; i < 64; i++)
                    {
                        listaInicial.Add(new Random().Next(1000000000));
                    }
                }while (listaInicial.Distinct().Count() != 64);

                List <int> listaOrdenada = listaInicial.OrderBy(p => p).ToList();

                int n = listaOrdenada.IndexOf(listaInicial.First());

                listaInicial.RemoveAt(0);

                int f = n / 8;
                int c = n % 8;

                tablero.Add(new Alfil(f, c, 1));

                int pos = 0;
                int x;
                int y;

                do
                {
                    n = listaOrdenada.IndexOf(listaInicial.ElementAt(pos));
                    x = n / 8;
                    y = n % 8;
                    pos++;
                }while (EsBlanco(f, c) == EsBlanco(x, y));

                tablero.Add(new Alfil(x, y, 1));

                listaInicial.RemoveAt(pos - 1);

                n = listaOrdenada.IndexOf(listaInicial.First());

                listaInicial.RemoveAt(0);

                f = n / 8;
                c = n % 8;

                tablero.Add(new Alfil(f, c, 2));

                pos = 0;

                do
                {
                    n = listaOrdenada.IndexOf(listaInicial.ElementAt(pos));
                    x = n / 8;
                    y = n % 8;
                    pos++;
                }while (EsBlanco(f, c) == EsBlanco(x, y));

                tablero.Add(new Alfil(x, y, 2));

                listaInicial.RemoveAt(pos - 1);


                for (int i = 1; i <= 2; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        n = listaOrdenada.IndexOf(listaInicial.First());

                        listaInicial.RemoveAt(0);

                        f = n / 8;
                        c = n % 8;

                        tablero.Add(new Peon(f, c, i));
                    }

                    for (int j = 0; j < 2; j++)
                    {
                        n = listaOrdenada.IndexOf(listaInicial.First());

                        listaInicial.RemoveAt(0);

                        f = n / 8;
                        c = n % 8;

                        tablero.Add(new Torre(f, c, i));
                    }

                    for (int j = 0; j < 2; j++)
                    {
                        n = listaOrdenada.IndexOf(listaInicial.First());

                        listaInicial.RemoveAt(0);

                        f = n / 8;
                        c = n % 8;

                        tablero.Add(new Caballo(f, c, i));
                    }

                    n = listaOrdenada.IndexOf(listaInicial.First());

                    listaInicial.RemoveAt(0);

                    f = n / 8;
                    c = n % 8;

                    tablero.Add(new Rey(f, c, i));

                    n = listaOrdenada.IndexOf(listaInicial.First());

                    listaInicial.RemoveAt(0);

                    f = n / 8;
                    c = n % 8;

                    tablero.Add(new Reina(f, c, i));
                }
            }

            Tuple <int, int> CoordenadaValida(string cd)
            {
                if (cd.Length != 2)
                {
                    return(null);
                }

                var nro   = cd.Substring(0, 1);
                var letra = cd.Substring(1, 1);

                if (cd.Length > 2)
                {
                    return(null);
                }

                if (!char.TryParse(letra.ToLower(), out char l) || l > char.Parse("h") || l < char.Parse("a") ||
                    !int.TryParse(nro, out int numero) || numero > 8 || numero < 1)
                {
                    return(null);
                }
                else
                {
                    return(new Tuple <int, int> (numero - 1, Orden(l)));
                }
            }
        }
示例#8
0
 public void PoneFichaAca(Movimiento mov, Pieza pieza, int color)
 {
     casilleros[mov.X, mov.Y] = pieza;
     CalcularMovs();
 }
示例#9
0
 public void accionPieza(int x, int y, String tipo)
 {
     if (seleccionada)
     {
         seleccionada = false;
         String tag = (String)tablero[x, y].btn.BackgroundImage.Tag;
         //----------------------------------------------Mueve Pieza-----------------------------------------------
         if (tag == "l" || tag == "r" || tipo == "AUTOMATICO")
         {
             bool cr = false;
             limpiaEnroque();
             iluminaPosibles(selectX, selectY, "");
             Pieza aux = tablero[x, y].pza;
             if (tag == "r" || tipo == "AUTOMATICO")
             {
                 tablero[x, y].pza             = tablero[selectX, selectY].pza;
                 tablero[selectX, selectY].pza = null;
             }
             else
             {
                 comsUDP.enviaMensaje("partida@MOVIMIENTO@" + comsUDP.nCte1.ToString() + "@" + comsUDP.nOp.ToString() + "@" + selectX.ToString() + "@" + selectY.ToString() + "@" + x.ToString() + "@" + y.ToString() + "@N");
                 while (!movida)
                 {
                     Thread.Sleep(10);
                 }
                 movida = false;
                 return;
             }
             //Posicion de los Reyes
             if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
             {
                 reyb.x = x; reyb.y = y; cr = true;
             }
             else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king")
             {
                 reyn.x = x; reyn.y = y; cr = true;
             }
             if (tag == "r" || tipo == "AUTOMATICO")
             {
                 tablero[selectX, selectY].colocaPieza();
                 tablero[x, y].colocaPieza();
             }
             //---------------------
             if (jaqueAlRey(turnoBlanca))
             {
                 if (turnoBlanca)
                 {
                     MessageBox.Show("El Rey Blanco está en Jaque", "Jaque");
                 }
                 else
                 {
                     MessageBox.Show("El Rey Dorado está en Jaque", "Jaque");
                 }
                 tablero[selectX, selectY].pza = tablero[x, y].pza;
                 tablero[x, y].pza             = aux;
                 //Regresar posicion de los Reyes
                 if (cr)
                 {
                     if (tablero[selectX, selectY].pza.color)
                     {
                         reyb.x = selectX; reyb.y = selectY;
                     }
                     else
                     {
                         reyn.x = selectX; reyn.y = selectY;
                     }
                 }
                 tablero[selectX, selectY].colocaPieza();
                 tablero[x, y].colocaPieza();
             }
             else
             {
                 //Comprueba piezaz que alteren el enroque
                 alteranEnroque(x, y);
                 //Peon a Dama
                 if (tablero[x, y].piezaBlanca() && tablero[x, y].pza.roll == "pawn" && y == 0)
                 {
                     tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon blanco a Reina", "Promocion");
                 }
                 else if (tablero[x, y].piezaNegra() && tablero[x, y].pza.roll == "pawn" && y == 7)
                 {
                     tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon dorado a Reina", "Promocion");
                 }
                 //Turno
                 if (comsUDP.enroque)
                 {
                     comsUDP.enroque = false;
                 }
                 else
                 {
                     if (turnoBlanca)
                     {
                         turnoBlanca = false;
                     }
                     else
                     {
                         turnoBlanca = true;
                     }
                 }
                 int i, j, auxX = selectX, auxY = selectY;
                 iluminado = 0;
                 amenaza   = false;
                 for (j = 0; j < 8; j++)
                 {
                     for (i = 0; i < 8; i++)
                     {
                         if (tablero[i, j].pza != null)
                         {
                             if (tablero[i, j].pza.color == turnoBlanca)
                             {
                                 selectX = i;
                                 selectY = j;
                                 iluminaPosibles(i, j, "j");
                             }
                         }
                     }
                 }
                 if (jaqueAlRey(turnoBlanca))
                 {
                     if (iluminado == 0)
                     {
                         terminado = true;
                         tm        = false;
                         MessageBox.Show("Jaque Mate", "Jaque");
                         //this.Close();
                     }
                     else
                     {
                         if (turnoBlanca)
                         {
                             MessageBox.Show("Jaque al Rey Blanco", "Jaque");
                         }
                         else
                         {
                             MessageBox.Show("Jaque al Rey Dorado", "Jaque");
                         }
                     }
                 }
                 else
                 if (iluminado == 0)
                 {
                     MessageBox.Show("Ahogado", "Empate");
                     //this.Close();
                 }
             }
         }
         else
         {
             limpiaEnroque();
             iluminaPosibles(selectX, selectY, "");
             if (tag == "g")
             {
                 enroque(x, y);
             }
             if (tag == "y")
             {
                 MessageBox.Show("No es posible enrocar en esta direccion", "Enroque");
             }
         }
     }
     //--------------------------------------------------Seleccionar la Pieza----------------------------------
     else
     {
         if (!terminado)
         {
             if (tablero[x, y].pza != null)
             {
                 if ((turnoBlanca && tablero[x, y].piezaBlanca()) || (!turnoBlanca && tablero[x, y].piezaNegra()) || tipo == "AUTOMATICO")
                 {
                     if ((tablero[x, y].piezaBlanca() && comsUDP.color == "blancas") || (tablero[x, y].piezaNegra() && comsUDP.color == "doradas") || tipo == "AUTOMATICO")
                     {
                         iluminado = 0;
                         selectX   = x;
                         selectY   = y;
                         amenaza   = false;
                         if (tipo == "MANUAL")
                         {
                             iluminaPosibles(x, y, "l");
                         }
                         else
                         {
                             seleccionada = true;
                         }
                         if (iluminado > 0)
                         {
                             seleccionada = true;
                             //Comprueba condiciones para enroque
                             compruebaEnroque();
                         }
                         else
                         if (amenaza)
                         {
                             if (turnoBlanca)
                             {
                                 MessageBox.Show("Rey Blanco quedará en Jaque", "Jaque");
                             }
                             else
                             {
                                 MessageBox.Show("Rey Dorado quedará en Jaque", "Jaque");
                             }
                             iluminaPosibles(x, y, "");
                         }
                     }
                     else
                     {
                         MessageBox.Show("No son tus piezas", "Color");
                     }
                 }
                 else
                 {
                     if (turnoBlanca)
                     {
                         MessageBox.Show("Es el turno de las Blancas", "Turno");
                     }
                     else
                     {
                         MessageBox.Show("Es el turno de las Doradas", "Turno");
                     }
                 }
             }
         }
     }
 }