private void button1_Click(object sender, EventArgs e) { if (contador <= meses) { if (contador == meses) { button1.Text = "Pasar a resultados"; } label1.Text = $"Mes {contador}"; if (contador % 3 == 0 && contador != 0 && bitmons.RevisarMapa()) { Bitmon bitmon = new Bitmon("Ent"); while (true) { int fila = rnd.Next(0, columnas); int colun = rnd.Next(0, filas); if (bitmons.bitmons_simulacion[colun, fila].Count() < 2) { bitmons.bitmons_simulacion[colun, fila].Add(bitmon); bitmons.bitmons_s.Add(bitmon); break; } else { continue; } } } for (int i = 0; i < filas; i++) { for (int j = 0; j < columnas; j++) { if (bitmons.bitmons_simulacion[i, j].Count() == 2) { Bitmon b1 = bitmons.bitmons_simulacion[i, j][0]; Bitmon b2 = bitmons.bitmons_simulacion[i, j][1]; if (b1.rivalidad.Contains(b2.especie)) { bitmons.Peleas(b1, b2); } else { bitmons.Relaciones(b1, b2, filas, columnas); } } } } controlador.Entorno(mapa, bitmons); bitmons.Bithalla(); bitmons.movimientos(mapa); TableLayoutPanelCellPosition posicion; foreach (Button boton in MapaSimulacion.Controls) { posicion = MapaSimulacion.GetPositionFromControl(boton); int i = posicion.Row; int j = posicion.Column; string texto = ""; foreach (Bitmon bitmon in bitmons.bitmons_simulacion[i, j]) { texto += $"{bitmon.especie}\n"; } boton.Text = texto; boton.Tag = mapa.Mterrenos[i, j].tipo; boton.BackColor = mapa.MostrarMapa(mapa.Mterrenos[i, j].tipo); } contador += 1; } else { Resultados resultados = new Resultados(bitmons); this.Hide(); resultados.ShowDialog(); this.Close(); } }
//retorna el multiplicador del bitmon public double Atacar(Bitmon bitmon1, Bitmon bitmon2) { double multiplicador = 1; //multiplicador varia por especie if (bitmon1.especie == "Taplan") { if (bitmon2.especie == "Wetar") { multiplicador = 1.5; } if (bitmon2.especie == "Gofue") { multiplicador = 1.15; } } if (bitmon1.especie == "Wetar") { if (bitmon2.especie == "Taplan") { multiplicador = 1.1; } if (bitmon2.especie == "Gofue") { multiplicador = 2; } if (bitmon2.especie == "Dorvalo") { multiplicador = 0.2; } } if (bitmon1.especie == "Gofue") { if (bitmon2.especie == "Taplan") { multiplicador = 2; } if (bitmon2.especie == "Wetar") { multiplicador = 0.8; } } if (bitmon1.especie == "Dorvalo") { if (bitmon2.especie == "Wetar") { multiplicador = 3; } if (bitmon2.especie == "Ent") { multiplicador = 1; } } if (bitmon1.especie == "Doti") { if (bitmon2.especie == "Ent") { multiplicador = 2.2; } } if (bitmon1.especie == "Ent") { if (bitmon1.especie == "Doti") { multiplicador = 1; } if (bitmon2.especie == "Dorvalo") { multiplicador = 1.3; } } else { multiplicador = 1; } return(multiplicador); }
//relacion de reproduccion entre bitmons //luego de reproducirse recuperan el 30% de tiempo de vida public void Relaciones(Bitmon bitmon1, Bitmon bitmon2, int filas, int columnas) { if (RevisarMapa()) { //probabilidad de la especie del hijo int IP_hijo = rnd.Next(0, 101); //para calcular la probabilidad que sea de un padre o el otro int total = bitmon1.Hijos + bitmon2.Hijos + 2; int IP_bit1 = ((bitmon1.Hijos + 1) * 100) / total; int IP_bit2 = ((bitmon2.Hijos + 1) * 100) / total; string hijo; //probabilidad de ser bitmon 1 mayor a la de bitmon 2 if (IP_bit1 >= IP_bit2) { if (IP_bit1 <= IP_hijo) { //es de la clase bitmon 2 hijo = bitmon2.especie; bitmon2.Hijos += 1; } else { //es de la clase bitmon 1 hijo = bitmon1.especie; bitmon1.Hijos += 1; } } //probabilidad de ser bitmon 2 mayor a la de bitmon 1 else { if (IP_bit2 <= IP_hijo) { //es de la clase bitmon 1 hijo = bitmon1.especie; bitmon1.Hijos += 1; } else { //es de la clase bitmon 2 hijo = bitmon2.especie; bitmon2.Hijos += 1; } } bitmon1.TiempoVida += (bitmon1.TiempoVida) * (30 / 100); bitmon2.TiempoVida += (bitmon2.TiempoVida) * (30 / 100); Bitmon bitmon_hijo = new Bitmon(hijo); bool a = true; while (a == true) { int fila = rnd.Next(0, filas - 1); int colun = rnd.Next(0, columnas - 1); if (bitmons_simulacion[fila, colun].Count <= 2) { bitmons_simulacion[colun, fila].Add(bitmon_hijo); bitmons_s.Add(bitmon_hijo); a = false; } else { continue; } } } }
//configuracion inicial del mapa public void Spawn(Mapa mapa) { int filas = mapa.Mterrenos.GetUpperBound(0) + 1; int columnas = mapa.Mterrenos.GetUpperBound(1) + 1; //creacion de arrays para los bitmons y terrenos del usuario bitmons_simulacion = new List <Bitmon> [filas, columnas]; for (int i = 0; i < filas; i++) { for (int j = 0; j < columnas; j++) { bitmons_simulacion[i, j] = new List <Bitmon> { }; } } while (true) { int f; int c; int t; Console.WriteLine("Generando mapa \n1.-Ingresar Bitmon \n2.-Continuar"); if (Console.ReadLine() == "1") { Console.WriteLine("Generando Bitmons, escoja fila y columna donde crear Bitmon:"); Console.Write("Fila: "); string fs = Console.ReadLine(); int.TryParse(fs, out f); while (f.ToString() != fs || f < 1 || f > filas) { Console.Write("Numero de fila fuera de rango \nFila: "); fs = Console.ReadLine(); int.TryParse(fs, out f); } Console.Write("Columna: "); string cs = Console.ReadLine(); int.TryParse(cs, out c); while (c.ToString() != cs || c < 1 || c > columnas) { Console.Write("Numero de columna fuera de rango \nColumna: "); cs = Console.ReadLine(); int.TryParse(cs, out c); } List <string> tipos = new List <string> { "Taplan", "Wetar", "Gofue", "Dorvalo", "Doti", "Ent" }; Console.WriteLine("Introduzca la clase de bitmon que desea:"); Console.WriteLine("1.-Taplan \n2.-Wetar \n3.-Gofue \n4.-Dorvalo \n5.-Doti \n6.-Ent"); string ts = Console.ReadLine(); int.TryParse(ts, out t); while (t.ToString() != ts || t < 1 || t > 6) { Console.WriteLine("Introduzca clase de Bitmon valida:"); Console.WriteLine("1.-Taplan \n2.-Wetar \n3.-Gofue \n4.-Dorvalo \n5.-Doti \n6.-Ent"); ts = Console.ReadLine(); int.TryParse(ts, out t); } if ((mapa.Mterrenos[f - 1, c - 1].tipo != "Agua" && tipos[t - 1] == "Wetar") || bitmons_simulacion[f - 1, c - 1].Count() >= 2) { Console.WriteLine("No se puede introducir el bitmon"); } else { Bitmon b = new Bitmon(tipos[t - 1]); bitmons_simulacion[f - 1, c - 1].Add(b); bitmons_s.Add(b); } } else { break; } } }
//relacion de pelea entre bitmons //relacion de pelea entre bitmons public void Peleas(Bitmon bitmon1, Bitmon bitmon2) { //bitmon ataque simultaneo //daño = puntos de ataque*multiplicador //cada bitmon descuenta de sus puntos de vida el daño bitmon2.PuntosDeVida -= bitmon2.PuntosDeVida * (bitmon1.PuntosDeAtaque * Convert.ToInt32(bitmon2.Atacar(bitmon1, bitmon2))); bitmon1.PuntosDeVida -= bitmon1.PuntosDeVida * (bitmon2.PuntosDeAtaque * Convert.ToInt32(bitmon1.Atacar(bitmon1, bitmon2))); //pueden ambos irse a bithalla despues if (bitmon1.PuntosDeVida == 0 && bitmon2.PuntosDeVida == 0) { bithalla.Add(bitmon1); bithalla.Add(bitmon2); //elimina el bitmon de la lista de la simulacion bitmons_s.Remove(bitmon1); bitmons_s.Remove(bitmon2); //elimina el bitmon del array de la simulacion for (int i = 0; i <= bitmons_simulacion.GetUpperBound(0); i++) { for (int j = 0; j <= bitmons_simulacion.GetUpperBound(1); j++) { if (bitmons_simulacion[i, j].Contains(bitmon1) && bitmons_simulacion[i, j].Contains(bitmon2)) { bitmons_simulacion[i, j].Remove(bitmon1); bitmons_simulacion[i, j].Remove(bitmon2); } else { continue; } } } } //si uno muere el otro recupera los puntos de vida que perdio else if (bitmon1.PuntosDeVida <= 0) { bithalla.Add(bitmon1); //elimina el bitmon de la lista de la simulacion bitmons_s.Remove(bitmon1); //elimina el bitmon del array de la simulacion for (int i = 0; i <= bitmons_simulacion.GetUpperBound(0); i++) { for (int j = 0; j <= bitmons_simulacion.GetUpperBound(1); j++) { if (bitmons_simulacion[i, j].Contains(bitmon1)) { bitmons_simulacion[i, j].Remove(bitmon1); } else { continue; } } } bitmon2.PuntosDeVida += bitmon2.PuntosDeVida * (bitmon1.PuntosDeAtaque * Convert.ToInt32(bitmon2.Atacar(bitmon1, bitmon2))); } else if (bitmon2.PuntosDeVida <= 0) { bithalla.Add(bitmon2); bitmon1.PuntosDeVida += bitmon1.PuntosDeVida * (bitmon2.PuntosDeAtaque * Convert.ToInt32(bitmon1.Atacar(bitmon1, bitmon2))); //elimina el bitmon de la lista de la simulacion bitmons_s.Remove(bitmon2); //elimina el bitmon del array de la simulacion for (int i = 0; i <= bitmons_simulacion.GetUpperBound(0); i++) { for (int j = 0; j <= bitmons_simulacion.GetUpperBound(1); j++) { if (bitmons_simulacion[i, j].Contains(bitmon2)) { bitmons_simulacion[i, j].Remove(bitmon2); } else { continue; } } } } }