コード例 #1
0
        private void Amor(Casilla c, Bitmon bitmon1, Bitmon bitmon2)
        {
            // crear nuevo bitmon siguiendo las reglas
            string tipo;
            double prob1;
            Bitmon bitmon;

            //con que probabilidad tendra la raza del progenitor 1 o 2
            if (bitmon1.Tipo != "Ent" && bitmon2.Tipo != "Ent")
            {
                if (bitmon1.getCantHijos() > bitmon2.getCantHijos())
                {
                    prob1 = 0.7;
                }
                else if (bitmon1.getCantHijos() < bitmon2.getCantHijos())
                {
                    prob1 = 0.3;
                }
                else
                {
                    prob1 = 0.5;
                }
                bitmon1.tenerHijo();
                bitmon2.tenerHijo();
                // de quien hereda la raza
                if (random.NextDouble() < prob1)
                {
                    tipo = bitmon1.Tipo;
                }
                else
                {
                    tipo = bitmon2.Tipo;
                }

                if (tipo == "Gofue")
                {
                    bitmon = new Gofue();
                }
                else if (tipo == "Dorvalo")
                {
                    bitmon = new Dorvalo();
                }
                else if (tipo == "Taplan")
                {
                    bitmon = new Taplan();
                }
                else if (tipo == "Ent")
                {
                    bitmon = new Ent();
                }
                else if (tipo == "Wetar")
                {
                    bitmon = new Wetar();
                }
                else
                {
                    bitmon = new Doti();
                }

                if (bitmon1.Tipo == bitmon2.Tipo)//los purasangre son mas fuertes
                {
                    bitmon.boostataque(5); bitmon.boostvida(18);
                }
                // agregar bitmon al mapelse if (tipo == "Gofue")a si es posible
                // todo lo que al nacer aparece en un terreno ocupado (2 bitmons) muere al instante (el fuerte se aprovecha del debil!)
                bool pocisionado      = false;
                bool TerrenoValido    = true;
                int  potencialCasilla = random.Next((cols * rows));
                int  cont             = 0;
                foreach (Casilla casilla in MapLayout.Controls)
                {
                    if (cont == potencialCasilla)
                    {
                        if ((bitmon.Tipo == "Wetar" && casilla.Tipo != "agua"))
                        {
                            TerrenoValido = false;
                        }

                        else
                        {
                            pocisionado = casilla.AddOcupante(bitmon);
                        }

                        if (pocisionado && TerrenoValido)
                        {
                            bitmon.SizeMode = PictureBoxSizeMode.Zoom;
                            bitmon.Size     = new Size((int)(600 / cols / 3), (int)(600 / cols / 3));

                            bitmons_alive.Add(bitmon);
                            bitmon.setpocision(cont);
                            if (bitmon.Tipo == "Gofue")
                            {
                                gofue_nacidos_mes++;
                            }
                            if (bitmon.Tipo == "Taplan")
                            {
                                taplan_nacidos_mes++;
                            }
                            if (bitmon.Tipo == "Dorvalo")
                            {
                                dorvalo_nacidos_mes++;
                            }
                            if (bitmon.Tipo == "Wetar")
                            {
                                wetar_nacidos_mes++;
                            }
                            if (bitmon.Tipo == "Dorvalo")
                            {
                                dorvalo_nacidos_mes++;
                            }
                        }
                        else
                        {
                            bithalla.Add(bitmon);
                        }
                        break;
                    }

                    ++cont;
                }
            }
        }
コード例 #2
0
        public MainForm()

        /* Este form equivale a la clase que se hace cargo de
         * armar el tablero, ubicar y mover a los bitmons.
         */
        {
            InitializeComponent();

            #region Setup
            Settings settings = new Settings();
            if (settings.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("Iniciando simulacion");
            }


            // Tableros de más de 400 casillas empiezan a tener problemas al renderizarse.
            // El máximo recomendado es 20 para ambos parametros.
            rows = settings.filas;
            cols = settings.columnas;

            // Se define la probabilidad de cada tipo de terreno.
            // El 100% sería la suma de estos valores, puede ser 80 o 130 por ejemplo.
            int pasto_prob  = (int)(settings.pasto * 100);
            int volcan_prob = (int)(settings.volcan * 100);
            int agua_prob   = (int)(settings.agua * 100);
            int arena_prob  = (int)(settings.arena * 100);
            int nieve_prob  = (int)(settings.nieve * 100);
            // Tipos de terrenos
            string[] posibles_tipos = { "nieve", "agua", "pasto", "volcan", "arena" };

            // Se define la cantidad de bitmons iniciales
            int bitmons_initial_count = settings.bitmons;
            label_bitmons_vivos.Text   = $"Bitmons vivos: {bitmons_initial_count}";
            label_bitmons_muertos.Text = $"Bitmons muertos: {bithalla.Count}";

            // Tipos de bitmons
            string[] bitmonTypes = { "Gofue", "Wetar", "Taplan", "Dorvalo", "Ent", "Doti" };

            if (settings.velocidad == 0)
            {
                settings.velocidad = 1000;
            }
            timer_mes.Interval         = (int)(settings.velocidad); // duracion en milisegundos de cada mes
            meses_restantes            = settings.meses;            // cantidad de meses a simular
            label_meses_restantes.Text = $"Meses restantes: {meses_restantes}";
            label_mes_actual.Text      = "Mes actual: -";


            MapLayout.Controls.Clear();
            MapLayout.ColumnCount = cols;
            MapLayout.RowCount    = rows;
            MapLayout.Dock        = DockStyle.None;
            MapLayout.Padding     = new Padding(1, 1, 1, 1);


            // A continuación se arma el tablero
            // Primero se colocan los tipos de terreno
            for (int r = 0; r < rows; r++)
            {
                for (int c = 0; c < cols; c++)
                {
                    Casilla cas  = new Casilla();
                    int     dice = random.Next(volcan_prob + nieve_prob + agua_prob + pasto_prob + arena_prob);
                    if (dice < volcan_prob)
                    {
                        cas.BackgroundImage = BitmonLand.Properties.Resources.Volcan1;
                        cas.Tipo            = "volcan";
                    }
                    else if (dice < volcan_prob + agua_prob)
                    {
                        cas.BackgroundImage = BitmonLand.Properties.Resources.Agua1;
                        cas.Tipo            = "agua";
                    }
                    else if (dice < volcan_prob + agua_prob + arena_prob)
                    {
                        cas.BackgroundImage = BitmonLand.Properties.Resources.Arena1;
                        cas.Tipo            = "arena";
                    }
                    else if (dice < volcan_prob + arena_prob + agua_prob + nieve_prob)
                    {
                        cas.BackgroundImage = BitmonLand.Properties.Resources.Nieve1;
                        cas.Tipo            = "nieve";
                    }
                    else
                    {
                        cas.BackgroundImage = BitmonLand.Properties.Resources.Pasto1;
                        cas.Tipo            = "pasto";
                    }
                    cas.Margin = new Padding(0, 0, 0, 0);
                    cas.Dock   = DockStyle.Fill;

                    MapLayout.Controls.Add(cas, c, r);
                }
            }

            //definir posiciones de los bitmons iniciales, sin repetir posicion inicial
            List <int> posiciones_iniciales = new List <int>();
            for (int j = 0; j < bitmons_initial_count; j++)
            {
                int r_p = random.Next(cols * rows);
                while (posiciones_iniciales.Contains(r_p))
                {
                    r_p = random.Next(cols * rows);
                }
                posiciones_iniciales.Add(r_p);
            }

            // Luego se colocan los bitmons iniciales
            int contador = 0;
            foreach (Casilla c in MapLayout.Controls)
            {
                if (posiciones_iniciales.Contains(contador))
                {
                    string t = bitmonTypes.ElementAt(random.Next(bitmonTypes.Count()));
                    Bitmon b;
                    if (t == "Gofue")
                    {
                        b = new Gofue();
                    }
                    else if (t == "Wetar")
                    {
                        if (c.Tipo == "agua")
                        {
                            b = new Wetar();
                        }
                        else
                        {
                            b = new Gofue();
                            t = "Gofue";
                        }
                    }
                    else if (t == "Taplan")
                    {
                        b = new Taplan();
                    }
                    else if (t == "Dorvalo")
                    {
                        b = new Dorvalo();
                    }
                    else if (t == "Ent")
                    {
                        if (c.Tipo != "nieve" && c.Tipo != "volcan")
                        {
                            b = new Ent();
                        }
                        else
                        {
                            b = new Dorvalo();
                            t = "Dorvalo";
                        }
                    }
                    else
                    {
                        b = new Doti();
                    }
                    b.Tipo     = t;
                    b.Posicion = contador;
                    b.SizeMode = PictureBoxSizeMode.Zoom;
                    b.Size     = new Size((int)(600 / cols / 3), (int)(600 / cols / 3));
                    c.AddOcupante(b);
                    bitmons_alive.Add(b);
                }
                contador++;
            }
            #endregion

            timer_mes.Start();
        }