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); }
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; } }
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); }
public Celda getCelda(Pieza pieza) { Celda celda = (from Celda cel in celdas where cel.Pieza == pieza && pieza.Activa == true select cel).FirstOrDefault(); return(celda); }
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); }
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); }
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); } } } } }
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); }
public void SeleccionarPiezaCorona(Tablero tablero, Pieza pieza, Celda destino) { tablero.IntercambiarPieza(pieza, destino, this); }