source: 2016/24/LasseK/TankkiPeli/TankkiPeli/TankkiPeli/TankkiPeli.cs @ 7392

Revision 7392, 7.0 KB checked in by latukova, 3 years ago (diff)
Line 
1
2using System;
3using System.Collections.Generic;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9
10public class TankkiPeli : PhysicsGame
11{
12    Image Tykkikuva = LoadImage("Tykki");
13    Image TankkiRunko = LoadImage("VaununRunko");
14    Image Tornikuva = LoadImage("Tykkitorni");
15    Image Tykki2 = LoadImage("TykkiJonkaMuokkasit");
16    Image kokoTankki = LoadImage("kokotankki");
17    Image Ammus1 = LoadImage("Ammus1");
18    //hysicsObject Tankki;
19    //PhysicsObject Torni;
20    //PhysicsObject Tykki;
21
22    Tankki tankki;
23    Tankki kakkostankki;
24    public override void Begin()
25    {
26        Kentta();
27        LuoTankki();
28        AsetaOhjaimet();
29    }
30
31    void LiikutaTykkiä(Tankki tankki, double Suunta)
32    {
33        GameObject tykki = ((Tankki)tankki).Tykki;
34        tykki.Angle += Angle.FromRadians(Suunta) * (tankki.FacingDirection == Direction.Left ? -1 : 1);
35
36        if (tankki.Tykki.Angle.MainDirection != tankki.FacingDirection)
37        {
38            tykki.Angle -= Angle.FromRadians(Suunta);
39        }
40
41
42    }
43
44    void AsetaOhjaimet()
45    {
46        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
47
48        Keyboard.Listen(Key.Left, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(-2500.0, 0));
49            if (tankki.FacingDirection == Direction.Right) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Left; }, "Liikuttaa Tankkia Vasempaan");
50        Keyboard.Listen(Key.Right, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(2000.0, 0)); if (tankki.FacingDirection == Direction.Left) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Right; }, "Liikuttaa Tankkia Oikealle");
51
52        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", tankki, 0.1);
53        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", tankki, -0.1);
54
55        /*
56        Keyboard.Listen(Key.A, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, -300.0); }, "Liikuttaa Tankkia Vasempaan");
57        Keyboard.Listen(Key.D, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, 300.0); }, "Liikuttaa Tankkia Vasempaan");
58
59        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", kakkostankki, 0.1);
60        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", kakkostankki, -0.1);
61        */
62
63        Keyboard.Listen(Key.Space, ButtonState.Down, () => Ammu(tankki, "tankki2"), "Ammu tykillä");
64        Keyboard.Listen(Key.LeftShift, ButtonState.Down, () => Ammu(kakkostankki, "tankki1"), "Ammu tykillä");
65
66    }
67
68    void Ammu(Tankki tankki, String tankinnimi)
69    {
70        PhysicsObject ammus = tankki.Ase.Shoot();
71
72        if (ammus != null)
73        {
74            ammus.Image = Ammus1;
75            ammus.Size *= 2;
76            AddCollisionHandler(ammus, tankinnimi, delegate (PhysicsObject a, PhysicsObject b) { ((Tankki)b).ElamaLaskuri.Value--; });
77            ammus.IgnoresCollisionWith(tankki);
78            ammus.IgnoresCollisionWith(tankki.Tykki);
79            ammus.Position = tankki.Tykki.Position + Vector.FromLengthAndAngle(tankki.Tykki.Width * 0.5, tankki.Tykki.Angle);
80
81            //ammus.Velocity = new Vector(100, 0);
82            /*tankki.Ase.Ammo.Value = 500;
83            tankki.Ase.Power.DefaultValue = 2000;
84            tankki.Ase.FireRate = 5.0;
85            tankki.Ase.AmmoIgnoresGravity = false;
86            tankki.Ase.AmmoIgnoresExplosions = true;
87            tankki.Ase.CanHitOwner = true;*/
88        }
89
90    }
91
92
93    void Kentta()
94    {
95        /*PhysicsObject alataso = PhysicsObject.CreateStaticObject(Level.Width, 60);
96        alataso.Position = new Vector(0, Level.Bottom + alataso.Height / 2);
97        Add(alataso);*/
98
99        Surface alaReuna = Surface.CreateBottom(Level, 600, 625, 100, 2);
100        alaReuna.Restitution = 0;
101        Add(alaReuna);
102
103
104        Level.CreateLeftBorder(0, true);
105        Level.CreateRightBorder(0, true);
106
107        Gravity = new Vector(0, -550);
108
109    }
110    void LuoTankki()
111    {
112       
113        tankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2);
114        tankki.Position = new Vector(-200, 0);
115        tankki.Tag = "tankki1";
116        Add(tankki);
117        tankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b);
118
119        kakkostankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2);
120        kakkostankki.Position = new Vector(200, 0);
121        kakkostankki.Tag = "tankki2";
122        Add(kakkostankki);
123        kakkostankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b);
124
125    }
126
127    void LiikutaTankkia(Tankki Tankki, Vector nopeus)
128    {
129        Tankki.Push(nopeus);
130    }
131
132    public void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
133    {
134        //ammus.Destroy();
135    }
136}
137
138class Tankki : PhysicsObject
139{
140    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
141    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
142
143    public Image Tykki2;
144
145    public Weapon Ase;
146
147    public Direction FacingDirection = Direction.Right;
148
149    public PhysicsObject Tykki;
150
151    public override void Update(Time time)
152    {
153        Ase.AbsolutePosition = Tykki.Position;
154        Ase.AbsoluteAngle = Tykki.Angle;
155
156        Tykki.AbsolutePosition = this.FacingDirection == Direction.Right ? new Vector(this.X + 30, this.Top - 20) : new Vector(this.X - 30, this.Top - 20);
157
158        //LahtoPaikka = this.FacingDirection == Direction.Right ? new Vector(this.AbsolutePosition.X + this.Tykki.Width, Tykki.Y) : new Vector(this.AbsolutePosition.X - Tykki.Width, this.Tykki.Y);
159    }
160
161    public Tankki(double leveys, double korkeus, Image kuva, Image tykki2)
162        : base(leveys, korkeus)
163    {
164        this.IsUpdated = true;
165
166        Tykki2 = tykki2;
167        Tykki = new PhysicsObject(120, 10);
168        Tykki.Image = Image.Mirror(tykki2);
169        this.Game.Add(Tykki, -1);
170        Tykki.Position = new Vector(this.X + 34, this.Top - 20);
171        Tykki.IgnoresCollisionResponse = true;
172
173        Ase = new Cannon(30, 10);
174        Ase.IsVisible = true;
175        Ase.FireRate = 1;
176        Ase.IsAddedToGame = true;
177        Ase.MaxAmmoLifetime = TimeSpan.FromSeconds(4);
178        Ase.CanHitOwner = false;
179        // this.Add(Ase);
180        elamaLaskuri.LowerLimit += delegate { this.Destroy(); this.Tykki.Destroy(); this.Ase.Destroy(); };
181        Image = kuva;
182        Mass = 5;
183
184    }
185}
Note: See TracBrowser for help on using the repository browser.