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

Revision 7430, 8.4 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;
9using Jypeli.Effects;
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
23    Tankki tankki;
24    Tankki kakkostankki;
25    public override void Begin()
26    {
27        ClearAll();
28        Kentta();
29        LuoTankki();
30        AsetaOhjaimet();
31
32   
33    Camera.ZoomToLevel();
34        Level.Background.Color = Color.LightBlue;
35    }
36    void LiikutaTykkiä(Tankki tankki, double Suunta)
37    {
38        GameObject tykki = ((Tankki)tankki).Tykki;
39        tykki.Angle += Angle.FromRadians(Suunta) * (tankki.FacingDirection == Direction.Left ? -1 : 1);
40
41        if (tankki.Tykki.Angle.MainDirection != tankki.FacingDirection)
42        {
43            tykki.Angle -= Angle.FromRadians(Suunta);
44        }
45
46
47    }
48
49    void AsetaOhjaimet()
50    {
51        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
52
53        Keyboard.Listen(Key.Left, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(-200000.0, 0));
54            if (tankki.FacingDirection == Direction.Right) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Left; }, "Liikuttaa Tankkia Vasempaan");
55        Keyboard.Listen(Key.Right, ButtonState.Down, delegate () { tankki.Tykki.Angle = tankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : tankki.Tykki.Angle; LiikutaTankkia(tankki, new Vector(200000.0, 0)); if (tankki.FacingDirection == Direction.Left) { tankki.MirrorImage(); } tankki.FacingDirection = Direction.Right; }, "Liikuttaa Tankkia Oikealle");
56
57        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", tankki, 0.1);
58        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", tankki, -0.1);
59
60        Keyboard.Listen(Key.A, ButtonState.Down, delegate () {kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Left ? Angle.FromDegrees(180) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, new Vector(-200000.0, 0));
61            if (kakkostankki.FacingDirection == Direction.Right) { kakkostankki.MirrorImage(); }
62            kakkostankki.FacingDirection = Direction.Left;
63        }, "Liikuttaa Tankkia Vasempaan");
64        Keyboard.Listen(Key.D, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Right ? Angle.FromDegrees(0) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, new Vector(200000.0, 0)); if (kakkostankki.FacingDirection == Direction.Left) { kakkostankki.MirrorImage(); } kakkostankki.FacingDirection = Direction.Right; }, "Liikuttaa Tankkia Oikealle");
65
66
67
68        /*Keyboard.Listen(Key.A, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Right ? Angle.FromDegrees(180) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, (-20000.0)); }, "Liikuttaa Tankkia Vasempaan");
69        Keyboard.Listen(Key.D, ButtonState.Down, delegate () { kakkostankki.Tykki.Angle = kakkostankki.FacingDirection == Direction.Left ? Angle.FromDegrees(0) : kakkostankki.Tykki.Angle; LiikutaTankkia(kakkostankki, (200000.0)); }, "Liikuttaa Tankkia Vasempaan");
70        */
71
72
73
74        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Ylös", kakkostankki, 0.1);
75        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaTykkiä, "Liikuta Tykkiä Alas", kakkostankki, -0.1);
76   
77
78        Keyboard.Listen(Key.Space, ButtonState.Down, () => Ammu(tankki, "tankki2"), "Ammu tykillä");
79        Keyboard.Listen(Key.LeftShift, ButtonState.Down, () => Ammu(kakkostankki, "tankki1"), "Ammu tykillä");
80
81    }
82
83    void Ammu(Tankki tankki, String tankinnimi)
84    {
85        PhysicsObject ammus = tankki.Ase.Shoot();
86
87        if (ammus != null)
88        {
89            ammus.Image = Ammus1;
90            ammus.Size *= 1.5;
91            AddCollisionHandler(ammus, tankinnimi, delegate (PhysicsObject a, PhysicsObject b) { ((Tankki)b).ElamaLaskuri.Value--; });
92            ammus.IgnoresCollisionWith(tankki);
93            ammus.IgnoresCollisionWith(tankki.Tykki);
94            ammus.Position = tankki.Tykki.Position + Vector.FromLengthAndAngle(tankki.Tykki.Width * 0.5, tankki.Tykki.Angle);
95
96            //ammus.Velocity = new Vector(100, 0);
97            /*tankki.Ase.Ammo.Value = 500;
98            tankki.Ase.Power.DefaultValue = 2000;
99            tankki.Ase.FireRate = 5.0;
100            tankki.Ase.AmmoIgnoresGravity = false;
101            tankki.Ase.AmmoIgnoresExplosions = true;
102            tankki.Ase.CanHitOwner = true;*/
103        }
104
105    }
106
107
108    void Kentta()
109    {
110        /*PhysicsObject alataso = PhysicsObject.CreateStaticObject(Level.Width, 60);
111        alataso.Position = new Vector(0, Level.Bottom + alataso.Height / 2);
112        Add(alataso);*/
113
114        Surface alaReuna = Surface.CreateBottom(Level, 350, 451, 7, 20);
115        alaReuna.Y += 200;
116
117        alaReuna.Restitution = 0;
118        Add(alaReuna);
119        Camera.ZoomToLevel();
120
121        Level.CreateLeftBorder(0, true);
122        Level.CreateRightBorder(0, true);
123
124        Gravity = new Vector(0, -550);
125
126    }
127    void LuoTankki()
128    {
129       
130        tankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2);
131        tankki.Position = new Vector(-200, 0);
132        tankki.Tag = "tankki1";
133        Add(tankki);
134        tankki.ElamaLaskuri.LowerLimit += () => TuhoaTankki(tankki);
135        tankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b);
136
137        kakkostankki = new Tankki(150, 75, Image.Mirror(kokoTankki), Tykki2);
138        kakkostankki.Position = new Vector(200, 0);
139        kakkostankki.Tag = "tankki2";
140        Add(kakkostankki);
141        kakkostankki.ElamaLaskuri.LowerLimit += () => TuhoaTankki(kakkostankki);
142        kakkostankki.Ase.ProjectileCollision += (PhysicsObject a, PhysicsObject b) => AmmusOsuu(a, b);
143
144    }
145
146    void TuhoaTankki(Tankki tank)
147    {
148            Explosion rajahdys = new Explosion(250);
149        rajahdys.Position = tank.Position;
150        Add(rajahdys);
151
152        Timer.SingleShot(1.0, Begin);
153    }
154
155    void LiikutaTankkia(Tankki Tankki, Vector nopeus)
156    {
157        Tankki.Push(nopeus);
158    }
159
160    public void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
161    {
162        ammus.Destroy();
163    }
164}
165
166class Tankki : PhysicsObject
167{
168    private IntMeter elamaLaskuri = new IntMeter(7, 0, 7);
169    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
170
171    public Image Tykki2;
172
173    public Weapon Ase;
174
175    public Direction FacingDirection = Direction.Right;
176
177    public PhysicsObject Tykki;
178
179    public override void Update(Time time)
180    {
181        Ase.AbsolutePosition = Tykki.Position;
182        Ase.AbsoluteAngle = Tykki.Angle;
183
184        Tykki.AbsolutePosition = this.FacingDirection == Direction.Right ? new Vector(this.X + 30, this.Top - 20) : new Vector(this.X - 30, this.Top - 20);
185
186        //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);
187    }
188
189    public Tankki(double leveys, double korkeus, Image kuva, Image tykki2)
190        : base(leveys, korkeus)
191    {
192        this.IsUpdated = true;
193
194        Tykki2 = tykki2;
195        Tykki = new PhysicsObject(120, 10);
196        Tykki.Image = Image.Mirror(tykki2);
197        this.Game.Add(Tykki, -1);
198        Tykki.Position = new Vector(this.X + 34, this.Top - 20);
199        Tykki.IgnoresCollisionResponse = true;
200
201        Ase = new Cannon(30, 10);
202        Ase.IsVisible = true;
203        Ase.FireRate = 1;
204        Ase.IsAddedToGame = true;
205       
206
207        //Ase.MaxAmmoLifetime = TimeSpan.FromSeconds(4);
208
209
210        Ase.CanHitOwner = false;
211        // this.Add(Ase);
212        elamaLaskuri.LowerLimit += delegate { this.Destroy(); this.Tykki.Destroy(); this.Ase.Destroy(); };
213        Image = kuva;
214        Mass = 400;
215
216    }
217
218
219
220
221}
Note: See TracBrowser for help on using the repository browser.