public virtual void PonerFicha(Tablero tablero, Movimiento Mov, Pieza pieza) { if (tablero.casilleros[Mov.X, Mov.Y].color == pieza.color) { Console.WriteLine("Ya tenes una pieza"); Console.ReadKey(); } if (tablero.casilleros[Mov.X, Mov.Y].color != pieza.color) { tablero.PoneFichaAca(Mov, pieza, color); } }
public void AgregarFicha(Movimiento movimiento, Pieza pieza) { casilleros[movimiento.X, movimiento.Y].PonerFicha(this, movimiento, pieza); if (pieza.color == 1) { Casilleros[movimiento.X, movimiento.Y].CalcularMov(casilleros, movimiento, MovimientosNegros); } if (pieza.color == 2) { Casilleros[movimiento.X, movimiento.Y].CalcularMov(casilleros, movimiento, MovimientosBlancos); } }
static void Main(string[] args) { Console.WriteLine("Hello World!"); //Creamos la celda Celda c1 = new Celda(2, 3); //Creamos la pieza Pieza p1 = new Pieza(false, false, c1); Celda posicion = p1.GetPosicion(); Console.WriteLine("La pieza se encuentra en la posicion X: " + p1.GetPosicion().GetPosicionX().ToString()); Console.WriteLine("La pieza se encuentra en la posicion Y: " + posicion.GetPosicionY().ToString()); //seteamos el ocupante c1.SetOcupante(p1); Console.WriteLine("La celda tiene el ocupante" + c1.GetOcupante().ToString()); //Otro cambio desde el vs code }
public void onButtonClick(object source, EventArgs e) { Button b = (Button)source; int x = b.Location.X / 69, y = b.Location.Y / 69; if (seleccionada) { seleccionada = false; String tag = (String)tablero[x, y].btn.BackgroundImage.Tag; //----------------------------------------------Mueve Pieza----------------------------------------------- if (tag == "l" || tag == "r") { bool cr = false; limpiaEnroque(); iluminaPosibles(selectX, selectY, ""); Pieza aux = tablero[x, y].pza; tablero[x, y].pza = tablero[selectX, selectY].pza; tablero[selectX, selectY].pza = null; //Posicion de los Reyes if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyb.x = x; reyb.y = y; cr = true; } else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyn.x = x; reyn.y = y; cr = true; } tablero[selectX, selectY].colocaPieza(); tablero[x, y].colocaPieza(); //--------------------- if (jaqueAlRey(turnoBlanca)) { if (turnoBlanca) { MessageBox.Show("El Rey Blanco está en Jaque", "Jaque"); } else { MessageBox.Show("El Rey Dorado está en Jaque", "Jaque"); } tablero[selectX, selectY].pza = tablero[x, y].pza; tablero[x, y].pza = aux; //Regresar posicion de los Reyes if (cr) { if (tablero[selectX, selectY].pza.color) { reyb.x = selectX; reyb.y = selectY; } else { reyn.x = selectX; reyn.y = selectY; } } tablero[selectX, selectY].colocaPieza(); tablero[x, y].colocaPieza(); } else { //Comprueba piezaz que ateren el enroque alteranEnroque(x, y); //Peon a Dama if (tablero[x, y].piezaBlanca() && tablero[x, y].pza.roll == "pawn" && y == 0) { tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon blanco a Reina", "Promocion"); } else if (tablero[x, y].piezaNegra() && tablero[x, y].pza.roll == "pawn" && y == 7) { tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon dorado a Reina", "Promocion"); } //Turno if (turnoBlanca) { turnoBlanca = false; } else { turnoBlanca = true; } int i, j, auxX = selectX, auxY = selectY; iluminado = 0; amenaza = false; for (j = 0; j < 8; j++) { for (i = 0; i < 8; i++) { if (tablero[i, j].pza != null) { if (tablero[i, j].pza.color == turnoBlanca) { selectX = i; selectY = j; iluminaPosibles(i, j, "j"); } } } } if (jaqueAlRey(turnoBlanca)) { if (iluminado == 0) { terminado = true; tm = false; MessageBox.Show("Jaque Mate", "Jaque"); DialogResult res = MessageBox.Show("Comenzar Nuevo?", "Juego Terminado"); tm = true; if (res.ToString() == "OK") { comenzarNuevo(); } } else { if (turnoBlanca) { MessageBox.Show("Jaque al Rey Blanco", "Jaque"); } else { MessageBox.Show("Jaque al Rey Dorado", "Jaque"); } } } else if (iluminado == 0) { MessageBox.Show("Ahogado", "Empate"); } } } else { limpiaEnroque(); iluminaPosibles(selectX, selectY, ""); if (tag == "g") { enroque(x, y); //Turno if (turnoBlanca) { turnoBlanca = false; } else { turnoBlanca = true; } } if (tag == "y") { MessageBox.Show("No es posible enrocar en esta direccion", "Enroque"); } } } //--------------------------------------------------Seleccionar la Pieza---------------------------------- else { if (!terminado) { if (tablero[x, y].pza != null) { if ((turnoBlanca && tablero[x, y].piezaBlanca()) || (!turnoBlanca && tablero[x, y].piezaNegra())) { iluminado = 0; selectX = x; selectY = y; amenaza = false; iluminaPosibles(x, y, "l"); if (iluminado > 0) { seleccionada = true; //Comprueba condiciones para enroque compruebaEnroque(); } else if (amenaza) { if (turnoBlanca) { MessageBox.Show("Rey Blanco quedará en Jaque", "Jaque"); } else { MessageBox.Show("Rey Dorado quedará en Jaque", "Jaque"); } iluminaPosibles(x, y, ""); } } else { if (turnoBlanca) { MessageBox.Show("Es el turno de las Blancas", "Turno"); } else { MessageBox.Show("Es el turno de las Doradas", "Turno"); } } } } } }
public void mosaico(int x, int y, String l) { if (l == "l" || l == "j") { bool cr = false; Pieza aux = tablero[x, y].pza; tablero[x, y].pza = tablero[selectX, selectY].pza; tablero[selectX, selectY].pza = null; //Posicion de los Reyes if (tablero[x, y].pza != null) { if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyb.x = x; reyb.y = y; cr = true; } else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyn.x = x; reyn.y = y; cr = true; } } if (jaqueAlRey(turnoBlanca)) { if (l == "j") { l = ""; } else { l = "r"; } amenaza = true; } else { iluminado++; } tablero[selectX, selectY].pza = tablero[x, y].pza; tablero[x, y].pza = aux; //Regresar posicion de los Reyes if (cr) { if (tablero[selectX, selectY].pza.color) { reyb.x = selectX; reyb.y = selectY; } else { reyn.x = selectX; reyn.y = selectY; } } if (l == "j") { l = ""; } } if ((x + y) % 2 == 0) { tablero[x, y].btn.BackgroundImage = Image.FromFile(l + "wmarbel.png"); } else { tablero[x, y].btn.BackgroundImage = Image.FromFile(l + "bmarbel.png"); } tablero[x, y].btn.BackgroundImage.Tag = l; }
public Casilla(String r, bool c) { pza = new Pieza(r, c); }
static void Main(string[] args) { List <Pieza> tablero = new List <Pieza>(); IniciarTablero(); do { Console.WriteLine("Ajedrez!\n"); DibujarTablero(); string coordenada; Console.WriteLine("Ingrese una coordenada o 0 para salir:"); coordenada = Console.ReadLine(); if (coordenada == "0") { Console.Clear(); Console.WriteLine("Gracias por jugar Ajedrez!!! Saludos."); return; } Tuple <int, int> xy = CoordenadaValida(coordenada); Pieza p1 = xy != null?tablero.FirstOrDefault(x => x.Fila == xy.Item1 && x.Columna == xy.Item2) : null; while (xy == null || p1 == null) { if (xy == null) { Console.WriteLine("La coordenada ingresada anteriormente es inválida.\nIngrese una nueva coordenada:"); } else { Console.WriteLine("La coordenada ingresada anteriormente no contiene una pieza.\nIngrese una nueva coordenada:"); } coordenada = Console.ReadLine(); xy = CoordenadaValida(coordenada); p1 = xy != null?tablero.FirstOrDefault(x => x.Fila == xy.Item1 && x.Columna == xy.Item2) : null; } Console.WriteLine("Ingrese una coordenada de destino:"); coordenada = Console.ReadLine(); Tuple <int, int> wz = CoordenadaValida(coordenada); Pieza p2 = wz != null?tablero.FirstOrDefault(x => x.Fila == wz.Item1 && x.Columna == wz.Item2) : null; if (wz != null && (p2 == null || p2.Equipo != p1.Equipo)) { try { List <Tuple <int, int> > camino = new List <Tuple <int, int> >(); if (p1.GetType().Name == "Peon") { camino = ((Peon)p1).Mover(wz.Item1, wz.Item2, p2 != null); } else { camino = p1.Mover(wz.Item1, wz.Item2); } if (camino != null) { foreach (var mov in camino) { if (tablero.Any(x => x.Fila == mov.Item1 && x.Columna == mov.Item2)) { throw new Exception("Otra pieza en camino."); } } } p1.Fila = wz.Item1; p1.Columna = wz.Item2; if (p2 != null) { tablero.Remove(p2); } } catch (Exception e) { Console.WriteLine(e.Message); wz = null; p2 = null; } } else { if (wz == null) { Console.WriteLine("La coordenada ingresada anteriormente es inválida."); } else { Console.WriteLine("No se pueden comer piezas del mismo color."); } } Console.WriteLine("Presione cualquier tecla para continuar"); Console.ReadKey(); Console.Clear(); } while (tablero.Count() > 0); void DibujarTablero() { bool band = true; string caracter = " "; Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.DarkYellow; Console.Write(" "); for (char t = 'a'; t <= 'h'; t++) { Console.Write(" " + t + " "); } Console.WriteLine(" "); for (int f = 7; f >= 0; f--) { Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.DarkYellow; Console.Write(" " + (f + 1) + " "); for (int c = 0; c <= 7; c++) { caracter = " "; if (band) { Console.BackgroundColor = ConsoleColor.White; } else { Console.BackgroundColor = ConsoleColor.Black; } Pieza pieza = tablero.Where(x => x.Fila == f && x.Columna == c).FirstOrDefault(); if (pieza != null) { caracter = pieza.Inicial; Console.ForegroundColor = pieza.Color; } if (c != 7) { band = !band; } Console.Write(caracter); } Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.DarkYellow; Console.WriteLine(" " + (f + 1) + " "); } Console.ForegroundColor = ConsoleColor.Black; Console.BackgroundColor = ConsoleColor.DarkYellow; Console.Write(" "); for (char t = 'a'; t <= 'h'; t++) { Console.Write(" " + t + " "); } Console.WriteLine(" "); Console.ResetColor(); } void IniciarTablero() { List <int> listaInicial; do { listaInicial = new List <int>(); for (int i = 0; i < 64; i++) { listaInicial.Add(new Random().Next(1000000000)); } }while (listaInicial.Distinct().Count() != 64); List <int> listaOrdenada = listaInicial.OrderBy(p => p).ToList(); int n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); int f = n / 8; int c = n % 8; tablero.Add(new Alfil(f, c, 1)); int pos = 0; int x; int y; do { n = listaOrdenada.IndexOf(listaInicial.ElementAt(pos)); x = n / 8; y = n % 8; pos++; }while (EsBlanco(f, c) == EsBlanco(x, y)); tablero.Add(new Alfil(x, y, 1)); listaInicial.RemoveAt(pos - 1); n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Alfil(f, c, 2)); pos = 0; do { n = listaOrdenada.IndexOf(listaInicial.ElementAt(pos)); x = n / 8; y = n % 8; pos++; }while (EsBlanco(f, c) == EsBlanco(x, y)); tablero.Add(new Alfil(x, y, 2)); listaInicial.RemoveAt(pos - 1); for (int i = 1; i <= 2; i++) { for (int j = 0; j < 8; j++) { n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Peon(f, c, i)); } for (int j = 0; j < 2; j++) { n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Torre(f, c, i)); } for (int j = 0; j < 2; j++) { n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Caballo(f, c, i)); } n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Rey(f, c, i)); n = listaOrdenada.IndexOf(listaInicial.First()); listaInicial.RemoveAt(0); f = n / 8; c = n % 8; tablero.Add(new Reina(f, c, i)); } } Tuple <int, int> CoordenadaValida(string cd) { if (cd.Length != 2) { return(null); } var nro = cd.Substring(0, 1); var letra = cd.Substring(1, 1); if (cd.Length > 2) { return(null); } if (!char.TryParse(letra.ToLower(), out char l) || l > char.Parse("h") || l < char.Parse("a") || !int.TryParse(nro, out int numero) || numero > 8 || numero < 1) { return(null); } else { return(new Tuple <int, int> (numero - 1, Orden(l))); } } }
public void PoneFichaAca(Movimiento mov, Pieza pieza, int color) { casilleros[mov.X, mov.Y] = pieza; CalcularMovs(); }
public void accionPieza(int x, int y, String tipo) { if (seleccionada) { seleccionada = false; String tag = (String)tablero[x, y].btn.BackgroundImage.Tag; //----------------------------------------------Mueve Pieza----------------------------------------------- if (tag == "l" || tag == "r" || tipo == "AUTOMATICO") { bool cr = false; limpiaEnroque(); iluminaPosibles(selectX, selectY, ""); Pieza aux = tablero[x, y].pza; if (tag == "r" || tipo == "AUTOMATICO") { tablero[x, y].pza = tablero[selectX, selectY].pza; tablero[selectX, selectY].pza = null; } else { comsUDP.enviaMensaje("partida@MOVIMIENTO@" + comsUDP.nCte1.ToString() + "@" + comsUDP.nOp.ToString() + "@" + selectX.ToString() + "@" + selectY.ToString() + "@" + x.ToString() + "@" + y.ToString() + "@N"); while (!movida) { Thread.Sleep(10); } movida = false; return; } //Posicion de los Reyes if (tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyb.x = x; reyb.y = y; cr = true; } else if (!tablero[x, y].pza.color && tablero[x, y].pza.roll == "king") { reyn.x = x; reyn.y = y; cr = true; } if (tag == "r" || tipo == "AUTOMATICO") { tablero[selectX, selectY].colocaPieza(); tablero[x, y].colocaPieza(); } //--------------------- if (jaqueAlRey(turnoBlanca)) { if (turnoBlanca) { MessageBox.Show("El Rey Blanco está en Jaque", "Jaque"); } else { MessageBox.Show("El Rey Dorado está en Jaque", "Jaque"); } tablero[selectX, selectY].pza = tablero[x, y].pza; tablero[x, y].pza = aux; //Regresar posicion de los Reyes if (cr) { if (tablero[selectX, selectY].pza.color) { reyb.x = selectX; reyb.y = selectY; } else { reyn.x = selectX; reyn.y = selectY; } } tablero[selectX, selectY].colocaPieza(); tablero[x, y].colocaPieza(); } else { //Comprueba piezaz que alteren el enroque alteranEnroque(x, y); //Peon a Dama if (tablero[x, y].piezaBlanca() && tablero[x, y].pza.roll == "pawn" && y == 0) { tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon blanco a Reina", "Promocion"); } else if (tablero[x, y].piezaNegra() && tablero[x, y].pza.roll == "pawn" && y == 7) { tablero[x, y].pza.roll = "queen"; tablero[x, y].colocaPieza(); MessageBox.Show("Peon dorado a Reina", "Promocion"); } //Turno if (comsUDP.enroque) { comsUDP.enroque = false; } else { if (turnoBlanca) { turnoBlanca = false; } else { turnoBlanca = true; } } int i, j, auxX = selectX, auxY = selectY; iluminado = 0; amenaza = false; for (j = 0; j < 8; j++) { for (i = 0; i < 8; i++) { if (tablero[i, j].pza != null) { if (tablero[i, j].pza.color == turnoBlanca) { selectX = i; selectY = j; iluminaPosibles(i, j, "j"); } } } } if (jaqueAlRey(turnoBlanca)) { if (iluminado == 0) { terminado = true; tm = false; MessageBox.Show("Jaque Mate", "Jaque"); //this.Close(); } else { if (turnoBlanca) { MessageBox.Show("Jaque al Rey Blanco", "Jaque"); } else { MessageBox.Show("Jaque al Rey Dorado", "Jaque"); } } } else if (iluminado == 0) { MessageBox.Show("Ahogado", "Empate"); //this.Close(); } } } else { limpiaEnroque(); iluminaPosibles(selectX, selectY, ""); if (tag == "g") { enroque(x, y); } if (tag == "y") { MessageBox.Show("No es posible enrocar en esta direccion", "Enroque"); } } } //--------------------------------------------------Seleccionar la Pieza---------------------------------- else { if (!terminado) { if (tablero[x, y].pza != null) { if ((turnoBlanca && tablero[x, y].piezaBlanca()) || (!turnoBlanca && tablero[x, y].piezaNegra()) || tipo == "AUTOMATICO") { if ((tablero[x, y].piezaBlanca() && comsUDP.color == "blancas") || (tablero[x, y].piezaNegra() && comsUDP.color == "doradas") || tipo == "AUTOMATICO") { iluminado = 0; selectX = x; selectY = y; amenaza = false; if (tipo == "MANUAL") { iluminaPosibles(x, y, "l"); } else { seleccionada = true; } if (iluminado > 0) { seleccionada = true; //Comprueba condiciones para enroque compruebaEnroque(); } else if (amenaza) { if (turnoBlanca) { MessageBox.Show("Rey Blanco quedará en Jaque", "Jaque"); } else { MessageBox.Show("Rey Dorado quedará en Jaque", "Jaque"); } iluminaPosibles(x, y, ""); } } else { MessageBox.Show("No son tus piezas", "Color"); } } else { if (turnoBlanca) { MessageBox.Show("Es el turno de las Blancas", "Turno"); } else { MessageBox.Show("Es el turno de las Doradas", "Turno"); } } } } } }