diff --git a/Surffipeli/Content/aalto.png b/Surffipeli/Content/aalto.png index 1617ee552a556e3dde17e6fa87aae0d7c2c46d9c..cdd7b59fbf0184caed208b14b10bc94098d07403 100644 Binary files a/Surffipeli/Content/aalto.png and b/Surffipeli/Content/aalto.png differ diff --git a/Surffipeli/Content/kivi.png b/Surffipeli/Content/kivi.png index 5c1dbe83cc7a77f2ff1df3bcc33da80bbb900ae4..8b927f2aaef9ba62c611913b775234b7f7a9d413 100644 Binary files a/Surffipeli/Content/kivi.png and b/Surffipeli/Content/kivi.png differ diff --git a/Surffipeli/Content/surffilauta.png b/Surffipeli/Content/surffilauta.png index f4ede58becb04fd85b8c874b106471b15e600cf9..ff629f09ea29b02b2282b4dc192b3becac624469 100644 Binary files a/Surffipeli/Content/surffilauta.png and b/Surffipeli/Content/surffilauta.png differ diff --git a/Surffipeli/Content/surffilautaKatki.png b/Surffipeli/Content/surffilautaKatki.png index fb8abd7e8c19858041c4741c4576cdba396e8c33..e9ca66e6909a341ec698a6adcbf061a09987fb5e 100644 Binary files a/Surffipeli/Content/surffilautaKatki.png and b/Surffipeli/Content/surffilautaKatki.png differ diff --git a/Surffipeli/Surffipeli.cs b/Surffipeli/Surffipeli.cs index ecc4e4d828c00823c4badf6f000b0122187ad80a..df01286405da1290f71e44d93afb3e39b4872fd1 100644 --- a/Surffipeli/Surffipeli.cs +++ b/Surffipeli/Surffipeli.cs @@ -4,13 +4,15 @@ using Jypeli.Controls; using Jypeli.Widgets; using System; using System.Collections.Generic; +using System.Text; namespace Surffipeli { - /// @author OMISTAJA - /// @version 30.05.2024 + /// @author Nilla Magga + /// @version 31.05.2024 /// <summary> - /// + /// Surffipeli jossa tarkotuksena kerätä mahdollisimmaan paljon aaltoja + /// ja varoa seiniä sekä kiviä /// </summary> public class Surffipeli : PhysicsGame { @@ -30,12 +32,15 @@ namespace Surffipeli private bool peliKaynnissa = false; - Timer liikutusajastin = new Timer(); + private Timer liikutusajastin; + public IntMeter pisteLaskuri; public Timer aikalaskuri; public override void Begin() { + ClearAll(); + SetWindowSize(1280, 720); Gravity = new Vector(0, -100); LuoKentta(); @@ -50,22 +55,28 @@ namespace Surffipeli MasterVolume = 0.5; - + liikutusajastin = new Timer(); liikutusajastin.Interval = 0.01; liikutusajastin.Timeout += SiirraPelaajaaOikeammalle; liikutusajastin.Start(); peliKaynnissa = true; } - - void SiirraPelaajaaOikeammalle() - { - pelaaja1.Push(new Vector(NOPEUS, 0.0)); - } - + /// <summary> + /// Liikuttaa pelaajaa oikealle automaattisesti + /// </summary> + void SiirraPelaajaaOikeammalle() + { + pelaaja1.Push(new Vector(NOPEUS, 0.0)); + } + /// <summary> + /// Luodaan pistelaskuri aalloista saatuja pisteitä varten + /// Asetataan se oikeaan yläkulmaan ja tehdään sille palkki joka muuttuu pisteiden mukaisesti punaiseksi + /// Asetetaan pelille maksimipistemäärä + /// </summary> private void LuoPistelaskuri() { pisteLaskuri = new IntMeter(0); - pisteLaskuri.MaxValue = 5; + pisteLaskuri.MaxValue = 20; pisteLaskuri.UpperLimit += Voitto; Label pisteNaytto = new Label(); @@ -96,15 +107,21 @@ namespace Surffipeli { Label voitto = new Label("VOITTO"); voitto.Y = 50; - voitto.TextColor = Color.White; + voitto.TextColor = Color.Black; Add(voitto); StopAll(); + liikutusajastin.Stop(); LuoAikalaskuri2(); - Keyboard.DisableAll(); + Keyboard.Disable(Key.Up); + Keyboard.Disable(Key.Down); aikalaskuri.Stop(); + Gravity = Vector.Zero; } } + /// <summary> + /// Pelille aikalaskuri joka juoksee pelin alusta siihen asti kun voitetaan peli tai hävitään + /// </summary> private void LuoAikalaskuri() { aikalaskuri = new Timer(); @@ -127,7 +144,9 @@ namespace Surffipeli } - + /// <summary> + /// Aikalaskuri, jolla peli saadaan käynnistymään 5s päästä uudestaan voiton jälkeen + /// </summary> void LuoAikalaskuri2() { @@ -138,14 +157,38 @@ namespace Surffipeli Label aika = new Label("Voittoon käytetty aika: "); aika.Y = +30; - aika.TextColor = Color.White; + aika.TextColor = Color.Black; + Add(aika); + + string aika1 = aikalaskuri.CurrentTime.ToString(); + aika1 = aika1.Substring(0, 4); + Label voittoAika = new Label(aika1); + voittoAika.Y = +10; + voittoAika.TextColor = Color.Black; + Add(voittoAika); + + } + /// <summary> + /// Aikalaskuri, jolla peli saadaan käynnistymään 5s päästä uudestaan häviön jälkeen + /// </summary> + void LuoAikalaskuri3() + { + + Timer nollaus = new Timer(); + nollaus.Interval = 5; + nollaus.Timeout += AikaLoppui; + nollaus.Start(1); + + Label aika = new Label("Peliä pelattu ennen häviötä: "); + aika.Y = +30; + aika.TextColor = Color.Black; Add(aika); string aika1 = aikalaskuri.CurrentTime.ToString(); aika1 = aika1.Substring(0, 4); Label voittoAika = new Label(aika1); voittoAika.Y = +10; - voittoAika.TextColor = Color.White; + voittoAika.TextColor = Color.Black; Add(voittoAika); } @@ -153,9 +196,11 @@ namespace Surffipeli void AikaLoppui() { ResetLayers(); - Begin(); + Begin(); } - + /// <summary> + /// Kentän luonti peliä varten + /// </summary> private void LuoKentta() { TileMap kentta = TileMap.FromLevelAsset("kentta1.txt"); @@ -164,18 +209,34 @@ namespace Surffipeli kentta.SetTileMethod('*', LisaaAalto); kentta.SetTileMethod('N', LisaaPelaaja); kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO); - Level.CreateBorders(); + Level.Background.CreateGradient(Color.White, Color.SkyBlue); + Level.CreateLeftBorder(); + Level.CreateTopBorder(); + Level.CreateBottomBorder(); + PhysicsObject oikeaReuna = Level.CreateRightBorder(); + oikeaReuna.Tag = "maali"; } - + /// <summary> + /// Luodaan pelille seinät + /// </summary> + /// <param name="paikka"></param>paikka mihin seinä asetetaan, tieto tuodaan kentän tiedoista + /// <param name="leveys"></param> + /// <param name="korkeus"></param> private void LisaaSeina(Vector paikka, double leveys, double korkeus) { PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus); seina.Position = paikka; - seina.Color = Color.Green; + seina.Color = Color.Beige; seina.Tag = "seina"; Add(seina); } + /// <summary> + /// Luodaan kenttään kiviä, joita pelaajan pitää väistää + /// </summary> + /// <param name="paikka"></param>paikka mihin kivi asetetaan, tieto tuodaan kentän tiedoista + /// <param name="leveys"></param> + /// <param name="korkeus"></param> private void LisaaKivi(Vector paikka, double leveys, double korkeus) { PhysicsObject kivi = PhysicsObject.CreateStaticObject(leveys, korkeus); @@ -184,7 +245,12 @@ namespace Surffipeli kivi.Tag = "kivi"; Add(kivi); } - + /// <summary> + /// Luodaan kenttään aaltoja, joita pelaajan tarkoitus kerätä + /// </summary> + /// <param name="paikka"></param> paikka mihin aalto asetetaan, tieto tuodaan kentän tiedoista + /// <param name="leveys"></param> + /// <param name="korkeus"></param> private void LisaaAalto(Vector paikka, double leveys, double korkeus) { PhysicsObject aalto = PhysicsObject.CreateStaticObject(leveys, korkeus); @@ -194,38 +260,66 @@ namespace Surffipeli aalto.Tag = "aalto"; Add(aalto); } - + /// <summary> + /// Luodaan pelaaja ja määritetään sen törmäyskäsittelijät + /// </summary> + /// <param name="paikka"></param> mihin pelaaja asetetaan, tieto tuodaan kentän tiedoista + /// <param name="leveys"></param> + /// <param name="korkeus"></param> private void LisaaPelaaja(Vector paikka, double leveys, double korkeus) { - pelaaja1 = new PlatformCharacter(125, 125); + pelaaja1 = new PlatformCharacter(125, 50); pelaaja1.Position = paikka; pelaaja1.Mass = 4.0; pelaaja1.Image = pelaajanKuva; AddCollisionHandler(pelaaja1, "aalto", TormaaAaltoon); AddCollisionHandler(pelaaja1, "kivi", TormaaKiveen); AddCollisionHandler(pelaaja1, "seina", TormaaSeinaan); + AddCollisionHandler(pelaaja1, "maali", Maali); Add(pelaaja1); } + /// <summary> + /// Luodaan päätyseinästä objekti, jonka saavuttamalla kenttä päästään läpi + /// </summary> + /// <param name="pelaaja"></param> + /// <param name="kohde"></param> + void Maali(PhysicsObject pelaaja, PhysicsObject kohde) + { + MessageDisplay.Add("Pääsit kentän läpi!"); + Gravity = Vector.Zero; + StopAll(); + Keyboard.Disable(Key.Up); + Keyboard.Disable(Key.Down); + aikalaskuri.Stop(); + liikutusajastin.Stop(); + } + /// <summary> + /// Lisätään näppäimet millä peliä hallitaan + /// </summary> private void LisaaNappaimet() { Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja siirtyy ylöspäin", pelaaja1, HYPPYNOPEUS); Keyboard.Listen(Key.Down, ButtonState.Pressed, Hyppaa, "Pelaaja siirtyy alaspäin", pelaaja1, -HYPPYNOPEUS); - - } - private void Liikuta(PlatformCharacter hahmo, double nopeus) - { - hahmo.Walk(nopeus); } + /// <summary> + /// Pakottaa pelaajan siirtymään ylös tai alaspäin kun ohjaavaa näppäintä painetaan + /// </summary> + /// <param name="hahmo"></param>Liikutettava objekti + /// <param name="nopeus"></param>Nopeus millä objektia liikutetaan private void Hyppaa(PlatformCharacter hahmo, double nopeus) { hahmo.ForceJump(nopeus); } - + /// <summary> + /// Lisätään teksti "keräsit aallon" ja annetaan pistelaskuriin yksi lisäpiste + /// </summary> + /// <param name="hahmo"></param> + /// <param name="aalto"></param> private void TormaaAaltoon(PhysicsObject hahmo, PhysicsObject aalto) { maaliAani.Play(); @@ -233,7 +327,11 @@ namespace Surffipeli aalto.Destroy(); pisteLaskuri.Value += 1; } - + /// <summary> + /// Peli loppuu kun kiveen osutaan. Määritetään pelaajalle uusi kuva + /// </summary> + /// <param name="hahmo"></param> + /// <param name="kivi"></param> private void TormaaKiveen(PhysicsObject hahmo, PhysicsObject kivi) { if (peliKaynnissa) @@ -241,12 +339,22 @@ namespace Surffipeli MessageDisplay.Add("Kuolit! :("); Keyboard.Disable(Key.Up); Keyboard.Disable(Key.Down); - liikutusajastin.Stop(); peliKaynnissa = false; pelaaja1.Image = pelaajanKuolemakuva; + StopAll(); + LuoAikalaskuri3(); + liikutusajastin.Stop(); + Keyboard.Disable(Key.Up); + Keyboard.Disable(Key.Down); + aikalaskuri.Stop(); + Gravity = Vector.Zero; } } - + /// <summary> + /// Lisätään teksti "Varo seiniä" kun pelaaja osuu ylä- tai alaseinään. + /// </summary> + /// <param name="hahmo"></param> + /// <param name="seina"></param> private void TormaaSeinaan(PhysicsObject hahmo, PhysicsObject seina) { if (peliKaynnissa)