diff --git a/Hiko/Hiko/Hiko.cs b/Hiko/Hiko/Hiko.cs index f6d0b5e229caa354e68ff8114f4439b850f4f8f2..e66cb756c921710dc36f4ce07db8eeed7098b668 100644 --- a/Hiko/Hiko/Hiko.cs +++ b/Hiko/Hiko/Hiko.cs @@ -8,13 +8,30 @@ using System.Threading; namespace Hiko { - public class Hiko : PhysicsGame + /// <summary> + /// Tehdään vihuluokka helpottamaan hitpointtien laskussa + /// </summary> + class Vihu : PlatformCharacter + { + private IntMeter elamalaskuri = new IntMeter(3, 0, 3); + public IntMeter Elamalaskuri { get { return elamalaskuri; } } + public Vihu(double leveys, double korkeus) + :base(leveys, korkeus) + { + elamalaskuri.LowerLimit += delegate { this.Destroy(); }; + } + } + + public class Hiko : PhysicsGame { PhysicsObject pelaaja; GameObject tahtain; Image taustakuva = LoadImage("Testitaustakuva"); + /// <summary> + /// Luodaan peliin kenttä + /// </summary> private static readonly String[] lines = { " ", @@ -24,7 +41,15 @@ namespace Hiko " ", " ", " ", + " X ", + " ___ ", + " X ", + " _____ ", + " X ", + " ____ ", " ", + " X ", + " __________ ", " ", " ", " ", @@ -32,14 +57,6 @@ namespace Hiko " ", " ", " ", - " ", - " ", - " X X ", - " X X X ", - " X X X ", - " X X X ", - " X X X ", - " X X X ", }; private static readonly int tileWidth = 800 / lines[0].Length; private static readonly int tileHeight = 480 / lines.Length; @@ -57,9 +74,17 @@ namespace Hiko Gravity = new Vector(0.0, -981.0); LuoOhjaimet(); LuoTahtain(); + LuoAikalaskuri(); tiles.SetTileMethod('X',LuoMaavihu); + tiles.SetTileMethod('_',LuoTaso); tiles.Execute(tileWidth, tileHeight); } + + + /// <summary> + /// Luo pelaajamodellin ja antaa sille ominaisuudet + /// </summary> + /// <returns></returns> PhysicsObject LuoPelaaja() { pelaaja = new PhysicsObject(20, 40); @@ -71,18 +96,34 @@ namespace Hiko Add(pelaaja); return pelaaja; } + + + /// <summary> + /// Luo vihollisolion + /// </summary> + /// <param name="paikka"></param> + /// <param name="leveys"></param> + /// <param name="korkeus"></param> void LuoMaavihu(Vector paikka, double leveys, double korkeus) { - PlatformCharacter maavihu = new PlatformCharacter(leveys, korkeus); + //PlatformCharacter maavihu = new PlatformCharacter(leveys, korkeus); + Vihu maavihu = new Vihu(leveys, korkeus); maavihu.Shape = Shape.Circle; maavihu.Color = Color.Blue; maavihu.Position = paikka; + maavihu.Tag = "maavihu"; PlatformWandererBrain tasoaivot = new PlatformWandererBrain(); tasoaivot.Speed = 100; maavihu.Brain = tasoaivot; maavihu.Image = LoadImage("örkki"); Add(maavihu); } + + + /// <summary> + /// Luo näkyvän indikaattorin tähtäimestä + /// </summary> + /// <returns></returns> GameObject LuoTahtain() { tahtain = new GameObject(30.0, 30.0, Shape.Circle); @@ -90,6 +131,11 @@ namespace Hiko Add(tahtain); return tahtain; } + + + /// <summary> + /// Luo tarvittavat ohjaimet pelaajalle + /// </summary> public void LuoOhjaimet() { Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0)); @@ -105,16 +151,32 @@ namespace Hiko Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, null); } + + + /// <summary> + /// Tämä aliohjelma liikuttaa pelaajaa tiettyyn suuntaan + /// </summary> + /// <param name="vektori">Minne suuntaan sitä liikutetaan</param> void LiikutaPelaajaa(Vector vektori) { pelaaja.Push(vektori); } + + + /// <summary> + /// Tässä kerrotaan missä tähtäin on ruudulla + /// </summary> void KuunteleLiiketta() { tahtain.X = Mouse.PositionOnWorld.X; tahtain.Y = Mouse.PositionOnWorld.Y; } + + + /// <summary> + /// Tämä luo projektiilin jolla voi tuhota vihuja + /// </summary> void Ammu() { PhysicsObject luoti = new PhysicsObject(20, 20); @@ -130,12 +192,70 @@ namespace Hiko Add(luoti); //luoti.Hit(new Vector(pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X, pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y)); - Vector suunta = new Vector((pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X) * -1, (pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y) * -1); + Vector suunta = AnnaLuodinSuunta(pelaaja); Angle a = suunta.Angle; luoti.Hit(Vector.FromLengthAndAngle(200, a)); + AddCollisionHandler<PhysicsObject, Vihu>(luoti, LuotiOsuuVihuun); + } + + + /// <summary> + /// Tässä funktio palauttaa luodin suunnan + /// </summary> + /// <param name="pelaaja">tarvittava positio mistä se ammutaan</param> + /// <returns></returns> + public Vector AnnaLuodinSuunta(PhysicsObject pelaaja) + { + return new Vector((pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X) * -1, (pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y) * -1); + } + + + /// <summary> + /// Tässä kerrotaan mitä tapahtuu kun luoti osuu pelaajaan + /// </summary> + /// <param name="luoti">projektiili joka osuu</param> + /// <param name="vihu">mihin osuu</param> + private void LuotiOsuuVihuun(PhysicsObject luoti, Vihu vihu) + { + MessageDisplay.Add("luoti osui vihuun"); + vihu.Elamalaskuri.Value--; + } + + + /// <summary> + /// Tämä aliohjelma luo tasanteita kenttään + /// </summary> + /// <param name="paikka">tason paikka koordinaatistossa</param> + /// <param name="leveys">tason leveys</param> + /// <param name="pituus">tason korkeus</param> + void LuoTaso(Vector paikka, double leveys, double pituus) + { + Surface taso = new Surface(leveys, pituus); + taso.Position = paikka; + taso.Color = Color.Orange; + Add(taso); + } + + + /// <summary> + /// Tässä on aikalaskuri peliin + /// </summary> + void LuoAikalaskuri() + { + Jypeli.Timer aikalaskuri = new Jypeli.Timer(); + aikalaskuri.Start(); + + Label aikanaytto = new Label(); + aikanaytto.TextColor = Color.Orange; + aikanaytto.DecimalPlaces = 1; + aikanaytto.BindTo(aikalaskuri.SecondCounter); + aikanaytto.Position = new Vector(0, 300); + Add(aikanaytto); + } + } } \ No newline at end of file