source: 2010/30/mikrkana/HelicopterHavoc/Peli.cs @ 1464

Revision 1464, 9.1 KB checked in by mikrkana, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Physics2DDotNet.Ignorers;
6
7public class HelicopterHavoc : PhysicsGame
8{
9    PhysicsObject helikopteri;
10    Vector nopeusYlos = new Vector(0, 16000);
11    Vector nopeusSivulle = new Vector(12000, 0);
12    Image olionkuva = LoadImage("helikopteri");
13    Image olionkuvaPeilattu;
14    Image tankinkuva = LoadImage("tankki");
15    Image tankinkuvaPeilattu;
16    ObjectIgnorer ignorer;
17   
18    DoubleMeter voimaMittari;
19
20    Cannon tykki;
21
22    Image siviilinkuva = LoadImage("siviili");
23
24   
25    AssaultRifle pyssy;
26    Image pyssyKuva;
27    Image pyssyKuvaPeilattu;
28
29   
30    protected override void Begin()
31    {
32        ignorer = new ObjectIgnorer();
33        olionkuvaPeilattu = Image.Mirror(olionkuva);
34
35        tankinkuvaPeilattu = Image.Mirror(tankinkuva);
36
37        LuoKenttä();
38        LisääHelikopteri();
39        LisääOhjaimet();
40   
41         for (int tankki = 0; tankki < 10; tankki++)
42   
43     LuoViholliset();
44     LisääSiviilit();
45
46    }
47   
48
49    void LuoKenttä()
50    {
51        Level.Width = 8000.0;
52        Level.Height = 1000.0;
53        Level.CreateBorders(0.0, true);
54        Gravity = new Vector(0.0, -500.0);
55        Level.CreateGround(0, 400, 20);
56        Camera.StayInLevel = true;
57
58       
59       
60       
61
62    }
63
64    void LisääHelikopteri()
65    {
66        helikopteri = new PhysicsObject(300.0, 100.0);
67        helikopteri.Mass = 3.0;
68        helikopteri.Image = olionkuva;
69        helikopteri.LinearDamping = 0.8;
70        helikopteri.CanRotate = false;
71        AddCollisionHandler(helikopteri, KasitteleHelikopterinTormays); 
72        Camera.Follow(helikopteri);
73        Add(helikopteri);
74        helikopteri.CollisionIgnorer = ignorer;
75
76        pyssy = new AssaultRifle(100, 20);       
77        pyssyKuva = pyssy.Image;
78        pyssyKuvaPeilattu = Image.Mirror(pyssy.Image);
79        helikopteri.Add(pyssy);
80        pyssy.Position = new Vector(helikopteri.-10, helikopteri.Y-40);
81        pyssy.IsVisible = false;
82        pyssy.Ammo.Value = 1000;
83        pyssy.BulletCollision = LuotiOsuu;
84
85
86        voimaMittari = new DoubleMeter(4000);
87        voimaMittari.MaxValue = 4000;
88        BarGauge voimaPalkki = new BarGauge(20, 150);
89        voimaPalkki.BindTo(voimaMittari);
90        Add(voimaPalkki);
91
92        voimaPalkki.X = (0.8 * Screen.RightSafe);
93        voimaPalkki.Y = (0.8 * Screen.TopSafe);
94        voimaPalkki.BarColor = Color.Green;
95        voimaPalkki.BorderColor = Color.White;
96        voimaPalkki.Angle = Angle.Degrees(180);
97
98        // Kun voima loppuu, kutsutaan VoimaLoppui-aliohjelmaa
99        voimaMittari.LowerLimit += VoimaLoppui;
100
101
102    }
103
104    void LuotiOsuu(PhysicsObject luoti, PhysicsObject toinen)
105    {
106        luoti.Destroy();
107        Explosion rajahdys = new Explosion(40);
108        rajahdys.Position = luoti.Position;
109        Add(rajahdys);
110    }
111
112    void LisääSiviilit()
113    {
114        PhysicsObject siviili = new PhysicsObject(256.0,256.0);
115        siviili.Image = siviilinkuva;
116        siviili.X = RandomGen.NextDouble(-3000.0, 3000.0); 
117        siviili.Y = RandomGen. NextDouble(600.0, 700.0);
118        siviili.Tag = "siviili";
119
120        Add( siviili );
121    }
122
123
124    void LisääOhjaimet()
125    {
126        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, -nopeusSivulle);
127        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, nopeusSivulle);
128        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, nopeusYlos);
129        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, -nopeusYlos);
130        Keyboard.Listen(Key.Q, ButtonState.Down, KallistaHelikopteria, null, 2.0);
131        Keyboard.Listen(Key.E, ButtonState.Down, KallistaHelikopteria, null, -2.0);
132        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu");
133        Keyboard.Listen(Key.V, ButtonState.Pressed, HeitaClusterKranaatti, "HeitaClusterKranaatti");
134        Keyboard.Listen(Key.B, ButtonState.Pressed, HeitaKranaatti, "HeitaKranaatti");
135        Keyboard.Listen(Key.W, ButtonState.Down, VahennaVoimia, "Vähennä pelaajan voimia");
136        Keyboard.Listen(Key.A, ButtonState.Down, VahennaVoimia, "Vähennä pelaajan voimia");
137        Keyboard.Listen(Key.S, ButtonState.Down, VahennaVoimia, "Vähennä pelaajan voimia");
138    }
139
140    void Ammu()
141    {
142        PhysicsObject ammus = pyssy.Shoot();
143        if (ammus != null)
144        {
145            ammus.CollisionIgnorer = ignorer;
146            ammus.Size = new Vector(20, 4);
147            ammus.MaximumLifetime = new TimeSpan(0, 0, 4);
148            AddCollisionHandler(ammus, ammusOsuu);
149        }
150    }
151
152    void ammusOsuu( PhysicsObject ammus, PhysicsObject kohde)
153    {
154        if (kohde.Tag.ToString() == "tankki" || kohde.Tag.ToString() == "siviili")
155        {
156            Explosion rajahdys = new Explosion(800);
157            rajahdys.Position = kohde.Position;
158            rajahdys.Speed = 600.0;
159            rajahdys.Force = 20000;
160            kohde.Destroy();
161            Add(rajahdys);
162        }
163    }
164
165    void LiikutaPelaajaa(Vector vektori)
166    {
167        helikopteri.Push(vektori);
168    }
169    void LuoViholliset()
170    {
171        PhysicsObject tankki = new PhysicsObject(300, 256);
172        tankki.Image = tankinkuva;
173        tankki.Tag = "tankki";
174        tankki.X = RandomGen.NextDouble(-3000.0, 3000.0);
175        tankki.Y = RandomGen.NextDouble(600.0, 700.0);
176        //AddCollisionHandler(tankki, KasitteleTankinTormaus);
177        tankki.CanRotate = false;
178        tykki = new Cannon(50, 10);
179        tankki.Add( tykki );
180        tykki.X = 130;
181        tykki.Y = 85;
182        tykki.Power.Value += 2000;
183        tykki.CannonBallCollision = KuulaOsuu;
184
185
186        Timer ajastin = new Timer();
187        ajastin.Tag = tankki;
188        ajastin.Interval = 0.01;
189        ajastin.Trigger += TankinPaivitys;
190        ajastin.Start();
191
192
193
194        Add(tankki);
195    }
196
197    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
198    {
199        kuula.Destroy();
200        Explosion rajahdys = new Explosion(100);
201        rajahdys.Position = kuula.Position;
202        Add(rajahdys);
203    }
204
205
206  void KasitteleTankinTormaus(PhysicsObject tankki, PhysicsObject luoti)
207    {
208        Explosion rajahdys = new Explosion(800);
209        rajahdys.Position = tankki.Position;
210        rajahdys.Speed = 600.0;
211        rajahdys.Force = 20000;
212        tankki.Destroy();
213        Add(rajahdys);
214    }
215
216    void TankinPaivitys(Timer ajastin)
217    {
218        PhysicsObject tankki = ((PhysicsObject)ajastin.Tag);
219        if (tankki.X > helikopteri.X)
220            tankki.Image = tankinkuvaPeilattu;
221           
222        if (tankki.X < helikopteri.X)
223            tankki.Image = tankinkuva;
224           
225        if (Vector.Distance(tankki.Position, helikopteri.Position) < 1000)
226        {
227            PhysicsObject ammus = tykki.Shoot();
228
229            if (ammus != null)
230            {
231                ammus.Velocity = (helikopteri.Position - tankki.Position) * 2;
232                ammus.Size *= 3;
233            }
234
235        }
236
237
238    }
239
240    protected override void Update(Time time)
241    {
242       
243        if (helikopteri.Velocity.X <= 0)
244        {
245            helikopteri.Image = olionkuvaPeilattu;
246            pyssy.Angle = Angle.Radians(Math.PI);
247        }
248        if (helikopteri.Velocity.X > 0)
249        {
250            helikopteri.Image = olionkuva;
251            pyssy.Angle = Angle.Radians(0);
252        }
253        base.Update(time);
254    }
255
256
257    void KallistaHelikopteria(double kaanto)
258    {
259        helikopteri.Angle = Angle.Degrees(helikopteri.Angle.Degree + kaanto);
260    }
261
262    void HeitaClusterKranaatti()
263    {
264        ClusterGrenade kranaatti = new ClusterGrenade(12.0, 3);
265        kranaatti.X = helikopteri.X + 100;
266        kranaatti.Y = helikopteri.Y + 100;
267        kranaatti.NumberOfClusters = 4;
268        kranaatti.FuseTime = TimeSpan.FromSeconds(2.0);
269        Vector heittoVoima = Vector.FromLengthAndAngle(8000, Angle.Degrees(45));
270        kranaatti.Hit(heittoVoima);
271        Add(kranaatti); 
272    }
273
274    void HeitaKranaatti()
275    {
276        Grenade kranaatti = new Grenade(12.0);
277        kranaatti.X = helikopteri.X + 100;
278        kranaatti.Y = helikopteri.Y + 100;
279        kranaatti.FuseTime = TimeSpan.FromSeconds(2  );
280        Vector heittoVoima = Vector.FromLengthAndAngle(8000, Angle.Degrees(45));
281        kranaatti.Hit(heittoVoima);
282         
283        Add(kranaatti);
284    }
285
286    void VahennaVoimia()
287    {
288        voimaMittari.Value--;
289    }
290
291    void VoimaLoppui(double mittarinArvo)
292    {
293        Explosion rajahdys = new Explosion(800);
294        rajahdys.Position = helikopteri.Position;
295        rajahdys.Speed = 600.0;
296        rajahdys.Force = 20000;
297        Add(rajahdys);
298        helikopteri.Destroy();
299
300 
301    }
302
303
304
305
306    void KasitteleHelikopterinTormays(PhysicsObject helikopteri, PhysicsObject kohde)
307    {
308        Explosion rajahdys = new Explosion(800);
309        rajahdys.Position = helikopteri.Position;
310        rajahdys.Speed = 600.0;
311        rajahdys.Force = 5000;
312        helikopteri.Destroy();
313        Add(rajahdys);
314    }
315
316
317
318
319
320
321
322
323}
Note: See TracBrowser for help on using the repository browser.