예제 #1
0
        /// <summary>
        /// Luo uuden vihollisolion. Kutsuu yläluokan konstruktoria parametreinaan haluttu leveys ja korkeus.
        /// </summary>
        /// <param name="id">Peliolion tunnistenumero. Vastaa peliluokan taulukoiden indeksiä, jossa viite olioon sekä sen edessä olevaan esteeseen sijaitsevat.</param>
        /// <param name="sijainti">Vektori(x,y), johon peliolion keskipiste luodaan.</param>
        /// <param name="kerros">Kerros, jolle peliolio on sijoitettu pelikentällä. Käytetään kuvaamaan olion etäisyyttä kamerasta. Olin koko skaalataan parametrin perusteella.</param>
        /// <param name="kuvat">Taulukko, joka sisältää peliolion käyttämän grafiikan. Välitetään yläluokan konstruktorille.</param>
        /// <param name="peli">Peli-instanssi johon objekti on lisätty.</param>
        public Vihollinen(int id, Vector sijainti, int kerros, Image[] kuvat, SoundEffect[] aanet, Peli peli) : base(200, 340)
        {
            Id = id;

            this.peli = peli;

            vihuKuvat    = kuvat;
            laukausAanet = aanet;

            this.Image = vihuKuvat[1];

            if (kerros == 1)
            {
                Size *= 0.7;
            }
            else if (kerros == -1)
            {
                Size *= 0.55;
            }
            else if (kerros == -3)
            {
                Size *= 0.45;
            }

            //Vihollisen saamat koordinaatit ovat esteen yläreunan tasalla, siirretään alaspäin puolen pituuden verran
            X = sijainti.X;
            Y = sijainti.Y - Height / 2;

            //Tallennetaan sijainti myöhempää käyttöä varten
            this.alkupiste = this.Position;

            this.suoja = LuoEste();


            OnkoHengissa = true;
            OnkoPiilossa = true;

            //Lisätään päälle ja vartalolle hitboxit sopiviin kohtiin. Vain hitboxeihin osuneet laukaukset rekisteröidään.
            hitboxVartalo = new GameObject(0.39 * this.Width, 0.45 * this.Height, Shape.Rectangle);
            Add(hitboxVartalo);

            hitboxPaa    = new GameObject(0.27 * this.Width, 0.25 * this.Height, Shape.Circle);
            hitboxPaa.Y += 0.35 * this.Height;
            Add(hitboxPaa);

            //Kuunnellaan pelaajan ampumisen nostamaa tapahtumaa ja käsitellään se asianmukaisesti
            peli.Ase.AseellaAmmuttiin += OsuikoPelaaja;

            //Piilotetaan hitboxit
            DebugPiilotaHitbox();
        }
예제 #2
0
        /// <summary>
        /// Konstruktorissa liitetään olio tiettyyn peli-instanssiin ja luodaan tarvittavat käyttöliittymäkomponentit.
        /// </summary>
        /// <param name="peli"></param>
        public Kayttoliittyma(Peli peli)
        {
            this.peli = peli;

            LataaUiGrafiikka();

            //Luodaan komponentti, joka näyttää ammustilanteen ja päivittää sitä tilanteen muuttuessa
            ammuksetUI                 = new GameObject(ammusKuvat[6]);
            ammuksetUI.Position        = new Vector(440, 230);
            peli.Ase.Ammukset.Changed += delegate { ammuksetUI.Image = ammusKuvat[peli.Ase.Ammukset.Value]; };
            peli.Add(ammuksetUI, 3);

            //Luodaan komponentti, joka näyttää osumapisteet ja päivittää sitä tilanteen muuttuessa
            hitpointsUI             = new GameObject(hitpointKuvat[3]);
            hitpointsUI.Position    = new Vector(Game.Screen.Right - 20 - hitpointsUI.Width / 2, 350);
            peli.Hitpoints.Changed += delegate { hitpointsUI.Image = hitpointKuvat[peli.Hitpoints]; };
            peli.Add(hitpointsUI, 3);

            //Luodaan muut tarvittavat komponentit
            LuoBonusPalkki();
            LuoPisteNaytot();
            LuoTasoNaytto();
            luoAjastinNaytto();
            LuoViestiNaytto();

            //Luodaan tason vaihtumiseen reagoiva tapahtumankäsittelijä
            peli.Taso.Changed += delegate
            {
                tasoAjastin          = new Timer();
                tasoAjastin.Interval = 1;
                tasoAjastin.Timeout += delegate
                {
                    ajastinLaskuri.Value = ajastinLaskuri.Value - 1;
                };

                ajastinLaskuri.Value = ajastinLaskuri.MaxValue;

                tasoAjastin.Start(3);
            };


            //Ladataan tähtäin kuvatiedostosta
            tahtainMusta = Game.Instance.Content.Load <Texture2D>("tahtain_musta");

            //Ladataan kuvatiedosto, joka näytetään kun aseella ei voi ampua
            noCanShoot = Game.Instance.Content.Load <Texture2D>("no_can_shoot");
        }
예제 #3
0
        /// <summary>
        /// Ase-luokan ainut konstruktori. Ottaa parametreinaan pelin alussa ladatut peligrafiikat ja ääniefektit. Kutsuu yläluokan konstruktoria, joka luo oliosta oikean kokoisen ja muotoisen.
        /// </summary>
        /// <param name="peli">Peli, johon ase kuuluuu</param>
        /// <param name="asePeruskuvat">Taulukko, joka sisältää aseen normaalin kuvan sekä laukauksen aukaisen kuvan</param>
        /// <param name="aseLatauskuvat">Taulukko, joka sisältää kuvasarjan aseen lataamisesta</param>
        /// <param name="aseAanet">Taulukko, joka sisältää aseeseen liittyvät äänitehosteet</param>
        public Ase(Peli peli) : base(450, 400)
        {
            this.peli = peli;

            LataaGrafiikkaJaAanet();
            this.Image = asePerusKuvat[0];

            this.Y = -384;
            this.X = 384;
            peli.Add(this, 3);

            //Luodaan ammustilannetta seuraava mittari. Käyttöliittymä kuuntelee suoraan muutoksia mittarin arvoihin.
            Ammukset             = new IntMeter(6);
            Ammukset.LowerLimit += LataaAse;

            //Luodaan bonuksen aktivoituessa käynnistyvä ajastin
            bonusAjastin          = new Timer();
            bonusLaskuri          = new DoubleMeter(0);
            bonusLaskuri.MaxValue = 5;
        }
예제 #4
0
 static void Main()
 {
     using (var game = new Peli())
         game.Run();
 }