public Casilla(bool color, Tablero tablero, int i, int j) { if (color) { textura = Texturas.CASILLA_BLANCA; } else { textura = Texturas.CASILLA_NEGRA; } this.tablero = tablero; pos = new Vector2(j * LADO, i * LADO); posX = i; posY = j; notacion = NotAlg.columna[j] + NotAlg.fila[i]; }
// Determina si un jugador está ahogado (tablas) public bool ahogado(bool color) { ArrayList jugador; Rey rey; Tablero tablero = new Tablero(); tablero.setEstado(this.getEstado()); if (color) { jugador = tablero.fichasBlancas; rey = reyBlanco; } else { jugador = tablero.fichasNegras; rey = reyNegro; } if (tablero.esJaque(color, true)) { return(false); } Ficha f; for (int i = 0; i < jugador.Count; i++) { f = (Ficha)jugador[i]; if (f.movimientosPermitidos.Count > 0) { return(false); } } return(true); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here Texturas.CASILLA_NEGRA = Texture2D.FromFile(graphics.GraphicsDevice, "negra.png"); Texturas.CASILLA_BLANCA = Texture2D.FromFile(graphics.GraphicsDevice, "blanca.png"); Texturas.NEGRO_PEON = Texture2D.FromFile(graphics.GraphicsDevice, "npeon.png"); Texturas.NEGRO_TORRE = Texture2D.FromFile(graphics.GraphicsDevice, "ntorre.png"); Texturas.NEGRO_CABALLO = Texture2D.FromFile(graphics.GraphicsDevice, "ncaballo.png"); Texturas.NEGRO_ALFIL = Texture2D.FromFile(graphics.GraphicsDevice, "nalfil.png"); Texturas.NEGRO_REINA = Texture2D.FromFile(graphics.GraphicsDevice, "nreina.png"); Texturas.NEGRO_REY = Texture2D.FromFile(graphics.GraphicsDevice, "nrey.png"); Texturas.BLANCO_PEON = Texture2D.FromFile(graphics.GraphicsDevice, "bpeon.png"); Texturas.BLANCO_TORRE = Texture2D.FromFile(graphics.GraphicsDevice, "btorre.png"); Texturas.BLANCO_CABALLO = Texture2D.FromFile(graphics.GraphicsDevice, "bcaballo.png"); Texturas.BLANCO_ALFIL = Texture2D.FromFile(graphics.GraphicsDevice, "balfil.png"); Texturas.BLANCO_REINA = Texture2D.FromFile(graphics.GraphicsDevice, "breina.png"); Texturas.BLANCO_REY = Texture2D.FromFile(graphics.GraphicsDevice, "brey.png"); Texturas.RATON = Texture2D.FromFile(graphics.GraphicsDevice, "raton.png"); tablero = new Tablero(); }
// Determina si el rey "color" está en jaque (mate) public bool esJaque(bool color, bool mate) { Rey rey; ArrayList jugadorRival; Tablero tablero = new Tablero(); tablero.setEstado(this.getEstado()); // Copia del jugador (se modifica en los calculos) ArrayList jugador = new ArrayList(); if (color) { jugadorRival = tablero.fichasNegras; for (int i = 0; i < tablero.fichasBlancas.Count; i++) { jugador.Add(tablero.fichasBlancas[i]); } rey = tablero.reyBlanco; } else { jugadorRival = tablero.fichasBlancas; for (int i = 0; i < tablero.fichasNegras.Count; i++) { jugador.Add(tablero.fichasNegras[i]); } rey = tablero.reyNegro; } Ficha ficha; // Copia de los movimientos (se modifica en los calculos) ArrayList movimientos = new ArrayList(); bool noJaque = false; for (int i = 0; i < jugadorRival.Count; i++) { ficha = (Ficha)jugadorRival[i]; if (ficha.celdasAmenazadas.Contains(rey.miCasilla)) { if (!mate) { return(true); } if (rey.movimientosPermitidos.Count == 0) { Casilla aux; Ficha f, r; for (int j = 0; j < jugador.Count; j++) { f = (Ficha)jugador[j]; aux = f.miCasilla; movimientos.Clear(); for (int k = 0; k < f.movimientosPermitidos.Count; k++) { movimientos.Add(f.movimientosPermitidos[k]); } foreach (Casilla c in movimientos) { r = c.ficha; if (tablero.moverFicha(f, aux, c)) { if (!tablero.esJaque(color, false)) { noJaque = true; } } c.ficha = r; if (r != null) { r.capturada = false; } aux.ficha = f; tablero.actualizarMovimientos(); if (noJaque) { return(false); } } } return(true); } } } return(false); }
public void cargarEstado(Tablero t) { int pieza, x, y; turno = t.turno; nTurno = t.nTurno; foreach (Ficha f in t.fichasBlancas) { x = f.miCasilla.posX; y = f.miCasilla.posY; switch (f.valor) { case ValorFicha.PEON: pieza = Estado.PeonBlanco; mov[x][y] = ((Peon)f).mov; alPaso[x][y] = ((Peon)f).alPaso != null; break; case ValorFicha.CABALLO: pieza = Estado.CaballoBlanco; break; case ValorFicha.ALFIL: pieza = Estado.AlfilBlanco; break; case ValorFicha.TORRE: pieza = Estado.TorreBlanca; break; case ValorFicha.REINA: pieza = Estado.ReinaBlanca; break; case ValorFicha.REY: pieza = Estado.ReyBlanco; torreCB[0] = t.reyBlanco.torreC.miCasilla.posX; torreCB[1] = t.reyBlanco.torreC.miCasilla.posY; torreLB[0] = t.reyBlanco.torreL.miCasilla.posX; torreLB[1] = t.reyBlanco.torreL.miCasilla.posY; break; default: pieza = Estado.Vacio; break; } movida[x][y] = f.movida; tablero[x][y] = pieza; } foreach (Ficha f in t.fichasNegras) { x = f.miCasilla.posX; y = f.miCasilla.posY; switch (f.valor) { case ValorFicha.PEON: pieza = Estado.PeonNegro; mov[x][y] = ((Peon)f).mov; alPaso[x][y] = ((Peon)f).alPaso != null; break; case ValorFicha.CABALLO: pieza = Estado.CaballoNegro; break; case ValorFicha.ALFIL: pieza = Estado.AlfilNegro; break; case ValorFicha.TORRE: pieza = Estado.TorreNegra; break; case ValorFicha.REINA: pieza = Estado.ReinaNegra; break; case ValorFicha.REY: pieza = Estado.ReyNegro; torreCN[0] = t.reyNegro.torreC.miCasilla.posX; torreCN[1] = t.reyNegro.torreC.miCasilla.posY; torreLN[0] = t.reyNegro.torreL.miCasilla.posX; torreLN[1] = t.reyNegro.torreL.miCasilla.posY; break; default: pieza = Estado.Vacio; break; } movida[x][y] = f.movida; tablero[x][y] = pieza; } }
public Estado(Tablero t) : this() { cargarEstado(t); }