From 7d0608038107e0f115b62678c49ec76d6272307c Mon Sep 17 00:00:00 2001 From: Hanki Sakari <sakari.s.b.hanki@student.jyu.fi> Date: Fri, 28 Mar 2025 13:24:24 +0200 Subject: [PATCH] =?UTF-8?q?valmis=20harjoitusty=C3=B6=20:DD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Content/Tyohakemuskasa.png | Bin 0 -> 864 bytes .../KelaCombatTesti/Content/Uloskaynti.png | Bin 0 -> 9743 bytes .../KelaCombatTesti/Content/kentta1.png | Bin 759 -> 786 bytes KelaCombat/KelaCombatTesti/KelaCombatTesti.cs | 501 ++++++++++-------- .../KelaCombatTesti/KelaCombatTesti.csproj | 6 + 5 files changed, 280 insertions(+), 227 deletions(-) create mode 100644 KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png create mode 100644 KelaCombat/KelaCombatTesti/Content/Uloskaynti.png diff --git a/KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png b/KelaCombat/KelaCombatTesti/Content/Tyohakemuskasa.png new file mode 100644 index 0000000000000000000000000000000000000000..389ed7f984a324b3f07f3a2ba09b6b6c0ed895ac GIT binary patch literal 864 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r63?ysp-_HY5jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCils0(?ST|Ns9FWQHEPTnD5$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~ zqEv=}#LT=BJwMkF1yemkJ@f8s-z|Y^wxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqr zX)rQ_#hHL?Lq;YB0U#X(#F_0ZVDT&<8w3)77^ELYqgl!T^x*_{1{R<S10!Pt#sv^l zK{{9$KunqfWP<<`&>SYP${<S%APcI?(7*sBtLi?lcd^OVqd?pKdb&7<cpSeP=G}Bu zfy3C`<6ZsDz>H9l-*@^p&$w>Z(l4O<Kd*7S!-{p>3fx_J8JXvLgREr^PUpH9x5;fH zo0(Jb0>g}l1%Eb}yng=J<)G+`hLcY_P9<?U7*)ME@I7#zuE$U5vxbXmzkQHr4)NNa zKC9=$6n~LyPeG?kCpu?MT4^@RHrz#<QS$Es$)k4@e=I+Gk?9G;KAnv*d|TGc6s*}X zZ&6JA3x+$_F59p#&|AJZ>?NP(9Eq?)!Ud%zC3}QExU}ak+LZa^?3?~&e_J0*?9ES* zo-S?LIPsg@ZvpLdYq^%)c@{X){;p8=+z*bL0(Yu{UQSza-G1(xeUaA```+jZw5SM0 z9lZVi=<^l1s#|Q!eDAq2ITv#nXQ$|?2(HkSTb>ho?6uU%V+*E)E6$J5y<B@=(1qo1 zx}F{Li=GSXpUL!ONdB9ZbtALf@Xv?++_sPIGNiUU#zY1rUU?n!bMc3n8d62Z;cPO2 zz0b~GIl>kG=1T44xozeQ^2I)r=Q5TbywX^hZU6OJOiXcc(Cy08(bbw-7y2(BII!jY zd_legyl&@RJA!t&`}*^D?^xpWxU1!bMzb30@rTp4ti5NnU$1}ti>q<F_e^GLH|G6a z?6*^H*V;}SuOn-t&+xKV2EBZm5&3HSs&xy0&bjTQ#WI0;tw*2^pTp;KpL*uRgbEAZ cTctMD{!5qmOGnFj8K6Yr>FVdQ&MBb@01iVrtpET3 literal 0 HcmV?d00001 diff --git a/KelaCombat/KelaCombatTesti/Content/Uloskaynti.png b/KelaCombat/KelaCombatTesti/Content/Uloskaynti.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1f40131fde8efa45f4a9b7e5668068f80ba101 GIT binary patch literal 9743 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 literal 0 HcmV?d00001 diff --git a/KelaCombat/KelaCombatTesti/Content/kentta1.png b/KelaCombat/KelaCombatTesti/Content/kentta1.png index ac5aa10aad5aa7c4e5a10d9f722d11bf204aec1f..ff43ff741d2c384ce4102091d6112bc5ca0b3767 100644 GIT binary patch delta 481 zcmV<70UrMM1(F7^JOO{fNkl<ZNK3_*?NP%p42BcfgLPpa_Mi;F9RtAM{tkL&%aUx_ zaoSvY?v&d4wv#wrh%L)0Y+FiI|AIWmWn1$AVEhQU-V+c10bh8V+j4T6@*80bZ+Wwk zw8+;d-xw$Po><*s>^;7h*=MBGySZz_IES~e?->u*N~y5g=QMw<=(J<EdVj0>YuZP% zbC!0+yb&D%NZ{p#t_6NEvhDTqlcF&G$YX;|t23|NqeMh+K_uu61Aws-YkP?IA*2fj z&Q*KPc1R9khA!+KKGnD%Z<k*l?-bYlnA@2`Z>y=E98hFfo2-aQ$|!maN5K6^s1_6? z8i>W}1dSROCZ&HaIZ;gs8yOX=Ng3F)cXHXH7><kf7}*G<nCVxUj3|eO_vaaU5*5x| z8O3ODi;wZ1^1)44wrOE8-h)X@_}rSEb>puSoJ9nyt0gD3uVMifX^ChH`$RsVO=l@y z!F%7}3-|nOBN?h<`VU&O)&MP>9xW&Qr3v(qTtVi%y*OE3Axv)(h7_FrLq;~xw`*?o z;Tif$D*MQ*(>&1%>paPawPmZX-|y0Z2hJqaV)MfBKa6a5AV-}iK-^A|TmFGOkY)J; X;vxZl^Rv+B00000NkvXXu0mjfM-1zC delta 454 zcmV;%0XhDX2KNQ9JOO{ENkl<ZNK3_*-BrUd422WegLPpa_Mjs$0KD>?>Pl85|HyVo z3g0<y9sBA^b`rM>v88qi+a^}!H%NVaY-{QO^#20R_r%?QAWyu_Z8?dibUpl5pW(=D zx^%05RXl>uuDb7$&#?B26|ZE4t$vovf}osZuT#9HG3L%L^@@LaBZ3BCkhd55+~F4^ z&Ar~fBnthH)K5U-E$vE?(Gg|Tkb1>PG?(l&sJ5yY=c+$v14Pht2w`>esmA?yyM1$i zklgm>;4VR~&OVg#@ec^Iu9YidWUv+8ha(_A5^4z*jRrd7#}td|C#FGLvQS(SKC+dp zL>yQdom@UCy8VBo5xqGA7Blr4lM(x&k?Z*iHR%w}T<x{7;F>%pSISwg8lJPnI(Y_X zOyu6?&SU*wCy2EveynWC)W3>5n9-7m_{h{yA5hzQc2(oOugDWedS6I_vbg#irTN(g z5Dp}B1Sg$%`{&0VVea(*Uye$P=gr$Rd}S;4kGzTIu{Ay!rH^QMbic<xpYK{g4#d=` w#Oj6Pe;8>#10JPM0YV0n$IyR|AI7rW0Y&Pn6ivH=hyVZp07*qoM6N<$g2eRWQ~&?~ diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs index 7770298..1a43332 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 b455b72..fa60c0a 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> -- GitLab