From 78860f069d0ceb9b4d636f27eab24f7624d7009e Mon Sep 17 00:00:00 2001
From: Hanki Sakari <sakari.s.b.hanki@student.jyu.fi>
Date: Fri, 21 Mar 2025 15:20:44 +0200
Subject: [PATCH] =?UTF-8?q?lis=C3=A4sin=20kent=C3=A4n,=20jota=20voi=20muok?=
 =?UTF-8?q?ata=20piirt=C3=A4m=C3=A4ll=C3=A4,=20pelaajaa=20parantavia=20vii?=
 =?UTF-8?q?napulloja=20ja=20kent=C3=A4ll=C3=A4=20on=20paikkoja,=20joihin?=
 =?UTF-8?q?=20kelabotteja=20voi=20spawnaa=20satunnaisesti?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../KelaCombatTesti/Content/kentta1.png       | Bin 0 -> 555 bytes
 .../KelaCombatTesti/Content/tiiliseina.png    | Bin 0 -> 1199 bytes
 KelaCombat/KelaCombatTesti/KelaCombatTesti.cs | 134 +++++++++++-------
 .../KelaCombatTesti/KelaCombatTesti.csproj    |   6 +
 4 files changed, 90 insertions(+), 50 deletions(-)
 create mode 100644 KelaCombat/KelaCombatTesti/Content/kentta1.png
 create mode 100644 KelaCombat/KelaCombatTesti/Content/tiiliseina.png

diff --git a/KelaCombat/KelaCombatTesti/Content/kentta1.png b/KelaCombat/KelaCombatTesti/Content/kentta1.png
new file mode 100644
index 0000000000000000000000000000000000000000..496e9698dbff8ccc88faaaa707c8d8927ce83088
GIT binary patch
literal 555
zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3jKx9jP7LeL$-D$|SkfJR9T^xl
z_H+M9WCij$3p^r=85sBufG}g$wN6f;phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN
zp4p#^$JYbZY)g&sO!M^AV&DLBSQ(@kSs56CEH5CIhO$Af(O_f-i!%Y)hKx)M0zf(n
zh%?(+z~WgzHVEu5V`O;2jG)mhWdKS|U}s<fsx&Y%Heg%;F%@JZ>jH>LQ-Ev`U;>)U
z1XdYjX#r$Gbr~8MfMiu4{IQu`n$ZAc-tu&D4Ds-OJ0+0skOEKJ#oZNL{4d__>G)Wi
z?=ib9(ZPMU$g~-?oK1p1ehBVp6-d%z*pl9`&)UrYfsp^>_eX1r!)%V!sQMOHcF2d=
zugnYFD>z9)sNm(sfWJ$lTE7%MbvoP4_Sf_;!<=ZLewNzJex*lM%M|~13Ubxv8a*oT
zbedQHS5|8G>fl9lnQPm(TlMO>E|az1baictm}cMkqn69AN;}@a7q(sOiQCMIl%Qp^
zXGl(pQI^}pee3m;c~RPB{;^$(lGDB@E`77S|F+%w@5`lv=e^3z*nVrKK;1MZ<Jp|H
R`}9FR_H^}gS?83{1OQw&q3r+w

literal 0
HcmV?d00001

diff --git a/KelaCombat/KelaCombatTesti/Content/tiiliseina.png b/KelaCombat/KelaCombatTesti/Content/tiiliseina.png
new file mode 100644
index 0000000000000000000000000000000000000000..a864a3ccf19b7402387dc606d7a5f3ba5008c907
GIT binary patch
literal 1199
zcmeAS@N?(olHy`uVBq!ia0y~yV4MTQsvJx}k@#naF9RvY;vjb?hIQv;UIIBR>5jgR
z3=A9lx&I`x0{NT;9+AZi419+{nDKc2iWHz47f%<*kczmscXv-bWWeCyxZ`zmL)4Y&
zQo(M?<#HlBneE@JO_Qp))_(B3<#Xl*kJ9ZKg<N<&1WgrOuQZ4RG6%sqQ~o}_ZFsDl
zuORcdm+!>}p4<K)B~z5Mve&+6dGP9wH+$i7<>d7rY#<USdPg~Efl1u}neu#2anHtd
z2J!EIYV4{x3Tn5_cj#KdsJVar_1Ayv-b)@hDl5)f?Q!Der}VX3-2>8pb1vzSnxK>g
zR<ww1ltXG5oGL!|^S?xL&2yEtTfcF<>YF-i5u+qD(A}@d>|l`my{KWvWy_V{#l9y}
zF|^;;na$nzoAZ0(Qn4i&cV+^k807M(3sKqq59(q>Oy>4oP3il+AqXkkQk>Ez9DmIJ
YVxF!@<5c|&U?Icc>FVdQ&MBb@0F)e*{r~^~

literal 0
HcmV?d00001

diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs
index e0b2aed..0c9117c 100644
--- a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs
+++ b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs
@@ -21,9 +21,12 @@ namespace KelaCombatTesti;
     {
         PlatformCharacter pelaaja;
         PhysicsObject Pesismaila;
+        PhysicsObject Viinapullo;
         PlatformCharacter Kelabotti;
-        private Image KelabottiKuva = LoadImage("Kelabotti");
-        private Image PelaajaKuva = LoadImage("Pelaaja.png");
+        private Image TiiliseinaKuva = LoadImage("tiiliseina");
+        Image KelabottiKuva = LoadImage("Kelabotti");
+        Image PelaajaKuva = LoadImage("Pelaaja.png");
+        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 
@@ -42,17 +45,12 @@ namespace KelaCombatTesti;
         public override void Begin()
         {
             LuoKentta();
-            LuoKelabotti();
             LuoElamalaskuri();
-            
-            
             LuoPistelaskuri(); // Alustetaan pistelaskuri 
             
             
             //Ajastin, joka lisää uuden vihollisen joka 5. sekunti 
-            Timer.CreateAndStart(5.0, LisaaVihollinen); 
-            
-          
+           
             
             //kelabotin elämien väheneminen VahingoitaKelabottia aliohjelman mukaisesti
             //AddCollisionHandler(Kelabotti, "Pesismaila", VahingoitaKelabottia);
@@ -93,58 +91,84 @@ namespace KelaCombatTesti;
         /// </summary>
         void LuoKentta()
         {
-         
-            Level.BackgroundColor = Color.Pink;
+
+            Level.Background.CreateGradient(Color.DarkGray, Color.Blue);
             Gravity = new Vector(0, -981.0);
             
-            PhysicsObject vasenReuna = Level.CreateLeftBorder();
-            vasenReuna.Restitution = 0.0;
-            vasenReuna.KineticFriction = 0.0;
-            vasenReuna.IsVisible = false;
-
-            PhysicsObject oikeaReuna = Level.CreateRightBorder();
-            oikeaReuna.Restitution = 0.0;
-            oikeaReuna.KineticFriction = 0.0;
-            oikeaReuna.IsVisible = false;
-
-            PhysicsObject ylaReuna = Level.CreateTopBorder();
-            ylaReuna.Restitution = 0.0;
-            ylaReuna.KineticFriction = 0.0;
-            ylaReuna.IsVisible = false;
-
-            PhysicsObject alaReuna = Level.CreateBottomBorder();
-            alaReuna.Restitution = 1.0;
-            alaReuna.IsVisible = true;
-            alaReuna.KineticFriction = 0.0;
-            alaReuna.Color = Color.Gray;
+           
+            // pelissä kentät luodaan piirtämällä pikseleitä. Pikselin väri kuvaa aina jotain tiettyä asiaa kentällä
+            // ruutu = pikseli
+            ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
+            
+            ruudut.SetTileMethod(Color.Lime, LuoPelaaja); //LIME pikseli on pelaaja
+            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
+            
+            ruudut.Execute(70, 70);
 
+            
+            
+            
+            Timer.CreateAndStart(5.0, LuoKelabotti);
+        }
+        //tämä aliohjelma luo tiili-palikoita, joista kenttä (tällä hetkellä) rakentuu
+        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;
+            Add(taso);
+        }
+        //tämä aliohjelma luo pelaajaa parantavan viinapllon
+        void LuoViinapullo(Vector paikka, double x, double y)
+        {
+            Viinapullo = PhysicsObject.CreateStaticObject(20, 20);
+            Viinapullo.Position = paikka;
+            Viinapullo.Color = Color.White;
+            Viinapullo.Tag = "Viinapullo";
+            Add(Viinapullo);
 
-            pelaaja = LuoPelaaja(500.0, 0.0);
+        }
 
+        //tämä aliohjelma luo "haamupalikan" jonka sijaintiin kelabotti myöhemmin luodaan
+        void LuoKelabottiSpawni(Vector paikka, double leveys, double korkeus)
+        {
+            PhysicsObject BottiSpawni = PhysicsObject.CreateStaticObject(leveys, korkeus);
+            BottiSpawni.Position = paikka;
+            BottiSpawni.CollisionIgnoreGroup = 1;
+            BottiSpawni.IsVisible = false;
+            BottiSpawni.IgnoresGravity = true;
+            Add(BottiSpawni, -1);
+            spawnipaikat.Add(BottiSpawni);
         }
         
+      
         /// <summary>
         /// Aliohjelma, jossa luodaan pelaaja
         /// </summary>
         /// <param name="x">pelaajan x-koordinaatti</param>
         /// <param name="y">pelaajan y-koordinaatti</param>
         /// <returns>pelaaja</returns>
-        PlatformCharacter LuoPelaaja(double x, double y)
+        void LuoPelaaja(Vector paikka, double x, double y)
         {
-            PlatformCharacter pelaaja = new PlatformCharacter(50.0, 100.0);
+            pelaaja = new PlatformCharacter(50.0, 100.0);
             pelaaja.Image = PelaajaKuva;
             pelaaja.Mass = 1.0;
             pelaaja.Shape = Shape.Rectangle;
             pelaaja.Color = Color.Black;
-            pelaaja.X = x;
-            pelaaja.Y = y;
+            pelaaja.Position = paikka;
+            pelaaja.CollisionIgnoreGroup = 1;
+          
             // 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);
             
             Add(pelaaja);
             
-            return pelaaja;
         }
         
         /// <summary>
@@ -168,9 +192,10 @@ namespace KelaCombatTesti;
             tekstikentta.Y = Screen.Bottom + 70;
             tekstikentta.Font = new Font(20);
             Add(tekstikentta);
-            Add (elamapalkki);
+            Add(elamapalkki);
 
         }
+        
 
        
         /// <summary>
@@ -214,14 +239,16 @@ namespace KelaCombatTesti;
         /// Tämä funktio luo Kelabotti-vihun ja sille annetaan pelaajan seuraamis aivot
         /// </summary>
         /// <returns>Kelabotti</returns>
-        PlatformCharacter LuoKelabotti()
+        void LuoKelabotti()
         {
+            Jypeli.PhysicsObject spawni = spawnipaikat[RandomGen.NextInt(spawnipaikat.Count)];
             PlatformCharacter Kelabotti = new PlatformCharacter(80.0, 80.0);
             Kelabotti.Color = Color.Orange;
             Kelabotti.Image = KelabottiKuva;
             Kelabotti.MirrorImage();
             Kelabotinelamalaskuri = new IntMeter(5); // Alussa on 5 elämää 
             Kelabotti.Tag = "Kelabotti";
+            Kelabotti.Position = spawni.Position;
             Add(Kelabotti);
             
             
@@ -229,19 +256,10 @@ namespace KelaCombatTesti;
             seuraajanAivot.Speed = 100;
 
             Kelabotti.Brain = seuraajanAivot;
-            return Kelabotti;
+           
             
         }
-        /// <summary>
-        /// Lisää Kelabotteja
-        /// </summary>
-        void LisaaVihollinen() 
-        { 
-            Random rand = new Random(); 
-            double x = rand.Next(-400, 400); // Satunnainen X-koordinaatti 
-            double y = rand.Next(-200, 200); // Satunnainen Y-koordinaatti 
-            LuoKelabotti(); // Luodaan uusi vihollinen satunnaiseen paikkaan
-        } 
+       
         /// <summary>
         /// Tämä aliohjelma käsittlee sen, kun pelaaja osuu Kelabottiin
         /// </summary>
@@ -259,8 +277,24 @@ namespace KelaCombatTesti;
                 //Pesismaila.Destroy();//...myös pesismaila
             } 
             
-        } 
+        }
         
+        //tämä aliohjelma määrää, mitä käy, kun pelaaja koskee viinapulloa
+
+        void ParannaPelaajaa(PhysicsObject pelaaja, PhysicsObject Viinapullo)
+        {
+            //Viinapullo.CollisionIgnoreGroup = 1;
+            
+            if (pelaajanelamaLaskuri.Value < 90)
+            {
+                //Viinapullo.CollisionIgnoreGroup = 0;
+                pelaajanelamaLaskuri.Value = pelaajanelamaLaskuri.Value + 20;
+                Viinapullo.Destroy();
+            }
+            
+            
+        }
+
         //tää ei toimi vielä
         void VahingoitaKelabottia(PhysicsObject Kelabotti, PhysicsObject Pesismaila) 
         { 
diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj b/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj
index 1e0a6fd..5b7d016 100644
--- a/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj
+++ b/KelaCombat/KelaCombatTesti/KelaCombatTesti.csproj
@@ -20,6 +20,12 @@
       <None Update="Content\Kelabotti.png">
         <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       </None>
+      <None Update="Content\kentta1.png">
+        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      </None>
+      <None Update="Content\tiiliseina.png">
+        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      </None>
     </ItemGroup>
 
 </Project>
-- 
GitLab