diff --git a/KelaCombat/KelaCombatTesti/Content/kentta1.png b/KelaCombat/KelaCombatTesti/Content/kentta1.png new file mode 100644 index 0000000000000000000000000000000000000000..496e9698dbff8ccc88faaaa707c8d8927ce83088 Binary files /dev/null and b/KelaCombat/KelaCombatTesti/Content/kentta1.png differ diff --git a/KelaCombat/KelaCombatTesti/Content/tiiliseina.png b/KelaCombat/KelaCombatTesti/Content/tiiliseina.png new file mode 100644 index 0000000000000000000000000000000000000000..a864a3ccf19b7402387dc606d7a5f3ba5008c907 Binary files /dev/null and b/KelaCombat/KelaCombatTesti/Content/tiiliseina.png differ diff --git a/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs b/KelaCombat/KelaCombatTesti/KelaCombatTesti.cs index e0b2aed0301ef6d0bdedd6ce9c30d54c8fcbc66b..0c9117c6bcdfa2cae7f1f2350c4574b47126142a 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 1e0a6fd54520eafb4dd06c4d897f908bc083afd6..5b7d0165a39a8f55e2f7ac904c7b000bd42d464e 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>