예제 #1
0
        /// <summary>
        /// Tapahtumankäsittelijä aktivoi metodin kun vihollisolion PelaajaOsui-tapahtuma aktivoituu.
        /// Lisää pelaajalle pisteitä ja mahdolisen bonuksen osumakohdan perusteella. Poistaa vihollisen hengissä olevien listalta.
        /// Tarkistaa myös oliko vihollinen tason viimeinen ja käynnistää tällöin seuraavan tason.
        /// </summary>
        /// <param name="vihu">Viite viholliseen, johon on osuttu.</param>
        /// <param name="hitbox">Enum-tyyppinen muuttuja, joka kertoo mihin vihollista on osunut.</param>
        private void KasitteleOsumaViholliseen(Vihollinen vihu, Vihollinen.Hitbox hitbox)
        {
            Console.WriteLine("Käsitellään osuma viholliseen: " + vihu.Id);
            int saadutPisteet;

            if (hitbox == Vihollinen.Hitbox.Paa)
            {
                saadutPisteet = 100;
            }
            else
            {
                saadutPisteet = 50;
            }

            Pisteet.Value += saadutPisteet;
            ArvoBonus(saadutPisteet);

            //Poistetaan vihollinen hengissä olevien listalta ja aloitetaan seuraava taso, jos vihollisia ei enää ole
            vihollisetHengissa.Remove(vihu);
            if (vihollisetHengissa.Count == 0)
            {
                PysaytaKello();
                SeuraavaTaso();
            }
        }
예제 #2
0
        /// <summary>
        /// Luo kaikkiin sijainnit[] taulukossa määriteltyihin koordinaatteihin vihollisoliot ja lisää ne peliin.
        /// Kaikki viholliset lisätään myös listalle 'viholliset', josta arvotaan jokaisen tason alussa kuusi vihollista listalle vihollisetHengissa.
        /// </summary>
        private void LisaaViholliset()
        {
            //Ladataan vihollisten peligrafiikka
            Image[] vihuKuvat = new Image[7];
            vihuKuvat[0] = LoadImage("vihu_pose");
            vihuKuvat[1] = LoadImage("vihu_perus");
            vihuKuvat[2] = LoadImage("vihu_tahtaa");
            vihuKuvat[3] = LoadImage("vihu_ampuu");
            vihuKuvat[4] = LoadImage("vihu_ampui");
            vihuKuvat[5] = LoadImage("vihu_headshot");
            vihuKuvat[6] = LoadImage("vihu_kuollut");

            //Ladataan vihollisten peliäänet
            SoundEffect[] vihuAanet = new SoundEffect[4];
            vihuAanet[0] = LoadSoundEffect("enemy_gunshot_miss");
            vihuAanet[1] = LoadSoundEffect("enemy_gunshot_1");
            vihuAanet[2] = LoadSoundEffect("enemy_gunshot_2");
            vihuAanet[3] = LoadSoundEffect("enemy_gunshot_3");

            //Lisätään vihollisia varten tyhjä lista. Listan avulla helpotetaan oikean kokoisten esteiden piirtämistä ja se toimii reservinä, josta uuden tason alkaessa kopioidaan viitteet henkiin herätettyihin vihollisiin.
            viholliset = new List <Vihollinen>();

            //Loopataan sijainnit sisältävän taulukon läpi ja lisätään viholliset sekä esteet vastaaviin kohtiin
            //Tällä hetkellä kerros määräytyy taulukon indeksin mukaan, jatkossa esim. if (sijainit[i].Y < -200) jne
            for (int i = 0; i < sijainnit.Length; i++)
            {
                int kerros = 1;

                if (i > 2)
                {
                    kerros = -1;
                }

                if (i > 5)
                {
                    kerros = -3;
                }

                Vihollinen vihu = new Vihollinen(id: i, sijainti: sijainnit[i], kerros, vihuKuvat, vihuAanet, peli: this);

                //Lisätään tapahtumankäsittelijät reagoimaan vihollisen VihollinenOsui() sekä PelaajaOsui()-tapahtumiin
                vihu.VihollinenOsui += KasitteleOsumaPelaajaan;

                vihu.PelaajaOsui += KasitteleOsumaViholliseen;

                Add(vihu, kerros);
                viholliset.Add(vihu);
            }

            //Arvotaan ensimmäiseen tasoon osallistuvat kuusi vihollista
            vihollisetHengissa = ArvoTasonViholliset(6, viholliset);

            //Pelin kehitysvaiheen attribuutteja
            debugHitboksit = false;
        }
예제 #3
0
        /// <summary>
        /// Metodi arpoo sattumanvaraiset viholliset parametrina annetulta listalta ja palauttaa ne uudella listalla.
        /// </summary>
        /// <param name="kaikkiVihut">Lista, jolta viholliset arvotaan</param>
        /// <returns>Palauttaa listan, joka sisältää sattumanvaraiset kuusi vihollista</returns>
        private List <Vihollinen> ArvoTasonViholliset(int maara, List <Vihollinen> kaikkiVihut)
        {
            List <Vihollinen> arvotutVihut = new List <Vihollinen>();

            arvotutVihut.AddRange(kaikkiVihut);

            while (arvotutVihut.Count > maara)
            {
                Vihollinen seuraavaVihu = RandomGen.SelectOne <Vihollinen>(arvotutVihut);
                arvotutVihut.Remove(seuraavaVihu);
            }

            return(arvotutVihut);
        }
예제 #4
0
        /// <summary>
        /// Aktivoituu peliajastimen toimesta määräajoin. Käynnistää vihollisen hyökkäyssekvenssin.
        /// </summary>
        private void ArvoSeuraavaAmpuja()
        {
            //Arvotaan hengissä olevien vihollisten listalta seuraava ampuja
            Vihollinen ampuja = RandomGen.SelectOne <Vihollinen>(vihollisetHengissa);

            Console.WriteLine(ampuja.Id + " valittu");

            //Tarkistetaan onko valittu vihollinen valmiina ampumaan. Tällä hetkellä jättää hyökkäysvuoron väliin jos ei ole.
            //Rekursiivinen metodikutsu kaatoi pelin korkeammilla tasoilla kun jäljellä oli enää yksi vihollinen.
            //Muokataan kutsua mahdollisesti myöhemmässä versiossa.
            if (!ampuja.OnkoPiilossa)
            {
                Console.WriteLine(ampuja.Id + " ei piilossa, arvotaan seuraava");
                return;
            }

            ampuja.Hyokkaa();
        }