public Model(int seed, int m) { this.seed = seed; this.meses_a_simular = m; bitmonlandia = new Bitmonlandia(seed); tablero = bitmonlandia.GetMapa().GetTablero(); }
/* Reproduccion de Bitmons consiste en que si la pareja es compatible, se instancia dentro de la lista de Bitmons * un nuevo Bitmon de una especie aleatoria */ public override void Reproduccion(Bitmon pareja, int size, Bitmonlandia bitmonlandia) { if (pareja.GetNombre() == "Gofue" || pareja.GetNombre() == "Dorvalo" || pareja.GetNombre() == "Doti") { tiempo_De_Vida += (tiempo_De_Vida * 3) / 10; pareja.SetTiempoDeVida(pareja.GetTiempoDeVida() + (pareja.GetTiempoDeVida() * 3) / 10); int c1 = random.Next(size); // Asignacion de una coordenada aleatoria int c2 = random.Next(size); // Asignacion de una coordenada aleatoria //Veo si el bitmon caera fuera de los limites del mapa: int cont_de_escape = 0; while (bitmonlandia.GetMapa().GetTablero()[c1, c2, 1] != " " && bitmonlandia.GetMapa().GetTablero()[c1, c2, 2] != " ") { //condicion de escape if (cont_de_escape > 20) { return; } c1 = random.Next(size); // Asignacion de una coordenada aleatoria c2 = random.Next(size); // Asignacion de una coordenada aleatoria cont_de_escape++; } int[] tupla = { c1, c2 }; //Estadisticas int pa = random.Next(10, ((puntos_De_Ataque + pareja.GetPuntosDeAtaque()) / 2)); int pv = random.Next(10, ((puntos_De_Vida + pareja.GetPuntosDeVida()) / 2)); //Veamos la cantidad de hijos que han tenido ambos int hijos_padre = hijos; int hijos_pareja = pareja.GetHijos(); string especie_hijo = ""; int probabilidad = random.Next(0, 101); if (hijos_padre > hijos_pareja) { if (probabilidad <= 70) { especie_hijo = tipo_De_Bitmon; } else { especie_hijo = pareja.GetNombre(); } } else if (hijos_padre < hijos_pareja) { if (probabilidad <= 70) { especie_hijo = pareja.GetNombre(); } else { especie_hijo = tipo_De_Bitmon; } } else { if (probabilidad <= 50) { especie_hijo = pareja.GetNombre(); } else { especie_hijo = tipo_De_Bitmon; } } switch (especie_hijo) { case "Gofue": bitmonlandia.añadir_bitmon(new Gofue("Gofue", 15, pa, pv, tupla)); break; case "Dorvalo": bitmonlandia.añadir_bitmon(new Dorvalo("Dorvalo", 20, pa, pv, tupla)); break; case "Doti": bitmonlandia.añadir_bitmon(new Doti("Doti", 30, pa, pv, tupla)); break; } Console.WriteLine("Ha nacido un {0}", especie_hijo); hijos += 1; pareja.SetHijos(); } }
public void Simulacion() { registro = ""; //Verficamos si termino la simulacion if (mes_contador > meses_a_simular) { return; } if (turno % 2 == 0) { //ciclo for para que los bitmons se muevan for (int bit = 0; bit < bitmonlandia.GetLista().Count; bit++) { //vemos si es que el bitmon no esta muerto if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == false) { continue; } string especie = bitmonlandia.GetLista()[bit].GetNombre(); //Movimiento: if (especie != "Ent") { bitmonlandia.GetLista()[bit].Movimiento(bitmonlandia.GetMapa()); } } turno++; } else if (turno % 2 == 1) { //Se recorre la lista de bitmons para ver si hay bitmons en la misma casilla for (int bit = 0; bit < bitmonlandia.GetLista().Count; bit++) { // vemos si es que el bitmon no esta muerto if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == false) { continue; } //Selecciono el primer bitmon y veo su especie tambien: string especie = bitmonlandia.GetLista()[bit].GetNombre(); //Y recorro la lista en busca de una coincidencia for (int pareja = bit + 1; pareja < bitmonlandia.GetLista().Count; pareja++) { if (bitmonlandia.GetLista()[pareja].GetEstadoDeVida() == false) { continue; } if (bitmonlandia.GetLista()[bit].GetPosicion()[0] == bitmonlandia.GetLista()[pareja].GetPosicion()[0] && bitmonlandia.GetLista()[bit].GetPosicion()[1] == bitmonlandia.GetLista()[pareja].GetPosicion()[1 ]) { //Primero intentamos con pelea bitmonlandia.GetLista()[bit].Pelea(bitmonlandia.GetLista()[pareja]); registro += String.Format("{0} peleó con {1}\n", bitmonlandia.GetLista()[bit].GetNombre(), bitmonlandia.GetLista()[pareja].GetNombre()); //Si no funciona, significa que se llevan bien para reproducirse if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == true && bitmonlandia.GetLista()[pareja].GetEstadoDeVida() == true) { int prob = random.Next(101); if (prob <= 15) {//probabilidad del 15% de reproducirse registro = String.Format("{0} se reprodujo con {1}\n", bitmonlandia.GetLista()[bit].GetNombre(), bitmonlandia.GetLista()[pareja].GetNombre()); bitmonlandia.GetLista()[bit].Reproduccion(bitmonlandia.GetLista()[pareja], seed, bitmonlandia); } } } if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == false) { bitmonlandia.GetMapa().RemoveBitmon(bitmonlandia.GetLista()[bit].GetPosicion()[0], bitmonlandia.GetLista()[bit].GetPosicion()[1], bitmonlandia.GetLista()[bit].GetCelda()); bitmonlandia.GetLista()[bit].LimpiarCadaver(); } if (bitmonlandia.GetLista()[pareja].GetEstadoDeVida() == false) { bitmonlandia.GetMapa().RemoveBitmon(bitmonlandia.GetLista()[pareja].GetPosicion()[0], bitmonlandia.GetLista()[pareja].GetPosicion()[1], bitmonlandia.GetLista()[pareja].GetCelda()); bitmonlandia.GetLista()[pareja].LimpiarCadaver(); } } /*Comprobamos si sigue vivo este bitmon, para asi saber si moverlo y cambiar el terreno * si corresponde*/ if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == false) { continue; } //Ahora que sabemos que esta vivo cambiamos el terreno si corresponde //Transformar terreno: if (especie == "Gofue") { bitmonlandia.GetLista()[bit].Secar(bitmonlandia.GetMapa()); } else if (especie == "Taplan") { bitmonlandia.GetLista()[bit].Plantar(bitmonlandia.GetMapa()); } //Si sigue vivo despues de todo, hacerlo envejecer if (bitmonlandia.GetLista()[bit].GetEstadoDeVida() == true) { bitmonlandia.GetLista()[bit].Envejecer(bitmonlandia.GetMapa()); } } //Si han pasado 3 meses y algun Ent sigue vivo, spawnear uno if (mes_contador % 3 == 0 && mes_contador != 0) { bitmonlandia.PlantarEnt(seed); } mes_contador++; turno++; } }