public override void actualizarMovimientos(Casilla casilla) { miCasilla = casilla; movimientosPermitidos.Clear(); Torre.añadirMovyAme(miCasilla, movimientosPermitidos, true); Alfil.añadirMovyAme(miCasilla, movimientosPermitidos, true); }
public override void actualizarAmenazas(Casilla casilla) { miCasilla = casilla; celdasAmenazadas.Clear(); Torre.añadirMovyAme(miCasilla, celdasAmenazadas, false); Alfil.añadirMovyAme(miCasilla, celdasAmenazadas, false); }
public void setEstado(Estado estado) { try { turno = estado.turno; nTurno = estado.nTurno; fichasBlancas.Clear(); fichasNegras.Clear(); selected = null; seleccionada = null; for (int i = 0; i < Estado.LADO; i++) { for (int j = 0; j < Estado.LADO; j++) { // Referente a la casilla tablero[i][j].alPaso = estado.alPaso[i][j]; switch (estado.tablero[i][j]) { case Estado.Vacio: tablero[i][j].ficha = null; break; case Estado.PeonBlanco: Peon peon = new Peon(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = peon; peon.mov = estado.mov[i][j]; if (tablero[i][j].abajo.alPaso) { peon.alPaso = tablero[i][j]; peon.posNormal = tablero[i][j].abajo; peon.posNormal.ficha = peon; } break; case Estado.TorreBlanca: Torre torre = new Torre(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = torre; break; case Estado.CaballoBlanco: Caballo caballo = new Caballo(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = caballo; break; case Estado.AlfilBlanco: Alfil alfil = new Alfil(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = alfil; break; case Estado.ReinaBlanca: Reina dama = new Reina(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = dama; break; case Estado.ReyBlanco: reyBlanco = new Rey(Ficha.BLANCA, tablero[i][j]); tablero[i][j].ficha = reyBlanco; break; case Estado.PeonNegro: Peon peon2 = new Peon(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = peon2; peon2.mov = estado.mov[i][j]; if (tablero[i][j].arriba.alPaso) { peon2.alPaso = tablero[i][j]; peon2.posNormal = tablero[i][j].arriba; peon2.posNormal.ficha = peon2; } break; case Estado.TorreNegra: Torre torre2 = new Torre(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = torre2; break; case Estado.CaballoNegro: Caballo caballo2 = new Caballo(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = caballo2; break; case Estado.AlfilNegro: Alfil alfil2 = new Alfil(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = alfil2; break; case Estado.ReinaNegra: Reina dama2 = new Reina(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = dama2; break; case Estado.ReyNegro: reyNegro = new Rey(Ficha.NEGRA, tablero[i][j]); tablero[i][j].ficha = reyNegro; break; default: break; } if (tablero[i][j].ficha != null) { tablero[i][j].ficha.movida = estado.movida[i][j]; if (tablero[i][j].ficha.color == Ficha.BLANCA) { fichasBlancas.Add(tablero[i][j].ficha); } else { fichasNegras.Add(tablero[i][j].ficha); } } } } // Bucle externo (i) // Torres de los reyes reyBlanco.torreC = ((Torre)tablero[estado.torreCB[0]][estado.torreCB[1]].ficha); reyBlanco.torreL = ((Torre)tablero[estado.torreLB[0]][estado.torreLB[1]].ficha); reyNegro.torreC = ((Torre)tablero[estado.torreCN[0]][estado.torreCN[1]].ficha); reyNegro.torreL = ((Torre)tablero[estado.torreLN[0]][estado.torreLN[1]].ficha); // Actualizamos resto de cosas this.actualizarMovimientos(); } catch (Exception e) { MessageBox.Show("Error cargando estado previo: \n\r" + e.Message); } }
static public void añadirMovyAme(Casilla casilla, ArrayList al, bool mov) { Casilla vecina; // Arriba Derecha int j = casilla.posY + 1; int i; for (i = casilla.posX + 1; i < 8 && j < 8; i++) { vecina = casilla.tablero.tablero[i][j]; if (Alfil.comprobarMovAme(vecina, casilla.ficha.color, al, mov)) { break; } j++; } // Arriba Izquierda j = casilla.posY - 1; for (i = casilla.posX + 1; i < 8 && j >= 0; i++) { vecina = casilla.tablero.tablero[i][j]; if (Alfil.comprobarMovAme(vecina, casilla.ficha.color, al, mov)) { break; } j--; } // Abajo Izquierda j = casilla.posY - 1; for (i = casilla.posX - 1; i >= 0 && j >= 0; i--) { vecina = casilla.tablero.tablero[i][j]; if (Alfil.comprobarMovAme(vecina, casilla.ficha.color, al, mov)) { break; } j--; } // Abajo Derecha j = casilla.posY + 1; for (i = casilla.posX - 1; i >= 0 && j < 8; i--) { vecina = casilla.tablero.tablero[i][j]; if (Alfil.comprobarMovAme(vecina, casilla.ficha.color, al, mov)) { break; } j++; } }