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