Skip to content
Snippets Groups Projects
Commit 2d8555f3 authored by Pekka Pihlajamaa's avatar Pekka Pihlajamaa
Browse files

Vahan siistimista

parent 6aec2e5c
No related branches found
No related tags found
No related merge requests found
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment