diff --git a/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs b/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs index 2e6b66194af6ad03413c807e9470d23e7ed6e10c..5b31c8d47f6769f03a1ef5ee04e4603f19cb88dd 100644 --- a/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs +++ b/Sammakkopeli/Sammakkopeli/Sammakkopeli.cs @@ -5,6 +5,11 @@ using Jypeli.Widgets; using System; using System.Collections.Generic; +/// @author snelvjxz ja kmsaksyt +/// @version 5.12.2022 +/// <summary> +/// Sammakkopeli +/// </summary> namespace Sammakkopeli { public class Sammakkopeli : PhysicsGame @@ -19,11 +24,13 @@ namespace Sammakkopeli Timer hyppyViive; Timer kieliAjastin; Timer liikutaKielta; + Timer aika; IntMeter karpasLaskuri; int sammakkoTippuuKertoja = -10; int edellinenSuunta = 1; + int nykyisenKentanNumero; bool onkoHypannut = false; bool ajastinKaynnissa = false; @@ -42,32 +49,42 @@ namespace Sammakkopeli Image kielikuva = LoadImage("kieli.png"); Image menu = LoadImage("SammakkoMenu"); + List<double> ajat1 = new List<double>(); + List<double> ajat2 = new List<double>(); + List<double> ajat3 = new List<double>(); + Image[] kuvatSammakkoHyppaa = LoadImages("a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13", "a14", "a15", "a16"); - - + /// <summary> + /// Käynnistää pelin. + /// </summary> public override void Begin() { TeeAlkuValikko(); Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); } - + /// <summary> + /// Tekee peliin alkuvalikon. + /// </summary> void TeeAlkuValikko() { ClearAll(); MultiSelectWindow alkuValikko = new MultiSelectWindow("Sammakkopeli", - "Valitse taso", "Ohjaimet", "Lopeta peli"); + "Valitse taso", "Tasojen ajat", "Lopeta peli"); Level.Background.Image = menu; alkuValikko.AddItemHandler(0, TeeTasovalikko); - alkuValikko.AddItemHandler(1, ShowControlHelp); + alkuValikko.AddItemHandler(1, TeeAikaTaulukko); alkuValikko.AddItemHandler(2, Exit); alkuValikko.DefaultCancel = -1; Add(alkuValikko); } + /// <summary> + /// Tekee peliin taukovalikon. + /// </summary> void TeeValikko() { Pause(); @@ -77,6 +94,10 @@ namespace Sammakkopeli Add(valikko); } + /// <summary> + /// Käsittelee taukovalikon tapahtuman. + /// </summary> + /// <param name="valinta">Mitä valikon napeista painettiin.</param> void PainettiinValikonNappia(int valinta) { switch (valinta) @@ -97,7 +118,65 @@ namespace Sammakkopeli } } + /// <summary> + /// Tekee parhaiden aikojen taulukon. + /// </summary> + void TeeAikaTaulukko() + { + ClearAll(); + + ajat1.Sort(); + ajat2.Sort(); + ajat3.Sort(); + + Widget ajatTaso1 = new Widget(new VerticalLayout()); + ajatTaso1.X = -300; + Label parhaatAjat1 = new Label("Tason 1 Parhaat ajat:"); + ajatTaso1.Add(parhaatAjat1); + int i = 0; + foreach (double aika in ajat1) + { + if (i > 2) break; + Label aikaRuutu = new Label(aika.ToString("N2")); + ajatTaso1.Add(aikaRuutu); + i++; + } + Add(ajatTaso1); + + Widget ajatTaso2 = new Widget(new VerticalLayout()); + ajatTaso2.X = 9; + Label parhaatAjat2 = new Label("Tason 2 Parhaat ajat:"); + ajatTaso2.Add(parhaatAjat2); + int j = 0; + foreach (double aika in ajat2) + { + if (j > 9) break; + Label aikaRuutu = new Label(aika.ToString("N2")); + ajatTaso2.Add(aikaRuutu); + j++; + } + Add(ajatTaso2); + + Widget ajatTaso3 = new Widget(new VerticalLayout()); + ajatTaso3.X = +300; + Label parhaatAjat3 = new Label("Tason 3 Parhaat ajat:"); + ajatTaso3.Add(parhaatAjat3); + int k = 0; + foreach (double aika in ajat3) + { + if (k > 9) break; + Label aikaRuutu = new Label(aika.ToString("N2")); + ajatTaso3.Add(aikaRuutu); + k++; + } + Add(ajatTaso3); + + Keyboard.Listen(Key.Back, ButtonState.Pressed, TeeAlkuValikko, "Takaisin"); + } + /// <summary> + /// Tekee tasovalikon. + /// </summary> void TeeTasovalikko() { ClearAll(); @@ -107,18 +186,22 @@ namespace Sammakkopeli Add(tasovalikko); } + /// <summary> + /// Käsittelee tasovalikon valinnan. + /// </summary> + /// <param name="valinta">Mikä taso valittiin.</param> void PainettiinTasovalikonNappia(int valinta) { switch (valinta) { case 0: - AlustaKentta("Kentta1", 5); + AlustaKentta(1, "Kentta1", 5); break; case 1: - AlustaKentta("Kentta2", 4); + AlustaKentta(2, "Kentta2", 4); break; case 2: - AlustaKentta("Kentta3", 4); + AlustaKentta(3, "Kentta3", 4); break; case 3: TeeAlkuValikko(); @@ -127,7 +210,7 @@ namespace Sammakkopeli } /// <summary> - /// Asetetaan ohjaimet peliä varten + /// Asetetaan ohjaimet peliä varten. /// </summary> void AsetaOhjaimet() { @@ -142,11 +225,11 @@ namespace Sammakkopeli Keyboard.Listen(Key.Up, ButtonState.Pressed, SammakkoHyppaa, "Hyppää", 8); Keyboard.Listen(Key.Space, ButtonState.Pressed, KaytaKielta, "Käytä kieltä"); - Keyboard.Listen(Key.P, ButtonState.Pressed, TeeValikko, "Valikko"); + Keyboard.Listen(Key.Escape, ButtonState.Pressed, TeeValikko, "Valikko"); } /// <summary> - /// Määritetään pelihahmon nopeus + /// Laitetaan pelihahmo liikkumaan haluttuun suuntaan. /// </summary> /// <param name="suunta"></param> void AsetaNopeus(int suunta) @@ -164,7 +247,10 @@ namespace Sammakkopeli } } - + /// <summary> + /// Kääntää pelihahmon spriten menosuuntaan. + /// </summary> + /// <param name="suunta">suunta, johon pelihahmoa liikutetaan</param> void MuutaSammakonKuvaa(int suunta) { if (suunta != edellinenSuunta) @@ -184,10 +270,11 @@ namespace Sammakkopeli } /// <summary> - /// Luo peliin kentän ja alustaa pelin + /// Luo kentän ja alustaa pelin /// </summary> - void AlustaKentta(string kenttakartta, int karpastenMaara) + void AlustaKentta(int kentanNumero, string kenttakartta, int karpastenMaara) { + nykyisenKentanNumero = kentanNumero; GameObject taustakuva = new GameObject(2026, 1447); taustakuva.Image = LoadImage("Tausta"); Add(taustakuva, -3); @@ -217,6 +304,9 @@ namespace Sammakkopeli AsetaOhjaimet(); } + /// <summary> + /// Nollaa pelin muuttujat. + /// </summary> void AsetaMuuttujat() { sammakkoTippuuKertoja = -10; @@ -234,7 +324,7 @@ namespace Sammakkopeli /// <summary> - /// Luo ajastimet pelihahmon liikuttamista varten + /// Luo ajastimet. /// </summary> void LuoAjastimet() { @@ -260,7 +350,10 @@ namespace Sammakkopeli kieliAjastin.Timeout += PoistaKieli; } - + /// <summary> + /// Luo laskurit. + /// </summary> + /// <param name="karpastenMaara">Kuinka monta kärpästä tasossa on.</param> void LuoLaskurit(int karpastenMaara) { karpasLaskuri = new IntMeter(0, 0, karpastenMaara); @@ -272,9 +365,15 @@ namespace Sammakkopeli karpasNaytto.Color = Color.Black; karpasNaytto.BindTo(karpasLaskuri); Add(karpasNaytto); - karpasLaskuri.UpperLimit += TasoLapaistiin; + karpasLaskuri.UpperLimit += delegate { TasoLapaistiin(nykyisenKentanNumero); }; + + Label karpasiaTasossa = new Label(" / " + karpastenMaara.ToString()); + karpasiaTasossa.Position = new Vector(karpasNaytto.Right + karpasiaTasossa.Width/2, karpasNaytto.Y); + karpasiaTasossa.TextColor = Color.White; + karpasiaTasossa.Color = Color.Black; + Add(karpasiaTasossa); - Timer aika = new Timer(); + aika = new Timer(); aika.Start(); Label aikaNaytto = new Label(); aikaNaytto.Title = "Aika: "; @@ -282,22 +381,40 @@ namespace Sammakkopeli aikaNaytto.Y = Screen.Top - 150.0; aikaNaytto.TextColor = Color.White; aikaNaytto.Color = Color.Black; - aikaNaytto.DecimalPlaces = 0; + aikaNaytto.DecimalPlaces = 2; aikaNaytto.BindTo(aika.SecondCounter); Add(aikaNaytto); } - - void TasoLapaistiin() + /// <summary> + /// Tekee ikkunan kun taso läpäistään. + /// </summary> + /// <param name="nro">läpäistyn tason numero</param> + void TasoLapaistiin(int nro) { Pause(); - MultiSelectWindow tasoLapaistu = new MultiSelectWindow("Läpäisit tason!", - "Takaisin tason valintaan"); + double sekunnit = aika.CurrentTime; + MultiSelectWindow tasoLapaistu = new MultiSelectWindow("Läpäisit tason ajassa: " + + sekunnit.ToString("N2") + "!", "Takaisin tason valintaan"); tasoLapaistu.AddItemHandler(0, TeeTasovalikko); Add(tasoLapaistu); + switch (nro) + { + case 1: + ajat1.Add(sekunnit); + break; + case 2: + ajat2.Add(sekunnit); + break; + case 3: + ajat3.Add(sekunnit); + break; + } } - + /// <summary> + /// Tekee ikkunan kun taso hävitään. + /// </summary> void TasoHavittiin() { Pause(); @@ -307,6 +424,9 @@ namespace Sammakkopeli Add(tasoHavittu); } + /// <summary> + /// Lisää viiveen pelihahmon hyppäämiseen. + /// </summary> void HyppyViive() { hyppyViive.Stop(); @@ -338,7 +458,7 @@ namespace Sammakkopeli } /// <summary> - /// Liikuttaa pelihahmoa vasemmalle ja oikealle + /// Liikuttaa pelihahmoa vasemmalle ja oikealle. /// </summary> void LiikutaPelihahmoa() { @@ -346,6 +466,9 @@ namespace Sammakkopeli sammakko.Velocity = suunta; } + /// <summary> + /// Asettaa kielen liikkumaan pelihahmon mukana. + /// </summary> void LiikutaKielta() { kieli.Position = sammakko.Position @@ -364,8 +487,8 @@ namespace Sammakkopeli sammakkoTippuuKertoja = korkeus; hyppyLaskuri.Start(); sammakko.Animation = new Animation(kuvatSammakkoHyppaa); - sammakko.Animation.FPS = 3; - sammakko.Animation.Start(); + sammakko.Animation.FPS = 30; + sammakko.Animation.Start(1); } } @@ -381,19 +504,13 @@ namespace Sammakkopeli nopeusY = -1000.0; return; } - if (sammakkoTippuuKertoja < 0) - { - - } - nopeusY = sammakkoTippuuKertoja * 100; sammakkoTippuuKertoja -= 1; - //sammakko.Animation = new Animation(animaatioSammakkoTippuu); - sammakko.Animation.FPS = 3; - sammakko.Animation.Stop(); } - + /// <summary> + /// Piirtää pelihahmon kielen. + /// </summary> void KaytaKielta() { if (kaytetaankoKielta == false) @@ -405,7 +522,7 @@ namespace Sammakkopeli kieli.IgnoresCollisionResponse = true; kieli.Velocity = sammakko.Velocity; kieli.Position = sammakko.Position + new Vector((sammakko.Width / 2 + kieli.Width / 2) * edellinenSuunta, 0); - kieli.LifetimeLeft = TimeSpan.FromSeconds(0.25); + kieli.LifetimeLeft = TimeSpan.FromSeconds(0.35); kaytetaankoKielta = true; kieliAjastin.Start(1); liikutaKielta.Start(); @@ -414,7 +531,9 @@ namespace Sammakkopeli } } - + /// <summary> + /// Pysäyttää ja nollaa pelihahmon kieleen liittyvät ajastimet. + /// </summary> void PoistaKieli() { kaytetaankoKielta = false; @@ -424,7 +543,11 @@ namespace Sammakkopeli liikutaKielta.Reset(); } - + /// <summary> + /// Käsittelee pelihahmon törmäykset. + /// </summary> + /// <param name="tormaaja">Objekti joka törmää.</param> + /// <param name="kohde">Törmäyksen kohde.</param> void KasitteleSammakonTormays(PhysicsObject tormaaja, PhysicsObject kohde) { if (tormaaja.Bottom >= kohde.Top) @@ -439,12 +562,22 @@ namespace Sammakkopeli } } + /// <summary> + /// Käsittelee kielen törmäykset. + /// </summary> + /// <param name="tormaaja">Objekti joka törmää.</param> + /// <param name="kohde">Törmäyksen kohde.</param> void KasitteleKielenTormays(PhysicsObject tormaaja, PhysicsObject kohde) { kohde.Destroy(); karpasLaskuri.Value += 1; } + /// <summary> + /// Käsittelee hillerin törmäykset. + /// </summary> + /// <param name="tormaaja">Objekti joka törmää.</param> + /// <param name="kohde">Törmäyksen kohde</param> void KasitteleHillerinTormays(PhysicsObject tormaaja, PhysicsObject kohde) { if (kohde == sammakko) @@ -474,6 +607,12 @@ namespace Sammakkopeli Add(taso); } + /// <summary> + /// Tekee mutaruohopalikan. + /// </summary> + /// <param name="paikka">palikan paikka</param> + /// <param name="leveys">palikan leveys</param> + /// <param name="korkeus">palikan korkeus</param> void LuoMutaRuoho(Vector paikka, double leveys, double korkeus) { PhysicsObject mutaruoho = PhysicsObject.CreateStaticObject(leveys, korkeus); @@ -515,9 +654,9 @@ namespace Sammakkopeli /// <summary> /// Luo peliin kerättävän kärpäsen /// </summary> - /// <param name="paikka"></param> - /// <param name="leveys"></param> - /// <param name="korkeus"></param> + /// <param name="paikka">kärpäsen paikka</param> + /// <param name="leveys">kärpäsen leveys</param> + /// <param name="korkeus">kärpäsen korkeus</param> void LuoKarpanen(Vector paikka, double leveys, double korkeus) { PhysicsObject karpanen = new PhysicsObject(leveys, 45); @@ -530,7 +669,7 @@ namespace Sammakkopeli RandomMoverBrain karpanenAivot = new RandomMoverBrain(); karpanenAivot.WanderRadius = 30; - karpanenAivot.Speed = 80; + karpanenAivot.Speed = 100; karpanenAivot.WanderPosition = paikka; karpanen.Brain = karpanenAivot; }