/// <summary> /// Vastaa pelimekaniikan käynnistämisestä uuden tason alkaessa. /// </summary> private void KaynnistaKello() { tuomionKello.Play(); peliAjastin.Start(); Kayttoliittyma.TahtainPaalle(); Console.WriteLine("Pelikello käynnistetty"); }
/// <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); }); }
/// <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); } }
private void DebugSeuraavaTaso() { if (!debugmoodi) { return; } PysaytaKello(); vihollisetHengissa = new List <Vihollinen>(); SeuraavaTaso(); Kayttoliittyma.DebugVaihdaTaso(); Kayttoliittyma.NaytaViesti("taso + 1", 1); }
private void DebugKuolemattomuus() { if (!debugmoodi) { return; } if (debugKuolematon) { debugKuolematon = false; Kayttoliittyma.NaytaViesti("kuolemattomuus pois", 1); } else { debugKuolematon = true; Kayttoliittyma.NaytaViesti("kuolemattomuus päällä", 1); } }
private void DebugKelloPaallePois() { if (!debugmoodi) { return; } if (OnkoKelloKaynnissa) { PysaytaKello(); Kayttoliittyma.NaytaViesti("kello pysäytetty", 1); } else { KaynnistaKello(); Kayttoliittyma.NaytaViesti("kello käynnistetty", 1); } }
//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; } }
/// <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(); } }
/// <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); }
/// <summary> /// Pysäyttää pelikellon tason loppuessa tai pelaajan kuollessa /// </summary> private void PysaytaKello() { peliAjastin.Stop(); Kayttoliittyma.TahtainPois(); Console.WriteLine("Pelikello pysäytetty"); }