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