/// <summary> /// Valida si dos territoios tienen el mismo amo o no /// </summary> /// <param name="t1">Territorio 1</param> /// <param name="t2">Territorio 2</param> /// <returns>Verdadero si comparten amo</returns> public bool validarConquistador(Territorio t1, Territorio t2) { if (t1.amo == t2.amo) { return(true); } return(false); }
public Movimiento() { descrip = ""; numMov = 1000; jugador = new Jugador(); territorio1 = new Territorio(); territorio2 = new Territorio(); }
/// <summary> /// Asigna un nuevo amo a un terrotorio cuando es conquistado /// </summary> /// <param name="p">Jugador que conquista</param> /// <param name="l">Territorio conquistado</param> public void asignarAmo(Jugador p, Territorio l) { foreach (Territorio item in territorios) { if (item == l) { if (item.conquistado) { item.amo.conquistados.Remove(l); } item.conquistado = true; item.amo = p; p.conquistados.Add(item); } } }
/// <summary> /// Boton para terminar el turno y que se ejecuten todos los /// movimientos guardados /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button6_Click(object sender, EventArgs e) { if (ClaseGeneral.nuevoJuego.player1.tropas > 0) { MessageBox.Show("Aun tiene tropas disponibles, debe utilizarlas"); } else { /*ACA HAY QUE PONER EL METODO O LO QUE SEA DONDE EL IA * HACE TODO SUS MOVIMIENTOS*/ /*Con la logica que implementada en el boton5 se guardan los movs * del IA para que se ejecuten de manera simultanea con los * guardados por el jugador en el metodo de abajo */ List <Territorio> AuxiliarIA = new List <Territorio>(); AuxiliarIA = ClaseGeneral.nuevoJuego.player2.conquistados; Random obj = new Random(); int opc1 = 10; opc1 = obj.Next(0, AuxiliarIA.Count - 1); Territorio evaluar; List <Territorio> evaluar2 = new List <Territorio>(); if (AuxiliarIA.Exists(x => (x.tropas < 3) && x.vecinos.Exists(y => y.amo.Equals(ClaseGeneral.nuevoJuego.player1)))) { evaluar = AuxiliarIA.Find(x => (x.tropas < 3) && x.vecinos.Exists(y => y.amo.Equals(ClaseGeneral.nuevoJuego.player1))); int minno = evaluar.vecinos.Min(x => x.tropas); Territorio vecino = evaluar.vecinos.Find(x => x.tropas == minno); if (vecino.amo == ClaseGeneral.nuevoJuego.player1) { int ataque_defensa = 3; ataque_defensa = obj.Next(0, 2); if (ataque_defensa == 0) { Movimiento nuevo = new Movimiento(); int trop = 0; nuevo.jugador = ClaseGeneral.nuevoJuego.player2; nuevo.territorio1 = ClaseGeneral.nuevoJuego.encontrarTerritorio(evaluar.nombre); if (vecino.tropas < evaluar.tropas) { trop = vecino.tropas + 1; } else { trop = evaluar.tropas; } nuevo.tropas = 5; //Actuliza las tropas que le quedan por asignar al IA ClaseGeneral.nuevoJuego.player2.tropas = 0; nuevo.descrip = "asignar"; ClaseGeneral.nuevoJuego.nuevoAsignar(ClaseGeneral.nuevoJuego.player2.nick, nuevo); if (trop != 0) { nuevo.tropas = trop; string t1 = evaluar.nombre; string t2 = vecino.nombre; if (ClaseGeneral.nuevoJuego.validarConquistador(ClaseGeneral.nuevoJuego.encontrarTerritorio(t1), ClaseGeneral.nuevoJuego.encontrarTerritorio(t2))) { nuevo.descrip = "mover"; } else { nuevo.descrip = "atacar"; } nuevo.territorio2 = ClaseGeneral.nuevoJuego.encontrarTerritorio(vecino.nombre); ClaseGeneral.nuevoJuego.nuevoMovimiento(ClaseGeneral.nuevoJuego.player2.nick, nuevo); } } } else { Movimiento nuevo = new Movimiento(); int trop = 0; nuevo.jugador = ClaseGeneral.nuevoJuego.player2; nuevo.territorio1 = ClaseGeneral.nuevoJuego.encontrarTerritorio(evaluar.nombre); if (vecino.tropas < evaluar.tropas) { trop = vecino.tropas + 1; } else { trop = evaluar.tropas; } nuevo.tropas = 5; //Actuliza las tropas que le quedan por asignar al IA ClaseGeneral.nuevoJuego.player2.tropas = 0; nuevo.descrip = "asignar"; ClaseGeneral.nuevoJuego.nuevoAsignar(ClaseGeneral.nuevoJuego.player2.nick, nuevo); if (trop != 0) { nuevo.tropas = trop; string t1 = evaluar.nombre; string t2 = vecino.nombre; if (ClaseGeneral.nuevoJuego.validarConquistador(ClaseGeneral.nuevoJuego.encontrarTerritorio(t1), ClaseGeneral.nuevoJuego.encontrarTerritorio(t2))) { nuevo.descrip = "mover"; } else { nuevo.descrip = "atacar"; } nuevo.territorio2 = ClaseGeneral.nuevoJuego.encontrarTerritorio(vecino.nombre); ClaseGeneral.nuevoJuego.nuevoMovimiento(ClaseGeneral.nuevoJuego.player2.nick, nuevo); } } } else { int minnoeva = AuxiliarIA.Min(x => x.tropas); evaluar = AuxiliarIA.Find(x => (x.tropas == minnoeva)); int maxno = AuxiliarIA.Max(x => x.tropas); evaluar2 = AuxiliarIA.FindAll(x => x.tropas <= maxno || (x.tropas >= maxno - 2) && (x.vecinos.Exists(y => y.tropas < 2 && (y.vecinos.Exists(c => c.tropas < 2))))); if (evaluar2.Count == 0) { evaluar2 = AuxiliarIA.FindAll(x => x.tropas == maxno || (x.tropas >= maxno - 2)); } Movimiento nuevo = new Movimiento(); int trop = 0; nuevo.jugador = ClaseGeneral.nuevoJuego.player2; nuevo.territorio1 = ClaseGeneral.nuevoJuego.encontrarTerritorio(evaluar.nombre); nuevo.tropas = 5; ClaseGeneral.nuevoJuego.player2.tropas = 0; nuevo.descrip = "asignar"; ClaseGeneral.nuevoJuego.nuevoAsignar(ClaseGeneral.nuevoJuego.player2.nick, nuevo); //Actuliza las tropas que le quedan por asignar al IA foreach (Territorio item in evaluar2) { int minno = item.vecinos.Min(x => x.tropas); Territorio vecino = item.vecinos.Find(x => x.tropas == minno); if (vecino.amo == ClaseGeneral.nuevoJuego.player1) { int ataque_defensa = 3; ataque_defensa = obj.Next(0, 2); if (ataque_defensa == 0) { nuevo.jugador = ClaseGeneral.nuevoJuego.player2; nuevo.territorio1 = ClaseGeneral.nuevoJuego.encontrarTerritorio(item.nombre); if (vecino.tropas < item.tropas) { trop = vecino.tropas + 1; } else { trop = item.tropas; } nuevo.tropas = 5; //Actuliza las tropas que le quedan por asignar al IA ClaseGeneral.nuevoJuego.player2.tropas = 0; if (trop != 0) { nuevo.tropas = trop; string t1 = item.nombre; string t2 = vecino.nombre; if (ClaseGeneral.nuevoJuego.validarConquistador(ClaseGeneral.nuevoJuego.encontrarTerritorio(t1), ClaseGeneral.nuevoJuego.encontrarTerritorio(t2))) { nuevo.descrip = "mover"; } else { nuevo.descrip = "atacar"; } nuevo.territorio2 = ClaseGeneral.nuevoJuego.encontrarTerritorio(vecino.nombre); ClaseGeneral.nuevoJuego.nuevoMovimiento(ClaseGeneral.nuevoJuego.player2.nick, nuevo); } } } else { nuevo.jugador = ClaseGeneral.nuevoJuego.player2; nuevo.territorio1 = ClaseGeneral.nuevoJuego.encontrarTerritorio(item.nombre); if (vecino.tropas < item.tropas) { trop = vecino.tropas + 1; } else { trop = item.tropas; } if (trop != 0) { nuevo.tropas = trop; string t1 = item.nombre; string t2 = vecino.nombre; if (ClaseGeneral.nuevoJuego.validarConquistador(ClaseGeneral.nuevoJuego.encontrarTerritorio(t1), ClaseGeneral.nuevoJuego.encontrarTerritorio(t2))) { nuevo.descrip = "mover"; } else { nuevo.descrip = "atacar"; } nuevo.territorio2 = ClaseGeneral.nuevoJuego.encontrarTerritorio(vecino.nombre); ClaseGeneral.nuevoJuego.nuevoMovimiento(ClaseGeneral.nuevoJuego.player2.nick, nuevo); } } } } radioButton1.Enabled = true; ClaseGeneral.nuevoJuego.EjecutarMovimientos(); cargarDatos(); if (ClaseGeneral.nuevoJuego.gameover()) { DialogResult boton = MessageBox.Show("GAME OVER", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning); if (boton == DialogResult.OK) { Form1 vent1 = new Form1(); vent1.Show(); this.Hide(); } } if (ClaseGeneral.nuevoJuego.ganar()) { DialogResult boton = MessageBox.Show("USTED HA GANADO!!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning); if (boton == DialogResult.OK) { Form1 vent1 = new Form1(); vent1.Show(); this.Hide(); } } } }