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 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); }