private string distinguirFicha(Ficha previa, Casilla destino) { ArrayList j; if (previa.color == Ficha.BLANCA) { j = fichasBlancas; } else { j = fichasNegras; } foreach (Ficha f in j) { if (f != previa && f.valor == previa.valor) { if (f.movimientosPermitidos.Contains(destino)) { if (f.miCasilla.posX != previa.miCasilla.posX) { return(NotAlg.fila[previa.miCasilla.posX]); } else { return(NotAlg.columna[previa.miCasilla.posY]); } } } } return(""); }
private void button1_Click(object sender, EventArgs e) { switch (comboBox1.SelectedIndex) { case 0: // Reina seleccionada = new Reina(color, peon.miCasilla); break; case 1: // Caballo seleccionada = new Caballo(color, peon.miCasilla); break; case 2: // Torre seleccionada = new Torre(color, peon.miCasilla); break; case 3: // Alfil seleccionada = new Alfil(color, peon.miCasilla); break; default: break; } seleccionada.miCasilla.ficha = seleccionada; seleccionada.actualizarAmenazas(seleccionada.miCasilla); seleccionada.actualizarMovimientos(seleccionada.miCasilla); this.Close(); }
void mouseFunction() { mouseState = Mouse.GetState(); Vector2 pos = new Vector2(mouseState.X, mouseState.Y); posRaton = pos; if (!finJuego) { if (mouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed && selBlock.Count == 0) { ficha = tablero.click(pos.X, pos.Y); selBlock.Add(ficha); } if (mouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Released && selBlock.Count > 0) { selBlock.Clear(); } } }
public void actualizarAmenazas() { Ficha f = null; for (int i = 0; i < tablero.Length; i++) { for (int j = 0; j < tablero[i].Length; j++) { f = tablero[i][j].ficha; if (f != null && !tablero[i][j].alPaso) { f.actualizarAmenazas(tablero[i][j]); } } } }
public Ficha click(double x, double y) { int i = (int)(y / Casilla.LADO); int j = (int)(x / Casilla.LADO); if (i >= 0 && i < 8 && j >= 0 && j < 8) { if (selected == tablero[i][j]) { return(selected.ficha); } Ficha previa = null; Casilla origen = null; if (selected != null) { previa = selected.ficha; origen = selected; } selected = tablero[i][j]; if (selected == null) { return(null); } if (moverFicha(previa, origen, selected)) { // Proximo turno turno = !turno; nTurno++; selected = null; return(null); } if (selected != null) { return(selected.ficha); } } return(null); }
public void actualizarMovimientos() { Ficha f = null; // Asegurarse siempre actualizando amenazas actualizarAmenazas(); for (int i = 0; i < tablero.Length; i++) { for (int j = 0; j < tablero[i].Length; j++) { f = tablero[i][j].ficha; if (f != null && !tablero[i][j].alPaso) { f.actualizarMovimientos(tablero[i][j]); } } } }
public bool moverFicha(Ficha previa, Casilla origen, Casilla destino) { bool enroque = false; if (turno == Ficha.BLANCA) { movimiento = ((nTurno / 2) + 1).ToString() + ". "; } else { movimiento += " "; } if (previa != null) { if (previa.movimientosPermitidos.Contains(destino)) { Ficha comida = null; ArrayList jugador = null; bool mov = previa.movida; bool paso = destino.alPaso; movimiento += previa.ToString(); // Pueden ir alli varias piezas mias??? movimiento += distinguirFicha(previa, destino); if (destino.ficha != null) { destino.ficha.capturada = true; comida = destino.ficha; if (fichasBlancas.Contains(destino.ficha)) { fichasBlancas.Remove(destino.ficha); jugador = fichasBlancas; movimiento += "x"; } else if (fichasNegras.Contains(destino.ficha)) { fichasNegras.Remove(destino.ficha); jugador = fichasNegras; movimiento += "x"; } // ¿Me comen al paso? Solo peones... try { Peon peon = (Peon)previa; if (destino.ficha.miCasilla != destino) { destino.ficha.miCasilla.ficha = null; destino.alPaso = false; } } catch (Exception) { destino.alPaso = false; } // Me comen habiendo dado doble salto? try { Peon peon = (Peon)destino.ficha; if (peon.alPaso == destino) { peon.posNormal.alPaso = false; peon.posNormal.ficha = null; } } catch (Exception) { } } movimiento += destino.ToString(); destino.ficha = previa; origen.ficha = null; //selected.ficha.actualizarMovimientos(selected); previa.movida = true; // Fue un enroque? Torre torre = null; Casilla casT = null; if (previa.enroque == destino) { try { // Si no es Rey, no fue enroque y saltara la excepcion :) Rey r = (Rey)previa; if (destino.derecha == r.torreC.miCasilla) { casT = r.torreC.miCasilla; moverFicha(r.torreC, r.torreC.miCasilla, r.torreC.enroque); torre = r.torreC; movimiento = ((nTurno / 2) + 1).ToString() + ". " + NotAlg.ENROQUEC; } else { casT = r.torreL.miCasilla; moverFicha(r.torreL, r.torreL.miCasilla, r.torreL.enroque); torre = r.torreL; movimiento = ((nTurno / 2) + 1).ToString() + ". " + NotAlg.ENROQUEL; } enroque = true; } catch (Exception) { } } // Fue salto doble de peon? try { Peon peon = (Peon)previa; if (peon.alPaso == destino) { peon.posNormal.ficha = peon; peon.posNormal.alPaso = true; } else { if (peon.posNormal != null) { peon.posNormal.alPaso = false; } peon.alPaso = null; peon.posNormal = null; } } catch (Exception) { } actualizarMovimientos(); // Evitar autojaque if (esJaque(turno, false)) { // Por si acaso destino.ficha = null; destino.alPaso = paso; // Deshacemos y nos sigue tocando if (comida != null && jugador != null) { comida.capturada = false; jugador.Add(comida); destino.ficha = comida; } origen.ficha = previa; previa.movida = mov; // Volver a poner variables de "al paso" try { Peon peon = (Peon)previa; if (peon.alPaso == destino) { peon.posNormal.ficha = null; peon.posNormal.alPaso = false; peon.mov = -1; } } catch (Exception) { } // Si fue enroque, deshacer tambien a la torre // Aunque nunca deberia darse, pues se comprueba // antes que el "camino" no estuviese amenazado if (enroque && casT != null && torre != null) { torre.miCasilla = null; casT.ficha = torre; torre.miCasilla = casT; } actualizarMovimientos(); // Si movemos, deseleccionamos destino.selected = false; return(false); } // Finalmente, promocionamos un peon? try { Peon peon = (Peon)previa; if ((peon.color && peon.miCasilla.posX == 0) || (!peon.color && peon.miCasilla.posX == 7)) { Promocion prom = new Promocion(peon); prom.ShowDialog(); if (peon.color) { fichasBlancas.Remove(peon); fichasBlancas.Add(prom.seleccionada); } else { fichasNegras.Remove(peon); fichasNegras.Add(prom.seleccionada); } movimiento += prom.seleccionada.ToString(); } } catch (Exception) { } // Si movemos, deseleccionamos destino.selected = false; return(true); } return(false); } return(false); }