Пример #1
0
 /// <summary>
 /// Vastaa pelimekaniikan käynnistämisestä uuden tason alkaessa.
 /// </summary>
 private void KaynnistaKello()
 {
     tuomionKello.Play();
     peliAjastin.Start();
     Kayttoliittyma.TahtainPaalle();
     Console.WriteLine("Pelikello käynnistetty");
 }
Пример #2
0
        /// <summary>
        /// Aloittaa uuden pelin. Kutsuu pelin alustavia metodeita, lisää pelioliot ja käynnistää pelimekaniikkaa ohjaavan ajastimen.
        /// </summary>
        private void AloitaUusiPeli()
        {
            ClearAll();

            LataaPelinTausta();

            AlustaPelinMuuttujat();

            LisaaAse();

            LisaaViholliset();

            LuoKuuntelijat();

            Kayttoliittyma = new Kayttoliittyma(this);

            Kayttoliittyma.TahtainPois();

            Kayttoliittyma.NaytaViesti("Peli alkaa...", 3);
            tiktak4s.Play();

            Timer.SingleShot(1, delegate
            {
                Taso.Value = 1;
                Timer.SingleShot(3, KaynnistaKello);
            });
        }
Пример #3
0
        /// <summary>
        /// Vastaa toiminnoista, jotka aktivoituvat vihollisen ampuessa pelaajaa.
        /// Reagoi vihollisolion VihollinenOsui-tapahtumaan.
        /// </summary>
        public void KasitteleOsumaPelaajaan()
        {
            if (debugKuolematon)
            {
                return;
            }

            Hitpoints.Value -= 1;

            //Luodaan efekti, jossa ruutu välähtää hetkellisesti punaisena pelaajan saadessa osuman. Efektin intensiteetti riippuu pelaajan osumapisteiden määrästä.
            GameObject osumaOverlay = new GameObject(1024, 768);

            Add(osumaOverlay, 3);

            if (Hitpoints > 3)
            {
                osumaOverlay.Image = osumaOverlayKuvat[2];
                Timer.SingleShot(0.05, delegate { osumaOverlay.Image = osumaOverlayKuvat[1]; });
                Timer.SingleShot(0.1, delegate { Remove(osumaOverlay); });
                return;
            }

            if (Hitpoints > 0)
            {
                osumaOverlay.Image = osumaOverlayKuvat[3];
                Timer.SingleShot(0.05, delegate { osumaOverlay.Image = osumaOverlayKuvat[2]; });
                Timer.SingleShot(0.1, delegate { osumaOverlay.Image = osumaOverlayKuvat[1]; });
                Timer.SingleShot(0.15, delegate { Remove(osumaOverlay); });
                return;
            }

            //Osumapisteiden loppuessa pysäytetään kello ja päätetään peli.
            if (Hitpoints == 0)
            {
                PysaytaKello();

                osumaOverlay.Image = osumaOverlayKuvat[5];
                Timer.SingleShot(0.2, delegate { osumaOverlay.Image = osumaOverlayKuvat[4]; });
                Timer.SingleShot(0.4, delegate { osumaOverlay.Image = osumaOverlayKuvat[3]; });
                Timer.SingleShot(0.6, delegate { osumaOverlay.Image = osumaOverlayKuvat[2]; });
                Timer.SingleShot(0.8, delegate { osumaOverlay.Image = osumaOverlayKuvat[1]; });

                Console.WriteLine("GAME OVER!");
                Kayttoliittyma.NaytaViesti("Peli ohi!", 5);

                Timer.SingleShot(5, PeliPaattyi);
            }
        }
Пример #4
0
        private void DebugSeuraavaTaso()
        {
            if (!debugmoodi)
            {
                return;
            }
            PysaytaKello();

            vihollisetHengissa = new List <Vihollinen>();

            SeuraavaTaso();

            Kayttoliittyma.DebugVaihdaTaso();

            Kayttoliittyma.NaytaViesti("taso + 1", 1);
        }
Пример #5
0
        private void DebugKuolemattomuus()
        {
            if (!debugmoodi)
            {
                return;
            }

            if (debugKuolematon)
            {
                debugKuolematon = false;
                Kayttoliittyma.NaytaViesti("kuolemattomuus pois", 1);
            }
            else
            {
                debugKuolematon = true;
                Kayttoliittyma.NaytaViesti("kuolemattomuus päällä", 1);
            }
        }
Пример #6
0
        private void DebugKelloPaallePois()
        {
            if (!debugmoodi)
            {
                return;
            }

            if (OnkoKelloKaynnissa)
            {
                PysaytaKello();
                Kayttoliittyma.NaytaViesti("kello pysäytetty", 1);
            }
            else
            {
                KaynnistaKello();
                Kayttoliittyma.NaytaViesti("kello käynnistetty", 1);
            }
        }
Пример #7
0
        //Seuraavat metodit ovat vain pelin kehitystä varten ja poistetaan lopullisesta versiosta
        private void Debug()
        {
            if (!debugmoodi)
            {
                MessageDisplay.TextColor = Color.Red;
                Kayttoliittyma.NaytaViesti("debug päällä", 1);
                debugmoodi = true;
                return;
            }

            if (debugmoodi)
            {
                MessageDisplay.TextColor = Color.Black;
                Kayttoliittyma.NaytaViesti("debug pois", 1);
                debugmoodi = false;
                return;
            }
        }
Пример #8
0
        /// <summary>
        /// Arpoo pelaajalle mahdollisuuden saada bonus vihollisen kuoleman jälkeen. Vaatii refaktoroinnin.
        /// </summary>
        /// <param name="saadutPisteet">Viholliselta saadut pisteet, joista päätellään mihin kohtaan pelaaja osui. Bonuksen todennäköisyys kasvaa pääosuman jälkeen.</param>
        private void ArvoBonus(int saadutPisteet)
        {
            //Pelaaja voi saada pisteitä 50 tai 100, eli kerroin voi olla 1 tai 2. Kerroin on käänteinen, eli korkeampi kerroin pienentää mahdollisuuksia saada bonus.
            //Pääosuman jälkeen yksittäisen bonuksen todennäköisyys on 1:4, vartalo-osuman jälkeen 1:9.
            int kerroin = 100 / saadutPisteet;
            int bonus   = RandomGen.NextInt(5 * kerroin);

            if (bonus == 1 && Hitpoints < 5)
            {
                Hitpoints.Value += 1;
                Kayttoliittyma.NaytaViesti("Bonus: +1 HP", 1);
            }

            if (bonus == 2)
            {
                Ase.AktivoiBonus();
            }
        }
Пример #9
0
        /// <summary>
        /// Käynnistää pelistä seuraavan tason. Uudet viholliset palautetaan henkiin ja alkupisteisiinsä.
        /// Metodi nostaa myös tasokerrointa, eli nopeuttaa vihollisten hyökkäysten tiheyttä sekä hyökkäyksen kestoa.
        /// </summary>
        private void SeuraavaTaso()
        {
            //Näytetään tason loppumisen ilmaiseva viesti, ajastetaan teksti- ja ääniefektit sekä vihollisten palauttaminen alkupisteisiinsä.
            Kayttoliittyma.NaytaViesti("Viholliset eliminoitu!", 3);

            Timer.SingleShot(2, delegate
            {
                tiktak4s.Play();
            });

            Timer.SingleShot(3, delegate
            {
                Taso.Value    += 1;
                TasoKerroin    = 1 + Taso / 10.0;
                Pisteet.Value += 500;
            });

            //Arvotaan seuraavan tason kuusi vihollista
            vihollisetHengissa = ArvoTasonViholliset(6, viholliset);

            foreach (var vihu in vihollisetHengissa)
            {
                //Kkutsutaan jokaisen vihollisen kohdalla luokkametodia
                //PalautaHenkiin() joka liikuttaa viholliset takaisin lähtöpisteeseen.
                vihu.PalautaHenkiin();
            }
            ;

            //Lisätään pelin vaikeusastetta nopeuttamalla vihollisia 1/n^2
            double aikaSeuraavaanUkkoon = 3 / (TasoKerroin * TasoKerroin);

            peliAjastin.Interval = aikaSeuraavaanUkkoon;

            //Käynnistetään peliajastin kun viholliset ovat ehtineet liikkua alkupisteeseen.
            Timer.SingleShot(6, KaynnistaKello);
        }
Пример #10
0
 /// <summary>
 /// Pysäyttää pelikellon tason loppuessa tai pelaajan kuollessa
 /// </summary>
 private void PysaytaKello()
 {
     peliAjastin.Stop();
     Kayttoliittyma.TahtainPois();
     Console.WriteLine("Pelikello pysäytetty");
 }