Exemplo n.º 1
0
        static public Tuple <int, int> RandomiVapaaRuutu(Kartta k)
        {
            int x, y;

            do
            {
                x = Vihollinen.Rnd.Next(0, KARTTALEVEYS - 1);
                y = Vihollinen.Rnd.Next(0, KARTTAKORKEUS - 1);
            } while (!k.Ruudut[y, x].TekoälyKäveltävä);

            return(new Tuple <int, int>(y, x));
        }
Exemplo n.º 2
0
        static public Kartta LuoKartta()
        {
            Kartta k   = new Kartta();
            Random rnd = new Random();


            SUUNTA?       sisään = null, ulos = null;
            List <SUUNTA> sallitutUlosmenot = new List <SUUNTA>()
            {
                SUUNTA.YLÄ, SUUNTA.ALA, SUUNTA.VASEN, SUUNTA.OIKEA
            };

            if (k.Id != 0)
            {
                switch (Moottori.Kartat[k.Id - 1].Ulosmenosuunta)
                {
                case SUUNTA.YLÄ:
                    sisään = SUUNTA.ALA;
                    sallitutUlosmenot.Remove(SUUNTA.ALA);
                    break;

                case SUUNTA.ALA:
                    sisään = SUUNTA.YLÄ;
                    sallitutUlosmenot.Remove(SUUNTA.YLÄ);
                    break;

                case SUUNTA.VASEN:
                    sisään = SUUNTA.OIKEA;
                    sallitutUlosmenot.Remove(SUUNTA.OIKEA);
                    break;

                case SUUNTA.OIKEA:
                    sisään = SUUNTA.VASEN;
                    sallitutUlosmenot.Remove(SUUNTA.VASEN);
                    break;
                }
            }
            int ulosInt = rnd.Next(0, sallitutUlosmenot.Count - 1);

            ulos = sallitutUlosmenot[ulosInt];

            for (int y = 0; y < KARTTAKORKEUS; y++)
            {
                // Käydään rivit
                for (int x = 0; x < KARTTALEVEYS; x++)
                {
                    // Käydään sarakkeet

                    Karttaruutu r = new Karttaruutu();

                    r.Rivi   = y;
                    r.Sarake = x;


                    if ((y == 0 || y == KARTTAKORKEUS - 1) || (x == 0 || x == KARTTALEVEYS - 1))
                    {
                        r.Tyyppi = Karttaruutu.Ruututyypit.SEINÄ;
                        r.Väri   = ConsoleColor.DarkGray;
                        r.Merkki = '#';
                    }
                    else
                    {
                        if (rnd.Next(0, 100) <= KARTTAGENERAATTORI_PUUTIHEYS)
                        {
                            r.Tyyppi = Karttaruutu.Ruututyypit.PUU;
                            r.Merkki = '&';
                            r.Väri   = ConsoleColor.DarkGreen;
                        }
                        else
                        {
                            r.Tyyppi = Karttaruutu.Ruututyypit.TYHJÄ;
                            r.Merkki = '░';
                            r.Väri   = ConsoleColor.DarkGray;
                        }
                    }
                    k.Ruudut[y, x] = r;
                }
            } // Tähän loppuu ruutujen generointi

            // Päätellään, mille seinälle ulos- ja sisääntulot pitää piirtää
            Karttaruutu sisäänmenoruutu = new Karttaruutu()
            {
                Tyyppi = Karttaruutu.Ruututyypit.SISÄÄN, Merkki = '<', Väri = ConsoleColor.DarkMagenta
            };
            Karttaruutu ulosmenoruutu = new Karttaruutu()
            {
                Tyyppi = Karttaruutu.Ruututyypit.ULOS, Merkki = '>', Väri = ConsoleColor.DarkMagenta
            };
            int X = (ulos == SUUNTA.VASEN || ulos == SUUNTA.OIKEA)
                    ? (ulos == SUUNTA.VASEN) ? 0 : Kartta.KARTTALEVEYS - 1
                    : rnd.Next(1, KARTTALEVEYS - 1);
            int Y = (ulos == SUUNTA.YLÄ || ulos == SUUNTA.ALA)
                    ? (ulos == SUUNTA.YLÄ) ? 0 : Kartta.KARTTAKORKEUS - 1
                    : rnd.Next(1, KARTTAKORKEUS - 1);

            // Piirretään ulosmenoruutu kartan päälle
            ulosmenoruutu.Rivi   = Y;
            ulosmenoruutu.Sarake = X;
            k.Ruudut[Y, X]       = ulosmenoruutu;
            k.Ulosmenoruutu      = ulosmenoruutu;
            // Piirretään sisäänmenoruutu kartan päälle
            if (sisään != null)
            {
                X = (sisään == SUUNTA.VASEN || sisään == SUUNTA.OIKEA)
                        ? (sisään == SUUNTA.VASEN) ? 0 : Kartta.KARTTALEVEYS - 1
                        : rnd.Next(1, KARTTALEVEYS - 1);
                Y = (sisään == SUUNTA.YLÄ || sisään == SUUNTA.ALA)
                        ? (sisään == SUUNTA.YLÄ) ? 0 : Kartta.KARTTAKORKEUS - 1
                        : rnd.Next(1, KARTTAKORKEUS - 1);
                sisäänmenoruutu.Rivi   = Y;
                sisäänmenoruutu.Sarake = X;
                k.Ruudut[Y, X]         = sisäänmenoruutu;
                k.Sisääntuloruutu      = sisäänmenoruutu;
            }
            int vihujenMaara = Math.Min(6, (int)Math.Ceiling((decimal)Moottori.VaikeusKerroin * Vihollinen.Rnd.Next(2, 5)));

            for (int i = 0; i < vihujenMaara; i++)
            {
                VihollisMalli malli = Moottori.VihollisMallit[Vihollinen.Rnd.Next(0, Moottori.VihollisMallit.Count)];
                Vihollinen    vihu  = Vihollinen.Generoi(malli);
                vihu.HpMuuttunut += Konsoli.Hahmoruutu.VihollisenHPMuuttunut;
                Tuple <int, int> YX = RandomiVapaaRuutu(k);
                vihu.Rivi   = YX.Item1;
                vihu.Sarake = YX.Item2;
                k.Entiteetit.Add(vihu);
            }

            k.Ulosmenosuunta = ulos;
            if (Moottori.Pelaaja.Nimi.ToLower() == "maija")
            {
                // Spawnataan mahtikirves
                if (k.Id == 0)
                {
                    Tuple <int, int> YX     = RandomiVapaaRuutu(k);
                    Tavara           kirves = new Tavara("Mahtikirves")
                    {
                        Merkki = '$', Väri = ConsoleColor.DarkMagenta, Rivi = YX.Item1, Sarake = YX.Item2, Poimittava = true, PlusVoima = 3, PlusNopeus = 2
                    };
                    k.Entiteetit.Add(kirves);
                    k.Ruudut[YX.Item1, YX.Item2].Entiteetti = kirves;
                }
                // Spawnataan jäniksenkäpälä
                if (k.Id == 1)
                {
                    Tuple <int, int> YX = RandomiVapaaRuutu(k);
                    Tavara           jk = new Tavara("Jäniksenkäpälä")
                    {
                        Merkki = '*', Väri = ConsoleColor.DarkYellow, Rivi = YX.Item1, Sarake = YX.Item2, Poimittava = true, PlusOnnekkuus = 5
                    };
                    k.Entiteetit.Add(jk);
                    k.Ruudut[YX.Item1, YX.Item2].Entiteetti = jk;
                }
                // Spawnataan jäniksenkäpälä
                if (k.Id == 2)
                {
                    Tuple <int, int> YX = RandomiVapaaRuutu(k);
                    Tavara           dt = new Tavara("Demotavara")
                    {
                        Merkki = 'D', Väri = ConsoleColor.DarkMagenta, Rivi = YX.Item1, Sarake = YX.Item2, Poimittava = true, PlusOnnekkuus = 5
                    };
                    k.Entiteetit.Add(dt);
                    k.Ruudut[YX.Item1, YX.Item2].Entiteetti = dt;
                }
            }

            //Varataan karttaruudut vesilähteille
            for (int i = 0; i < karttageneraattori_vesilähteet; i++)
            {
                Tuple <int, int> YX   = RandomiVapaaRuutu(k);
                Tavara           vesi = new Tavara("vesi")
                {
                    Merkki = 'V', Väri = ConsoleColor.Blue, Rivi = YX.Item1, Sarake = YX.Item2
                };
                k.Entiteetit.Add(vesi);
                k.Ruudut[YX.Item1, YX.Item2].Entiteetti = vesi;
            }

            //Varataan karttaruudut taikajuomalle
            if (k.Id % 5 == 0 && k.Id != 0)
            {
                for (int i = 0; i < karttageneraattori_taikajuomat; i++)
                {
                    Tuple <int, int> YX         = RandomiVapaaRuutu(k);
                    Tavara           taikajuoma = new Tavara("taikajuoma")
                    {
                        Merkki = '\u2665', Väri = ConsoleColor.DarkRed, Rivi = YX.Item1, Sarake = YX.Item2
                    };
                    k.Entiteetit.Add(taikajuoma);
                    k.Ruudut[YX.Item1, YX.Item2].Entiteetti = taikajuoma;
                    Konsoli.Viestiloki.Lisää("\u2665 \u2665 \u2665 HP-boosti näköpiirissä! \u2665 \u2665 \u2665", ConsoleColor.DarkRed);
                }
            }

            // Määritetään pelastuksen sijainti
            if (k.Id >= minPelastusKartanNumero)
            {
                Random r          = new Random();
                int    randomLuku = r.Next(1, 100);
                if (randomLuku < pelastusTodennäköisyysProsentti || Moottori.Pelaaja.Nimi.ToLower() == "meo" && k.Id == 4)
                {
                    Tuple <int, int> YX = RandomiVapaaRuutu(k);
                    k.Ruudut[YX.Item1, YX.Item2].Tyyppi = Karttaruutu.Ruututyypit.PELASTUS;
                    k.Ruudut[YX.Item1, YX.Item2].Väri   = ConsoleColor.DarkMagenta;
                    k.Ruudut[YX.Item1, YX.Item2].Merkki = '\u25B2';
                    Konsoli.Viestiloki.Lisää("\u25B2 \u25B2 \u25B2 PELASTUS NÄKÖPIIRISSÄ! PELASTUS NÄKÖPIIRISSÄ! \u25B2 \u25B2 \u25B2", ConsoleColor.DarkMagenta);
                    Konsoli.Viestiloki.Lisää("\u25B2 \u25B2 \u25B2 PELASTUS NÄKÖPIIRISSÄ! PELASTUS NÄKÖPIIRISSÄ! \u25B2 \u25B2 \u25B2", ConsoleColor.DarkMagenta);
                }
            }

            return(k);
        }
Exemplo n.º 3
0
 public static void PiirräKartta(Kartta k)
 {
     Console.ResetColor();
     k.Piirrä();
 }