diff --git a/KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png b/KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png new file mode 100644 index 0000000000000000000000000000000000000000..389ed7f984a324b3f07f3a2ba09b6b6c0ed895ac Binary files /dev/null and b/KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png differ diff --git a/KelaCombat/KelaCombatTesti/Content/Uloskaynti.png b/KelaCombat/KelaCombatTesti/Content/Uloskaynti.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1f40131fde8efa45f4a9b7e5668068f80ba101 Binary files /dev/null and b/KelaCombat/KelaCombatTesti/Content/Uloskaynti.png differ diff --git a/KelaCombat/KelaCombatTesti/Content/kentta1.png b/KelaCombat/KelaCombatTesti/Content/kentta1.png index ac5aa10aad5aa7c4e5a10d9f722d11bf204aec1f..ff43ff741d2c384ce4102091d6112bc5ca0b3767 100644 Binary files a/KelaCombat/KelaCombatTesti/Content/kentta1.png and b/KelaCombat/KelaCombatTesti/Content/kentta1.png differ diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs index 777029880b4edd4cfef88172320775a3ffe0a3d1..1a43332f7289ffb318d73df4bb795d55a9a715b8 100644 --- a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs +++ b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs @@ -1,188 +1,204 @@ using System; using System.Collections.Generic; -using System.Net.Mime; -using System.Security.Cryptography; -using FarseerPhysics.Dynamics.Joints; using Jypeli; -using Jypeli.Assets; -using Jypeli.Controls; using Jypeli.Widgets; -using Silk.NET.SDL; using Color = Jypeli.Color; namespace KelaCombatTesti; -/// @author Sakari -/// @version 17.02.2025 +/// @author Sakari Hanki ja Salla Laine +/// @version 28.03.2025 /// <summary> -/// +/// Pelissä tikkuhenkilö hakkaa kelabotteja pesismailalla /// </summary> public class KelaCombatTesti : PhysicsGame { - int kenttanumero = 0; - string[] Kentat = {"kentta1", "kentta2"}; - Image[] HenkiloSaapastelu = LoadImages("kavely1", "kavely2"); - Image[] PaikallaanAnimaatio = LoadImages("kavely1"); - Image[] PutoamisAnimaatio = LoadImages("putoaminen1", "putoaminen2", "putoaminen3", "putoaminen4", "putoaminen5"); - Image[] KelabottiKavely = LoadImages("Kelabotti", "Kelabotti2"); - - SoundEffect Hyppyaani = LoadSoundEffect("Hyppyaani"); - SoundEffect Viinapulloaani = LoadSoundEffect("Viinapulloaani"); - SoundEffect Keladamageaani = LoadSoundEffect("Keladamageaani"); - SoundEffect Kavelyaani = LoadSoundEffect("Kavelyaani"); - SoundEffect Lyontiaani = LoadSoundEffect("Lyontiaani"); - Timer Ajastin = new Timer(); + private int _kenttanumero = 0; + private string[] _kentat = {"kentta1", "kentta2"}; + private Image[] _henkiloSaapastelu = LoadImages("kavely1", "kavely2"); + private Image[] _paikallaanAnimaatio = LoadImages("kavely1"); + private Image[] _putoamisAnimaatio = LoadImages("putoaminen1", "putoaminen2", "putoaminen3", "putoaminen4", "putoaminen5"); + private Image[] _kelabottiKavely = LoadImages("Kelabotti", "Kelabotti2"); + + private SoundEffect _hyppyaani = LoadSoundEffect("Hyppyaani"); + private SoundEffect _viinapulloaani = LoadSoundEffect("Viinapulloaani"); + private SoundEffect _keladamageaani = LoadSoundEffect("Keladamageaani"); + private SoundEffect _kavelyaani = LoadSoundEffect("Kavelyaani"); + private SoundEffect _lyontiaani = LoadSoundEffect("Lyontiaani"); + private Timer _ajastin = new Timer(); - PlatformCharacter pelaaja; - PhysicsObject Pesismaila; - PhysicsObject Viinapullo; - PhysicsObject kappale; - PhysicsObject kolmio; - PlatformCharacter Kelabotti; - Image TiiliseinaKuva = LoadImage("tiiliseina"); - Image KelabottiKuva = LoadImage("Kelabotti"); - //Image PelaajaKuva = LoadImage("Pelaaja.png"); - Image ViinapulloKuva = LoadImage("Viinapullo.png"); - - List<PhysicsObject> spawnipaikat = new List<PhysicsObject>(); // tässä listataan mahdolliset paikat, johon kelabotti voi spawnaa. Lista pitää sisällään spawnereita. + private PlatformCharacter _pelaaja; + private PhysicsObject _pesismaila; + private PhysicsObject _viinapullo; + private PhysicsObject _kappale; + private PhysicsObject _exit; + private PhysicsObject _ansa; + private PlatformCharacter _kelabotti; + + private Image _tiiliseinakuva = LoadImage("tiiliseina"); + private Image _kelabottikuva = LoadImage("Kelabotti"); + private Image _viinapullokuva = LoadImage("Viinapullo.png"); + private Image _uloskaynti = LoadImage("Uloskaynti"); + private Image _ansakuva = LoadImage("Tyohakemuskasa"); + + private List<PhysicsObject> _spawnipaikat = new List<PhysicsObject>(); // tässä listataan mahdolliset paikat, johon kelabotti voi spawnaa. Lista pitää sisällään spawnereita. //IntMeter edustaa muuttujia, jotka voivat kasvaa tai vähentyä tietyllä tavalla - IntMeter pisteet; //pelaajan keräämät pisteet - DoubleMeter pelaajanelamaLaskuri; //pelaajan elämät - IntMeter Kelabotinelamalaskuri; //kelabotin elämät + private IntMeter _pisteet; //pelaajan keräämät pisteet + private DoubleMeter _pelaajanElamaaskuri; //pelaajan elämät //Label = tekstielementti, joka näytetään pelissä - Label pisteNaytto; //pisteiden näyttäminen ruudulla + private Label _pisteNaytto; //pisteiden näyttäminen ruudulla - - /// <summary> - /// Pedli alkaa tästä + /// Peli alkaa tästä /// </summary> public override void Begin() { LuoKentta(0); } + /// <summary> /// Vasemmalle kävely /// </summary> /// <param name="vektori">suuntavektori</param> - void LiikuVasemmalle(Vector vektori) + private void LiikuVasemmalle(Vector vektori) { - pelaaja.Walk(-120); - + _pelaaja.Walk(-120); } + /// <summary> /// Vasemmalle kävedllessä kuuluva ääni /// </summary> /// <param name="vektori">suuntavektori</param> - void AaniVasemmalle(Vector vektori) + private void AaniVasemmalle(Vector vektori) { - Kavelyaani.Play(); - Ajastin.Interval = 0.5; // Äänen kesto - Ajastin.Timeout += delegate { Kavelyaani.Play(); }; - Ajastin.Start(); + _kavelyaani.Play(); + _ajastin.Interval = 0.5; // Äänen kesto + _ajastin.Timeout += delegate { _kavelyaani.Play(); }; + _ajastin.Start(); } + /// <summary> /// Vasemmalle suuntautuvan äänen lopettaminen /// </summary> /// <param name="vektori">suuntavektori</param> - void LopetaAaniVasemmalle(Vector vektori) + private void LopetaAaniVasemmalle(Vector vektori) { - if (Ajastin != null) // Tarkistetaan, onko ajastin luotu + if (_ajastin != null) // Tarkistetaan, onko ajastin luotu { - Ajastin.Stop(); // Pysäytetään ajastin - Kavelyaani.Stop(); // Lopetetaan äänen toisto + _ajastin.Stop(); // Pysäytetään ajastin + _kavelyaani.Stop(); // Lopetetaan äänen toisto } } + /// <summary> /// Oikealle kävely /// </summary> /// <param name="vektori">suuntavektori</param> - void LiikuOikealle(Vector vektori) + private void LiikuOikealle(Vector vektori) { - pelaaja.Walk(120); - + _pelaaja.Walk(120); } + /// <summary> /// Ääni oikealle liikkuessa /// </summary> /// <param name="vektori">suuntavektori</param> - void AaniOikealle(Vector vektori) + private void AaniOikealle(Vector vektori) { - Kavelyaani.Play(); - Ajastin.Interval = 0.5; // Äänen kesto - Ajastin.Timeout += delegate { Kavelyaani.Play(); }; - Ajastin.Start(); + _kavelyaani.Play(); + _ajastin.Interval = 0.5; // Äänen kesto + _ajastin.Timeout += delegate { _kavelyaani.Play(); }; + _ajastin.Start(); } + /// <summary> /// Oikealle suuntautuvan äänen lopettaminen /// </summary> /// <param name="vektori">suuntavektori</param> - void LopetaAaniOikealle(Vector vektori) + private void LopetaAaniOikealle(Vector vektori) { - if (Ajastin != null) // Tarkistetaan, onko ajastin luotu + if (_ajastin != null) // Tarkistetaan, onko ajastin luotu { - Ajastin.Stop(); // Pysäytetään ajastin - Kavelyaani.Stop(); // Lopetetaan äänen toisto + _ajastin.Stop(); // Pysäytetään ajastin + _kavelyaani.Stop(); // Lopetetaan äänen toisto } } + /// <summary> /// Hyppääminen /// </summary> /// <param name="vektori">suuntavektori</param> - void Hyppaa(Vector vektori) + private void Hyppaa(Vector vektori) { - Hyppyaani.Play(); - pelaaja.Jump(900.0); + _hyppyaani.Play(); + _pelaaja.Jump(900.0); } + /// <summary> /// Tässä luodaan pelikenttä /// </summary> - void LuoKentta(int numero) + private void LuoKentta(int numero) { - if (kenttanumero == Kentat.Length) + if (_kenttanumero == _kentat.Length) { - Label Valmistuminen = new Label(800, 60, "Toimeentulohakemus hyväkystty."); - Valmistuminen.Y = 140; - Valmistuminen.Font = new Font(60); - Valmistuminen.TextColor = Color.LimeGreen; - Add(Valmistuminen); + Label valmistuminen = new Label(800, 60, "Toimeentulohakemus hyväkystty."); + valmistuminen.Y = 140; + valmistuminen.Font = new Font(60); + valmistuminen.TextColor = Color.LimeGreen; + Add(valmistuminen); + } - else - { - ClearAll(); + else + { + ClearAll(); + for (int i = 0; i < 20; i++) + { + GameObject koriste = TeeKoriste(Level.BoundingRect); + Add(koriste); + } - Level.Background.CreateGradient(Color.DarkGray, Color.Blue); - Gravity = new Vector(0, -1100.0); + Level.Background.CreateGradient(Color.DarkGray, Color.Blue); + Gravity = new Vector(0, -1100.0); - // pelissä kentät luodaan piirtämällä pikseleitä. Pikselin väri kuvaa aina jotain tiettyä asiaa kentällä - // ruutu = pikseli - ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kentat[numero]); - - ruudut.SetTileMethod(Color.Lime, LuoPelaaja); //LIME pikseli on pelaaja, 0, 255, 0 - ruudut.SetTileMethod(Color.Black, LuoTaso); //MUSTA on tiiliseinää - ruudut.SetTileMethod(Color.Red, LuoKelabottiSpawni); //PUNAISEEN voi spawnaa vihu - ruudut.SetTileMethod(Color.SkyBlue, LuoViinapullo); //VAALEANSNISET on pelaajaa parantavia viinapulloja 135, 206, 235 - ruudut.SetTileMethod(Color.Wheat, LuoExit); // 245, 222, 179 + // pelissä kentät luodaan piirtämällä pikseleitä. Pikselin väri kuvaa aina jotain tiettyä asiaa kentällä + // ruutu = pikseli + ColorTileMap ruudut = ColorTileMap.FromLevelAsset(_kentat[numero]); - ruudut.Execute(80, 80); - Timer.CreateAndStart(5.0, LuoKelabotti); + ruudut.SetTileMethod(Color.Lime, LuoPelaaja); //LIME pikseli on pelaaja, 0, 255, 0 + ruudut.SetTileMethod(Color.Black, LuoTaso); //MUSTA on tiiliseinää + ruudut.SetTileMethod(Color.Red, LuoKelabottiSpawni); //PUNAISEEN voi spawnaa vihu + ruudut.SetTileMethod(Color.SkyBlue, LuoViinapullo); //VAALEANSNISET on pelaajaa parantavia viinapulloja 135, 206, 235 + ruudut.SetTileMethod(Color.Wheat, LuoExit); // 245, 222, 179 + ruudut.SetTileMethod(Color.Lavender, LuoAnsa); // 220 208 255 - LuoElamalaskuri(); - LuoPistelaskuri(); + ruudut.Execute(80, 80); + Timer.CreateAndStart(5.0, LuoKelabotti); - Camera.Follow(pelaaja); + LuoElamalaskuri(); + LuoPistelaskuri(); + Camera.Follow(_pelaaja); + LisaaOhjaimet(); + } + } + + + /// <summary> + /// Aliohjelmassa lisätään ohjaimet + /// </summary> + private void LisaaOhjaimet() + { Keyboard.Listen(Key.A, ButtonState.Pressed, AaniVasemmalle, null, new Vector()); Keyboard.Listen(Key.D, ButtonState.Pressed, AaniOikealle, null, new Vector()); Keyboard.Listen(Key.A, ButtonState.Released, LopetaAaniVasemmalle, null, new Vector()); @@ -193,124 +209,160 @@ namespace KelaCombatTesti; Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, null, new Vector()); Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); - Keyboard.Listen(Key.Space, ButtonState.Pressed, LuoPesismaila, "", new Vector(90, 10), pelaaja); + Keyboard.Listen(Key.Space, ButtonState.Pressed, LuoPesismaila, "", new Vector(90, 10), _pelaaja); } - } - + + /// <summary> /// aliohjelma luo tiili-palikoita, joista kenttä rakentuu /// </summary> /// <param name="paikka">palikan paikka</param> /// <param name="leveys">palikan korkeus</param> /// <param name="korkeus">palikan leveys</param> - void LuoTaso(Vector paikka, double leveys, double korkeus) + private void LuoTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus); taso.Position = paikka; taso.CollisionIgnoreGroup = 2; taso.Color = Color.Gray; - taso.Image = TiiliseinaKuva; + taso.Image = _tiiliseinakuva; taso.Tag = "taso"; Add(taso); } + /// <summary> /// Aliohjelma, jossa luodaan seuraavaan kenttään vievä ovi /// </summary> /// <param name="paikka">oven paikka</param> /// <param name="x">oven leveys</param> /// <param name="y">oven korkeus</param> - void LuoExit(Vector paikka, double x, double y) + private void LuoExit(Vector paikka, double x, double y) { - PhysicsObject kolmio = PhysicsObject.CreateStaticObject(20, 100); - kolmio.Position = paikka; - kolmio.CollisionIgnoreGroup = 2; - kolmio.Color = Color.HotPink; - kolmio.Tag = "kolmio"; - Add(kolmio); + _exit = PhysicsObject.CreateStaticObject(100, 150); + _exit.Position = paikka; + _exit.CollisionIgnoreGroup = 2; + _exit.Color = Color.HotPink; + _exit.Tag = "exit"; + _exit.Image = _uloskaynti; + Add(_exit); } + + /// <summary> + /// pelaajaa vahingoittavan ansan luova aliohjelma + /// </summary> + /// <param name="paikka">ansan paikka</param> + /// <param name="x">ansan leveys</param> + /// <param name="y">ansan korkeus</param> + private void LuoAnsa(Vector paikka, double x, double y) + { + _ansa = PhysicsObject.CreateStaticObject(100, 150); + _ansa.CollisionIgnoreGroup = 2; + _ansa.Position = paikka; + _ansa.Image = _ansakuva; + _ansa.Tag = "ansa"; + Add(_ansa); + } + + + /// <summary> + /// Tekee kentälle koristeita + /// </summary> + /// <param name="kuuskulmio">mille alueelle koriste tehdään</param> + /// <returns>koriste</returns> + public static GameObject TeeKoriste(BoundingRectangle kuuskulmio) + { + GameObject koriste = new GameObject(400, 400, Shape.Hexagon); + koriste.Position = RandomGen.NextVector(kuuskulmio); + koriste.Color = Color.Rose; + return koriste; + } + + /// <summary> /// Aliohjelma luo pelaajaa parantavan viinapllon /// </summary> /// <param name="paikka">pullon paikka</param> /// <param name="x">pullon leveys</param> /// <param name="y">pullon korkeus</param> - void LuoViinapullo(Vector paikka, double x, double y) + private void LuoViinapullo(Vector paikka, double x, double y) { - Viinapullo = PhysicsObject.CreateStaticObject(50, 50); - Viinapullo.Position = paikka; - Viinapullo.Color = Color.White; - Viinapullo.Tag = "Viinapullo"; - Viinapullo.Image = ViinapulloKuva; - Add(Viinapullo); + _viinapullo = PhysicsObject.CreateStaticObject(50, 50); + _viinapullo.Position = paikka; + _viinapullo.Color = Color.White; + _viinapullo.Tag = "Viinapullo"; + _viinapullo.Image = _viinapullokuva; + Add(_viinapullo); } + /// <summary> /// Aliohjelma luo "haamupalikan" jonka sijaintiin kelabotti myöhemmin luodaan /// </summary> /// <param name="paikka">palikan paikka</param> /// <param name="leveys">palikan leveys</param> /// <param name="korkeus">palikan korkeus</param> - void LuoKelabottiSpawni(Vector paikka, double leveys, double korkeus) + private void LuoKelabottiSpawni(Vector paikka, double leveys, double korkeus) { - PhysicsObject BottiSpawni = PhysicsObject.CreateStaticObject(leveys, korkeus); - BottiSpawni.Position = paikka; - BottiSpawni.IgnoresCollisionResponse = true; + PhysicsObject bottispawni = PhysicsObject.CreateStaticObject(leveys, korkeus); + bottispawni.Position = paikka; + bottispawni.IgnoresCollisionResponse = true; //BottiSpawni.CollisionIgnoreGroup = 3; - BottiSpawni.IsVisible = false; - BottiSpawni.IgnoresGravity = true; - Add(BottiSpawni, -1); - spawnipaikat.Add(BottiSpawni); + bottispawni.IsVisible = false; + bottispawni.IgnoresGravity = true; + Add(bottispawni, -1); + _spawnipaikat.Add(bottispawni); } /// <summary> /// Aliohjelma, jossa luodaan pelaaja /// </summary> + /// <param name="paikka">pelaajan paikka</param> /// <param name="x">pelaajan x-koordinaatti</param> /// <param name="y">pelaajan y-koordinaatti</param> /// <returns>pelaaja</returns> - void LuoPelaaja(Vector paikka, double x, double y) + private void LuoPelaaja(Vector paikka, double x, double y) { - pelaaja = new PlatformCharacter(50.0, 100.0); - //pelaaja.Image = PelaajaKuva; - pelaaja.Mass = 1.0; - pelaaja.Shape = Shape.Rectangle; - pelaaja.Color = Color.Black; - pelaaja.Position = paikka; - pelaaja.CollisionIgnoreGroup = 1; - pelaaja.AnimWalk = new Animation(HenkiloSaapastelu); - pelaaja.AnimIdle = new Animation(PaikallaanAnimaatio); - pelaaja.AnimWalk.FPS = 3; - pelaaja.AnimFall = new Animation(PutoamisAnimaatio); - pelaaja.AnimFall.FPS = 12; - pelaaja.LoopFallAnim = true; + _pelaaja = new PlatformCharacter(50.0, 100.0); + _pelaaja.Mass = 1.0; + _pelaaja.Shape = Shape.Rectangle; + _pelaaja.Color = Color.Black; + _pelaaja.Position = paikka; + _pelaaja.CollisionIgnoreGroup = 1; + _pelaaja.AnimWalk = new Animation(_henkiloSaapastelu); + _pelaaja.AnimIdle = new Animation(_paikallaanAnimaatio); + _pelaaja.AnimWalk.FPS = 3; + _pelaaja.AnimFall = new Animation(_putoamisAnimaatio); + _pelaaja.AnimFall.FPS = 12; + _pelaaja.LoopFallAnim = true; // Törmäyksen käsittelijä, mitä tapahtuu, kun pelaaja osuu kelabotiin //Siis pelaajan elämien väheneminen VahnigoitaPelaajaa-aliohjelman mukaisesti - AddCollisionHandler(pelaaja, "Kelabotti", VahingoitaPelaajaa); - AddCollisionHandler(pelaaja, "Viinapullo", ParannaPelaajaa); - AddCollisionHandler(pelaaja, "kappale", VahingoitaPelaajaa); - AddCollisionHandler(pelaaja, "kolmio", KentanVaihto); - //AddCollisionHandler(kappale, "taso", TuhoaKappale); + AddCollisionHandler(_pelaaja, "Kelabotti", VahingoitaPelaajaa); + AddCollisionHandler(_pelaaja, "Viinapullo", ParannaPelaajaa); + AddCollisionHandler(_pelaaja, "kappale", VahingoitaPelaajaa); + AddCollisionHandler(_pelaaja, "exit", KentanVaihto); + AddCollisionHandler(_pelaaja, "ansa", VahingoitaPelaajaa); - Add(pelaaja); + Add(_pelaaja); } + /// <summary> /// Aliohjelma, joka luo pelaajalle elämälaskurin ja sen nimen: "Mielenterveys" /// </summary> - void LuoElamalaskuri() + private void LuoElamalaskuri() { - pelaajanelamaLaskuri = new DoubleMeter(100.0); - pelaajanelamaLaskuri.MaxValue = 100; - pelaajanelamaLaskuri.LowerLimit += ElamaLoppui; + _pelaajanElamaaskuri = new DoubleMeter(100.0); + _pelaajanElamaaskuri.MaxValue = 100; + _pelaajanElamaaskuri.LowerLimit += ElamaLoppui; ProgressBar elamapalkki = new ProgressBar(150, 18); elamapalkki.X = Screen.Left + 110; elamapalkki.Y = Screen.Bottom + 50; - elamapalkki.BindTo(pelaajanelamaLaskuri); + elamapalkki.BindTo(_pelaajanElamaaskuri); elamapalkki.Color = Color.Red; elamapalkki.BarColor = Color.Green; elamapalkki.BorderColor = Color.Black; @@ -322,19 +374,18 @@ namespace KelaCombatTesti; Add(elamapalkki); } - - + /// <summary> /// Aliohjelma, joka käsittelee pelaajan kuoleman ja ilmoittaa pelin loppumisen /// </summary> - void ElamaLoppui() + private void ElamaLoppui() { - Label Kuolema = new Label(800, 60, "Toimeentulohakemus hylätty."); - Kuolema.Y = 140; - Kuolema.Font = new Font(60); - Kuolema.TextColor = Color.Red; + Label kuolema = new Label(800, 60, "Toimeentulohakemus hylätty."); + kuolema.Y = 140; + kuolema.Font = new Font(60); + kuolema.TextColor = Color.Red; //Kuolema.Color = Color.Black; - Add(Kuolema); + Add(kuolema); } @@ -343,121 +394,115 @@ namespace KelaCombatTesti; /// </summary> /// <param name="koko">Pesismailan koko</param> /// <param name="pelaaja">kohde, johon Pesismaila liitetään</param> - void LuoPesismaila(Vector koko, PlatformCharacter pelaaja) + private void LuoPesismaila(Vector koko, PlatformCharacter pelaaja) { - PhysicsObject Pesismaila = new PhysicsObject(koko.X, koko.Y); - Pesismaila.Position = pelaaja.Position + new Vector(80*pelaaja.FacingDirection.GetVector().X, 10); - Pesismaila.CollisionIgnoreGroup = 1; - Pesismaila.Mass = 1; - Pesismaila.Tag = "Pesismaila"; - Add(Pesismaila); - Pesismaila.LifetimeLeft = TimeSpan.FromSeconds(0.075); - Sound Lyontiaani2 = Lyontiaani.CreateSound(); - Lyontiaani2.Volume = 1; - Lyontiaani2.Play(); - Pesismaila.IgnoresGravity = true; + _pesismaila = new PhysicsObject(koko.X, koko.Y); + _pesismaila.Position = pelaaja.Position + new Vector(80*pelaaja.FacingDirection.GetVector().X, 10); + _pesismaila.CollisionIgnoreGroup = 1; + _pesismaila.Mass = 1; + _pesismaila.Tag = "Pesismaila"; + Add(_pesismaila); + _pesismaila.LifetimeLeft = TimeSpan.FromSeconds(0.075); + Sound lyontiaani2 = _lyontiaani.CreateSound(); + lyontiaani2.Volume = 1; + lyontiaani2.Play(); + _pesismaila.IgnoresGravity = true; //PISTEET ei elämät - AddCollisionHandler(Pesismaila, "Kelabotti", KunVihollinenTuhoutuu); + AddCollisionHandler(_pesismaila, "Kelabotti", KunVihollinenTuhoutuu); } /// <summary> /// Tämä funktio luo Kelabotti-vihun ja sille annetaan pelaajan seuraamisaivot /// </summary> - /// <returns>Kelabotti</returns> - void LuoKelabotti() + private void LuoKelabotti() { - PhysicsObject spawni = spawnipaikat[RandomGen.NextInt(spawnipaikat.Count)]; - PlatformCharacter Kelabotti = new PlatformCharacter(50.0, 100.0); - Kelabotti.Color = Color.Orange; - Kelabotti.Image = KelabottiKuva; - Kelabotti.CollisionIgnoreGroup = 3; - Kelabotinelamalaskuri = new IntMeter(5); // Alussa on 5 elämää - Kelabotti.Tag = "Kelabotti"; - Kelabotti.Position = spawni.Position; - Kelabotti.AnimWalk = new Animation(KelabottiKavely); - Kelabotti.AnimWalk.FPS = 3; - Add(Kelabotti); + PhysicsObject spawni = _spawnipaikat[RandomGen.NextInt(_spawnipaikat.Count)]; + _kelabotti = new PlatformCharacter(50.0, 100.0); + _kelabotti.Color = Color.Orange; + _kelabotti.Image = _kelabottikuva; + _kelabotti.CollisionIgnoreGroup = 3; + _kelabotti.Tag = "Kelabotti"; + _kelabotti.Position = spawni.Position; + _kelabotti.AnimWalk = new Animation(_kelabottiKavely); + _kelabotti.AnimWalk.FPS = 3; + Add(_kelabotti); - FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja); + FollowerBrain seuraajanAivot = new FollowerBrain(_pelaaja); seuraajanAivot.Speed = 100; - Kelabotti.Brain = seuraajanAivot; + _kelabotti.Brain = seuraajanAivot; Timer heittoajastin = new Timer(); heittoajastin.Interval = 2; - heittoajastin.Timeout += delegate() { KelabotinAmmus(Kelabotti, "pelaaja"); }; + heittoajastin.Timeout += delegate() { KelabotinAmmus(_kelabotti, "pelaaja"); }; heittoajastin.Start(); - Kelabotti.Destroyed += heittoajastin.Stop; + _kelabotti.Destroyed += heittoajastin.Stop; } + /// <summary> /// Aliohjelma, jossa käsitellään Kelabotin heittämä ammus /// </summary> /// <param name="heittavaOlio">Kelabotti heittää ammuksen</param> /// <param name="kohdeolionTunniste">pelaajan tunniste</param> - public void KelabotinAmmus(PhysicsObject heittavaOlio, string kohdeolionTunniste) - { - PhysicsObject kappale = new PhysicsObject(15, 15, Shape.Triangle); - kappale.Hit(new Vector(180*pelaaja.FacingDirection.GetVector().X, 10)); - //kappale.Hit(new Vector()); - kappale.Position = heittavaOlio.Position; - kappale.CollisionIgnoreGroup = 3; - kappale.Color = Color.Silver; - kappale.Tag = "kappale"; - kappale.MaximumLifetime = TimeSpan.FromSeconds(1.5); - Add(kappale); - } -/* - public void TuhoaKappale(PhysicsObject kappale, PhysicsObject taso) + private void KelabotinAmmus(PhysicsObject heittavaOlio, string kohdeolionTunniste) { - kappale.Destroy(); + _kappale = new PhysicsObject(15, 15, Shape.Triangle); + _kappale.Hit(new Vector(180*_pelaaja.FacingDirection.GetVector().X, 10)); + _kappale.Position = heittavaOlio.Position; + _kappale.CollisionIgnoreGroup = 3; + _kappale.Color = Color.Silver; + _kappale.Tag = "kappale"; + _kappale.MaximumLifetime = TimeSpan.FromSeconds(1.5); + Add(_kappale); } -*/ + /// <summary> /// Tämä aliohjelma käsittlee sen, kun pelaaja osuu Kelabottiin /// </summary> /// <param name="pelaaja">pelaajahahmo</param> /// <param name="Kelabotti">pelin vihu; Kelabotti</param> - void VahingoitaPelaajaa(PhysicsObject pelaaja, PhysicsObject kappale) + private void VahingoitaPelaajaa(PhysicsObject pelaaja, PhysicsObject kappale) { int luku = RandomGen.NextInt(19, 34); - pelaajanelamaLaskuri.Value = pelaajanelamaLaskuri - luku; // Vähentää pelaajan elämää satunnaisen määrän + _pelaajanElamaaskuri.Value = _pelaajanElamaaskuri - luku; // Vähentää pelaajan elämää satunnaisen määrän - if (pelaajanelamaLaskuri.Value <= 0) //jos laskuri menee nollaan... + if (_pelaajanElamaaskuri.Value <= 0) //jos laskuri menee nollaan... { pelaaja.Destroy(); //...ja pelaaja tuhotaan //Pesismaila.Destroy();//...myös pesismaila } } + /// <summary> /// Aliohjelma, joka parantaa pelaajan, kun tämä koskee viinapulloa /// </summary> /// <param name="pelaaja">kohde, joka parannetaan</param> /// <param name="Viinapullo">parantava esine</param> - void ParannaPelaajaa(PhysicsObject pelaaja, PhysicsObject Viinapullo) + private void ParannaPelaajaa(PhysicsObject pelaaja, PhysicsObject viinapullo) { //Viinapullo.CollisionIgnoreGroup = 1; - if (pelaajanelamaLaskuri.Value < 99) + if (_pelaajanElamaaskuri.Value < 99) { //Viinapullo.CollisionIgnoreGroup = 0; - Viinapulloaani.Play(); - - pelaajanelamaLaskuri.Value = pelaajanelamaLaskuri.Value + 20; - pisteet.Value += 20; - Viinapullo.Destroy(); + _viinapulloaani.Play(); + _pelaajanElamaaskuri.Value = _pelaajanElamaaskuri.Value + 20; + _pisteet.Value += 20; + viinapullo.Destroy(); } } + /// <summary> /// Luo pistelaskurin pisteille, joita saa kun hakkaa kelabotteja /// </summary> - void LuoPistelaskuri() + private void LuoPistelaskuri() { Label opintoNopat = new Label(150, 50, "Opintonopat:"); opintoNopat.X = Screen.Left + 100; @@ -466,41 +511,43 @@ namespace KelaCombatTesti; opintoNopat.TextColor = Color.Black; Add(opintoNopat); - pisteet = new IntMeter(0); // Aloitetaan nollasta - pisteNaytto = new Label(); - pisteNaytto.X = Screen.Left + 170; - pisteNaytto.Y = Screen.Bottom + 95; - pisteNaytto.TextColor = Color.OrangeRed; - pisteNaytto.Font = new Font(20); - pisteNaytto.BindTo(pisteet); // Päivitetään teksti automaattisesti - Add(pisteNaytto); + _pisteet = new IntMeter(0); // Aloitetaan nollasta + _pisteNaytto = new Label(); + _pisteNaytto.X = Screen.Left + 170; + _pisteNaytto.Y = Screen.Bottom + 95; + _pisteNaytto.TextColor = Color.OrangeRed; + _pisteNaytto.Font = new Font(20); + _pisteNaytto.BindTo(_pisteet); // Päivitetään teksti automaattisesti + Add(_pisteNaytto); } + /// <summary> /// Käsittelee kelabotin tuhoamisen ja antaa siitö pisteitä /// </summary> /// <param name="pelaaja">pelaajahahmo</param> /// <param name="kelabotti">pelin vihu; Kelabotti</param> - void KunVihollinenTuhoutuu(PhysicsObject pelaaja, PhysicsObject kelabotti) + private void KunVihollinenTuhoutuu(PhysicsObject pelaaja, PhysicsObject kelabotti) { - Keladamageaani.Play(); - pisteet.Value += 100; // Lisää esim. 100 pistettä, kun botti tuhotaan + _keladamageaani.Play(); + _pisteet.Value += 100; // Lisää esim. 100 pistettä, kun botti tuhotaan kelabotti.Destroy(); // Poistaa botin näytöltä } + /// <summary> /// Aliohjelma, jossa käsitellään kentän vaihto /// </summary> /// <param name="pelaaja">pelaaja</param> - /// <param name="kolmio">esine, josta kenttä vaihtuu</param> - void KentanVaihto(PhysicsObject pelaaja, PhysicsObject kolmio) + /// <param name="exit">esine, josta kenttä vaihtuu</param> + private void KentanVaihto(PhysicsObject pelaaja, PhysicsObject exit) { - if (pisteet.Value >= 300) + if (_pisteet.Value >= 300) { - kenttanumero++; - LuoKentta(kenttanumero); + _kenttanumero++; + LuoKentta(_kenttanumero); } } } diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj b/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj index b455b72e61530cc6c8b82fe2c772ce6f6a42def6..fa60c0a5a94bf3c262306b188fe68389f9524692 100644 --- a/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj +++ b/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj @@ -74,6 +74,12 @@ <None Update="Content\Lyontiaani.wav"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> + <None Update="Content\Uloskaynti.png"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> + <None Update="Content\Tyohakemuskasa.png"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> </ItemGroup> </Project>