/// <summary> /// Metodo para eliminar los movimientos repetidos en una lista de movimientos /// </summary> /// <param name="aux">Lista de movimientos</param> public void eliminarRepetidos(List <Movimiento> aux) { Movimiento temp = new Movimiento(); int sum = 0; //Ciclo para recorrer la lista for (int i = 0; i < aux.ToArray().Length; i++) { if (aux.ToArray()[i] != null) { temp = aux.ToArray()[i]; //Ciclo para llevar la cuenta de cuantas veces aparece el movimiento en la lista for (int j = 0; j < aux.ToArray().Length; j++) { if (aux.ToArray()[j] == temp) { sum++; } } //Valida que solo este una vez si no, elimina if (sum > 1) { //Si es mayor el ciclo elimina todos los iguales for (int j = 0; j < aux.ToArray().Length; j++) { if (aux.ToArray()[j] == temp) { aux.Remove(temp); } } //Luego de eliminarlos todo inserta solo uno //aux.Add(temp); } sum = 0; } } }
/// <summary> /// Metodo para los movimientos que son de asignar tropas porque estos /// se ejecutan de forma directa /// </summary> /// <param name="player">Nombre del jugador que lo realiza</param> /// <param name="mov">Movimiento</param> public void nuevoAsignar(string player, Movimiento mov) { mov.territorio1.tropas += mov.tropas; mov.territorio1.auxTropas = mov.territorio1.tropas; moves.Add(mov); }
/// <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(); } } } }