Ejemplo n.º 1
0
        public void IntercambiarPieza(Pieza pieza, Celda destino, Jugador jug)
        {
            Pieza   piezaIntercambiada = null;
            Jugador jugadorRival       = null;

            if (destino.Pieza != null)
            {
                if (jug.Equals(partida.Jugador1))
                {
                    piezaIntercambiada = (from Pieza p in partida.Jugador2.Piezas
                                          where p.Equals(destino.Pieza)
                                          select p).FirstOrDefault();

                    jugadorRival = partida.Jugador2;
                }
                else
                {
                    piezaIntercambiada = (from Pieza p in partida.Jugador1.Piezas
                                          where p.Equals(destino.Pieza)
                                          select p).FirstOrDefault();

                    jugadorRival = partida.Jugador1;
                }

                piezaIntercambiada.Activa = false;

                piezaIntercambiada = (from Pieza p in piezas
                                      where p.Equals(piezaIntercambiada)
                                      select p).FirstOrDefault();

                piezaIntercambiada.Activa = false;
            }
            destino.Pieza = pieza;
            partida.RegistrarMovimiento(null, destino);
        }
Ejemplo n.º 2
0
        public void VerificarMovimiento(Celda actual, Celda destino, Pieza pieza, Jugador jugador)
        {
            Pieza p = null;

            if (jugador.Equals(partida.Jugador1))
            {
                p = (from Pieza rey in partida.Jugador1.Piezas
                     where rey is Rey && rey.Activa == true
                     select rey).FirstOrDefault();
            }
            else
            {
                p = (from Pieza rey in partida.Jugador2.Piezas
                     where rey is Rey && rey.Activa == true
                     select rey).FirstOrDefault();
            }

            if (pieza.PosicionInicial.Equals(ARRIBA) && pieza is Rey)
            {
                if (actual.Fila == 8 && destino.Fila == 8)
                {
                    if ((actual.Columna + 2 == destino.Columna) || (actual.Columna - 2 == destino.Columna))
                    {
                        ((Rey)p).Enroque = true;
                    }
                    else
                    {
                        ((Rey)p).Enroque = false;
                    }
                }
                else
                {
                    ((Rey)p).Enroque = false;
                }
            }
            else if (pieza.PosicionInicial.Equals(ABAJO) && pieza is Rey)
            {
                if (actual.Fila == 1 && destino.Fila == 1)
                {
                    if ((actual.Columna + 2 == destino.Columna) || (actual.Columna - 2 == destino.Columna))
                    {
                        ((Rey)p).Enroque = true;
                    }
                    else
                    {
                        ((Rey)p).Enroque = false;
                    }
                }
                else
                {
                    ((Rey)p).Enroque = false;
                }
            }
            else
            {
                ((Rey)p).Enroque = false;
            }
        }
Ejemplo n.º 3
0
        private string verificarJaqueOJaqueMate(Jugador jugUltMov, Pieza piezaUltMov)
        {
            string tipo         = string.Empty;
            Pieza  reyContrario = null;

            if (jugUltMov.Equals(partida.Jugador1))
            {
                reyContrario = (from Pieza rey in partida.Jugador2.Piezas
                                where rey is Rey && rey.Activa == true
                                select rey).FirstOrDefault();
            }
            else
            {
                reyContrario = (from Pieza rey in partida.Jugador2.Piezas
                                where rey is Rey && rey.Activa == true
                                select rey).FirstOrDefault();
            }

            if (reyContrario != null)
            {
                //Verificar jaque mate

                List <Celda> celdasAMoverseProxMov = piezaUltMov.getCeldasDestino(this, this.getCelda(piezaUltMov));

                Celda celdaActualRey = this.getCelda(reyContrario);

                if (celdasAMoverseProxMov.Contains(celdaActualRey))
                {
                    tipo = "JAQUE MATE";

                    //Verificar jaque

                    List <Celda> celdaAMoverse = reyContrario.getCeldasDestino(this, celdaActualRey);

                    foreach (Celda celdaDisp in celdaAMoverse)
                    {
                        Celda celdaCoincidente = null;

                        foreach (Pieza pieza in piezas)
                        {
                            if (piezaUltMov.Color == pieza.Color && pieza.Activa == true)
                            {
                                List <Celda> celdasAMover = pieza.getCeldasDestino(this, this.getCelda(pieza));
                                celdaCoincidente = (from Celda c in celdasAMover
                                                    where c.Equals(celdaDisp)
                                                    select c).FirstOrDefault();
                            }
                        }
                        if (celdaCoincidente == null)
                        {
                            tipo = "JAQUE";
                        }
                    }
                }
            }

            return(tipo);
        }
Ejemplo n.º 4
0
        public Celda getCelda(Pieza pieza)
        {
            Celda celda = (from Celda cel in celdas
                           where cel.Pieza == pieza && pieza.Activa == true
                           select cel).FirstOrDefault();


            return(celda);
        }
Ejemplo n.º 5
0
        public bool VerificarDobleTurno(Jugador jugador)
        {
            Pieza p = (from Pieza rey in jugador.Piezas
                       where rey is Rey && rey.Activa == true
                       select rey).FirstOrDefault();

            int cant = jugador.Turno.Movimiento.Count;

            if (cant > 0 && cant < 2 && ((Rey)p).Enroque == true)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        public Celda getCelda(Celda celdaActual, Movimiento movimiento)
        {
            Pieza pieza = celdaActual.Pieza;

            if (pieza == null)
            {
                return(null);
            }

            int   horizontal = celdaActual.Columna + movimiento.Horizontal;
            int   vertical   = (pieza.PosicionInicial.Equals(ARRIBA) ? celdaActual.Fila - movimiento.Vertical : celdaActual.Fila + movimiento.Vertical);
            Celda celda      = (from Celda cel in celdas
                                where cel.Columna == horizontal && cel.Fila == vertical
                                select cel).FirstOrDefault();

            return(celda);
        }
Ejemplo n.º 7
0
        public void Mover(Pieza pieza, Tablero tablero, Celda celdaActual, Celda celdaDestino)
        {
            Pieza existePieza = (from Pieza p in piezas
                                 where p == pieza
                                 select p).FirstOrDefault();

            if (existePieza != null)
            {
                piezaJaque = null;
                if (pieza.Mover(tablero, celdaActual, celdaDestino, this))
                {
                    bool caballoElegido = false;
                    bool alfilElegido   = false;
                    bool torreElegida   = false;
                    bool damaElegida    = false;
                    //Saco los peones y el rey como piezas coronadoras
                    foreach (Pieza piezaCorona in piezas)
                    {
                        if (piezaCorona is Caballo && !caballoElegido)
                        {
                            caballoElegido = true;
                            piezasCoronacion.Add(piezaCorona);
                        }
                        if (piezaCorona is Alfil && !alfilElegido)
                        {
                            alfilElegido = true;
                            piezasCoronacion.Add(piezaCorona);
                        }
                        if (piezaCorona is Torre && !torreElegida)
                        {
                            torreElegida = true;
                            piezasCoronacion.Add(piezaCorona);
                        }
                        if (piezaCorona is Reina && !damaElegida)
                        {
                            damaElegida = true;
                            piezasCoronacion.Add(piezaCorona);
                        }
                    }
                }
            }
        }
Ejemplo n.º 8
0
        public bool ModificarPosicionPieza(Celda actual, Celda destino, Jugador jug)
        {
            bool  coronacion = false;
            Pieza pieza      = actual.Pieza;

            actual.Pieza = null;
            Jugador jugadorRival = null;
            Pieza   piezaComida  = null;

            if (destino.Pieza != null)
            {
                if (jug.Equals(partida.Jugador1))
                {
                    piezaComida = (from Pieza p in partida.Jugador2.Piezas
                                   where p.Equals(destino.Pieza)
                                   select p).FirstOrDefault();

                    jugadorRival = partida.Jugador2;
                }
                else
                {
                    piezaComida = (from Pieza p in partida.Jugador1.Piezas
                                   where p.Equals(destino.Pieza)
                                   select p).FirstOrDefault();

                    jugadorRival = partida.Jugador1;
                }

                piezaComida.Activa = false;

                piezaComida = (from Pieza p in piezas
                               where p.Equals(piezaComida)
                               select p).FirstOrDefault();

                piezaComida.Activa = false;
            }
            //Verifica si el peon comio con el peon al paso
            if (pieza is Peon)
            {
                Movimiento mov = new Movimiento();
                mov.Horizontal = 0;
                mov.Vertical   = -1;

                Celda celdaAnterior = this.getCelda(actual, mov);

                if (celdaAnterior.Pieza != null && celdaAnterior.Pieza is Peon && celdaAnterior.Pieza.Color != pieza.Color)
                {
                    piezaComida = (from Pieza p in piezas
                                   where p.Equals(celdaAnterior.Pieza)
                                   select p).FirstOrDefault();

                    piezaComida.Activa = false;
                }

                coronacion = this.VerificarCoronacion((Peon)pieza, destino);
            }

            destino.Pieza = pieza;
            partida.RegistrarMovimiento(actual, destino);
            this.VerificarMovimiento(actual, destino, pieza, jug);
            string tipo = (!coronacion) ? this.verificarJaqueOJaqueMate(jug, pieza) : string.Empty;

            if (tipo.Equals("JAQUE"))
            {
                jugadorRival.PiezaJaque = pieza;
            }

            partida.ChequearGanador(tipo, jug);

            return(coronacion);
        }
Ejemplo n.º 9
0
 public void SeleccionarPiezaCorona(Tablero tablero, Pieza pieza, Celda destino)
 {
     tablero.IntercambiarPieza(pieza, destino, this);
 }