/// <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(); }
/// <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"); }
/// <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; }
static void Main() { using (var game = new Peli()) game.Run(); }