diff --git a/Hiko/Hiko/Hiko.cs b/Hiko/Hiko/Hiko.cs index 1ae6b300e582313644cc02d3a12119720e182fc4..0488e8a2491cfd4087d8e7cb835ab881f06899aa 100644 --- a/Hiko/Hiko/Hiko.cs +++ b/Hiko/Hiko/Hiko.cs @@ -4,6 +4,8 @@ using Jypeli.Controls; using Jypeli.Widgets; using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; using System.Threading; namespace Hiko @@ -29,20 +31,24 @@ namespace Hiko GameObject tahtain; Image taustakuva = LoadImage("Testitaustakuva"); IntMeter pistelaskuri; + Label aikanaytto; + int jaljellaOlevatVihut; + private ScoreList topLista = new ScoreList(10, false, 0); + bool temp = true; /// <summary> /// Luodaan peliin kenttä /// </summary> private static readonly String[] lines = { + " X X ", + " ______ X ", + " ____ ", " ", " ", - " ", - " ", - " ", - " ", - " ", - " X ", + " X ", + " ___ ", + " X ", " ___ ", " X ", " _____ ", @@ -52,38 +58,61 @@ namespace Hiko " X ", " __________ ", " ", - " ", - " ", - " ", - " ", + " X ", + " ____ ", + " X ", + " ______ ", " ", " ", }; private static readonly int tileWidth = 800 / lines[0].Length; private static readonly int tileHeight = 480 / lines.Length; + public static int LaskeVihollistenMaara(String[] vihutaulukko) + { + int vihujenLkm = 0; + for (int i = 0; i < vihutaulukko.Length; i++) + { + for (int j = 0; j < vihutaulukko[i].Length; j++) + { + if (vihutaulukko[i][j] == 'X') vihujenLkm++; + } + } + return vihujenLkm; + } + public override void Begin() { - // Kirjoita ohjelmakoodisi tähän - string[] vaihtoehdot = { "Aloita peli", "Parhaat pisteet", "Lopeta" }; - MultiSelectWindow alkuvalikko = new MultiSelectWindow("HIKO", vaihtoehdot); - - alkuvalikko.AddItemHandler(0, AloitaPeli); - //alkuvalikko.AddItemHandler(1, ParhaatPisteet); - alkuvalikko.AddItemHandler(2, Exit); - alkuvalikko.Color = Color.AshGray; - alkuvalikko.SetButtonColor(Color.BlueGray); - alkuvalikko.SetButtonTextColor(Color.Blue); - Add(alkuvalikko); + if (temp) + { + // Kirjoita ohjelmakoodisi tähän + + string[] vaihtoehdot = { "Aloita peli", "Tehokkaimmat nukkujat", "Lopeta" }; + MultiSelectWindow alkuvalikko = new MultiSelectWindow("HIKO", vaihtoehdot); + + alkuvalikko.AddItemHandler(0, AloitaPeli); + alkuvalikko.AddItemHandler(1, ParhaatPisteet); + alkuvalikko.AddItemHandler(2, Exit); + alkuvalikko.Color = Color.AshGray; + alkuvalikko.SetButtonColor(Color.BlueGray); + alkuvalikko.SetButtonTextColor(Color.Blue); + Add(alkuvalikko); + } + temp = false; } + /// <summary> /// Tämä aliohjelma aloittaa sen varsinaisen pelin /// </summary> public void AloitaPeli() { - Level.CreateBorders(); + //Level.CreateBorders(); + PhysicsObject alareuna = Level.CreateBottomBorder(); + alareuna.Restitution = 1.0; + alareuna.IsVisible = true; + Camera.ZoomToLevel(); TileMap tiles = TileMap.FromStringArray(lines); @@ -98,9 +127,27 @@ namespace Hiko tiles.SetTileMethod('X', LuoMaavihu); tiles.SetTileMethod('_', LuoTaso); tiles.Execute(tileWidth, tileHeight); + jaljellaOlevatVihut = LaskeVihollistenMaara(lines); + AddCollisionHandler(pelaaja, alareuna, OsuiReunaan); + + } + void ParhaatPisteet() + { + temp = true; + topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml"); + HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", topLista); + + Add(topIkkuna); + + Mouse.Listen(MouseButton.Left, ButtonState.Down, Begin, null); + + + } + + /// <summary> /// Luo pelaajamodellin ja antaa sille ominaisuudet /// </summary> @@ -117,10 +164,43 @@ namespace Hiko Add(pelaaja); return pelaaja; } + + + /// <summary> + /// Kun pelaaja törmää vihuun aliohjelma + /// </summary> + /// <param name="tormaaja"></param> + /// <param name="kohde"></param> void PelaajaTormasi(PhysicsObject tormaaja, Vihu kohde) + { + PelaajaKuolee(); + } + + + /// <summary> + /// Kun pelaaja osuu kentän reunaan + /// </summary> + /// <param name="pelaaja"></param> + /// <param name="kohde"></param> + void OsuiReunaan(PhysicsObject pelaaja, PhysicsObject kohde) + { + PelaajaKuolee(); + } + + + /// <summary> + /// Kun pelaaja kuolee x-asian tapahtumasta, niin tämä suoritetaan + /// </summary> + void PelaajaKuolee() { MessageDisplay.Add("You died!"); - //Exit(); + pelaaja.Destroy(); + + this.Pause(); + topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml"); + + HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", topLista); + Add(topIkkuna); } /// <summary> @@ -245,7 +325,38 @@ namespace Hiko private void LuotiOsuuVihuun(PhysicsObject luoti, Vihu vihu) { MessageDisplay.Add("luoti osui vihuun"); + pistelaskuri.Value++; + + if (vihu.Elamalaskuri.Value == 1) jaljellaOlevatVihut--; + vihu.Elamalaskuri.Value--; + + if (jaljellaOlevatVihut == 0) VoitaPeli(); + } + + + void VoitaPeli() + { + MessageDisplay.Add(Double.Parse(aikanaytto.Text).ToString()); + this.Pause(); + + + topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml"); + double i = Double.Parse(aikanaytto.Text); + + + double tehokkuus = pistelaskuri.Value / i; + + HighScoreWindow topIkkuna = new HighScoreWindow("Tehokkaimmat nukkujat", "Hiivuit listalle ajalla", topLista, tehokkuus); + + topIkkuna.Closed += TallennaPisteet; + Add(topIkkuna); + } + + + private void TallennaPisteet(Window sender) + { + DataStorage.Save<ScoreList>(topLista, "pisteet.xml"); } @@ -269,10 +380,11 @@ namespace Hiko /// </summary> void LuoAikalaskuri() { + Jypeli.Timer aikalaskuri = new Jypeli.Timer(); aikalaskuri.Start(); - Label aikanaytto = new Label(); + aikanaytto = new Label(); aikanaytto.TextColor = Color.Orange; aikanaytto.DecimalPlaces = 1; aikanaytto.BindTo(aikalaskuri.SecondCounter);