source: 2011/31/HenryS/TankDuel/TankDuel/TankDuel/Peli.cs @ 2607

Revision 2607, 15.3 KB checked in by hejusiuk, 11 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8class Tankki : PhysicsObject
9{
10    public int Elamat = 3;
11    public Tankki(double leveys, double korkeus)
12        : base(leveys, korkeus)
13    {
14    }
15}
16
17public class Peli : PhysicsGame
18{
19    List<Label> valikonKohdat;
20    Vector nopeus1Ylos = new Vector(0, 200);
21    Vector nopeus1Alas = new Vector(0, -200);
22    Vector nopeus2Ylos = new Vector(0, 200);
23    Vector nopeus2Alas = new Vector(0, -200);
24    Vector nopeus1Oikealle = new Vector(200, 0);
25    Vector nopeus1Vasemmalle = new Vector(-200, 0);
26    Vector nopeus2Oikealle = new Vector(200, 0);
27    Vector nopeus2Vasemmalle = new Vector(-200, 0);
28    Tankki pelaaja1;
29    Tankki pelaaja2;
30    Image oliomkuva = LoadImage("tank");
31    Image tankki = LoadImage("tank2");
32    PhysicsObject este;
33    AssaultRifle pyssy;
34    AssaultRifle ase;
35    Cannon tykki;
36    Cannon kanuuna;
37    DoubleMeter pisteLaskuri;
38    DoubleMeter pisteLaskuri2; 
39    LaserGun pelaajan1Laser;
40    LaserGun pelaajan2laserase;
41    Label pelaaja1elamanaytto;
42    Label pelaaja2elamanaytto;
43    public override void Begin()
44    {   
45        //kanuuna = new Cannon(50.0, 20.0);
46        //tykki = new Cannon(50.0, 20.0);
47        //pyssy = new AssaultRifle(20, 5);
48        //ase = new AssaultRifle(20, 5);
49       
50        Valikko();
51       
52       
53       
54    }
55
56   
57
58    void luopelaaja1()
59    {
60
61        pelaaja1 = new Tankki(90.0, 50.0);
62        pelaaja1.Image = oliomkuva;
63        pelaaja1.X = -400;
64        pelaaja1.Y = 350;
65        pelaaja1.CanRotate=false;
66        Add(pelaaja1);
67        pyssy = new AssaultRifle(20, 5);
68        pyssy.ProjectileCollision = LuotiOsuu;
69        pyssy.Shoot();
70        pelaaja1.Add(pyssy);
71        tykki = new Cannon(50, 10);
72        tykki.ProjectileCollision = KuulaOsuu;
73        tykki.Shoot();
74        pelaaja1.Add(tykki);
75        pelaajan1Laser = new LaserGun(20, 5);
76        pelaajan1Laser.ProjectileCollision = LaserSadeOsuu;
77        pelaajan1Laser.Shoot();
78        pelaajan1Laser.Ammo.Value = int.MaxValue;
79        pelaaja1.Add(pelaajan1Laser);
80    }
81    void luopelaaja2()
82    {
83        pelaaja2 = new Tankki(90.0, 50.0);
84        pelaaja2.X = 400;
85        pelaaja2.Y = -350;
86        pelaaja2.Image = tankki;
87        pelaaja2.CanRotate = false;
88        Add(pelaaja2);
89        ase = new AssaultRifle(20, 5);
90        ase.ProjectileCollision = LuotiOsuu2;
91        ase.Shoot();
92        pelaaja2.Add(ase);
93        kanuuna = new Cannon(50, 10);
94        kanuuna.ProjectileCollision = KuulaOsuu2;
95        kanuuna.Shoot();
96        pelaaja2.Add(kanuuna);
97        pelaajan2laserase = new LaserGun(20, 5);
98        pelaajan2laserase.Ammo.Value = int.MaxValue;
99        pelaajan2laserase.ProjectileCollision = LaserSadeOsuu2;
100
101        pelaajan2laserase.Shoot();
102        pelaaja2.Add(pelaajan2laserase);
103    }
104    void AsetaOhjaimet()
105    {
106
107
108        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku ylös", pelaaja1, nopeus1Ylos, Angle.FromDegrees (90));
109        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero, Angle.FromDegrees(90));
110        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku alas", pelaaja1, nopeus1Alas, Angle.FromDegrees (-90));
111        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero, Angle.FromDegrees (-90));
112        Keyboard.Listen(Key.Q, ButtonState.Down, AmmuAseella, "Ammu");
113        Keyboard.Listen(Key.Tab, ButtonState.Down, AmmuTykillä, "Ammu");
114        Keyboard.Listen(Key.CapsLock, ButtonState.Down, AmmuLaserPyssyllä, "Ammu");
115
116
117        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus2, "Pelaaja 2: Liiku ylös", pelaaja2, nopeus2Ylos, Angle.FromDegrees(90));
118        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus2, null, pelaaja2, Vector.Zero, Angle.FromDegrees(90));
119        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus2, "Pelaaja 2: Liiku alas", pelaaja2, nopeus2Alas, Angle.FromDegrees(-90));
120        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus2, null, pelaaja2, Vector.Zero, Angle.FromDegrees(-90));
121        Keyboard.Listen(Key.End, ButtonState.Down, AmmuAseella2, "Ammu");
122        Keyboard.Listen(Key.Insert, ButtonState.Down, AmmuKanuunalla, "Ammu");
123        Keyboard.Listen(Key.Delete, ButtonState.Down, AmmuLaserAseella, "Ammu");
124
125        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku oikealle", pelaaja1, nopeus1Oikealle, Angle.FromDegrees (0));
126        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero,Angle.FromDegrees(0));
127        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liiku vasemmalle", pelaaja1, nopeus1Vasemmalle, Angle.FromDegrees(180));
128        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, pelaaja1, Vector.Zero, Angle.FromDegrees(180));
129
130        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus2, "Pelaaja 2: Liiku oikealle", pelaaja2, nopeus2Oikealle, Angle.FromDegrees (0));
131        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus2, null, pelaaja1, Vector.Zero, Angle.FromDegrees (0));
132        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus2, "Pelaaja 2: Liiku vasemmalle", pelaaja2, nopeus2Vasemmalle, Angle.FromDegrees(180));
133        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus2, null, pelaaja1, Vector.Zero, Angle.FromDegrees(180));
134
135        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
136
137
138        return;
139       
140    }
141
142    void AsetaNopeus(PhysicsObject pelaaja1, Vector nopeus1, Angle kulma)
143    {
144        pelaaja1.Velocity = nopeus1;
145        pelaaja1.Angle = kulma;
146       
147    }
148
149    void AsetaNopeus2(PhysicsObject pelaaja1, Vector nopeus2, Angle kulma)
150    {
151        pelaaja2.Velocity = nopeus2;
152        pelaaja2.Angle = kulma;
153
154    }
155
156
157
158   
159
160    void LuoKenttä()
161    {
162        int i = 0;
163
164        while (i < 20)
165        {
166            este = PhysicsObject.CreateStaticObject(60.0, 60.0);
167            este.Color = Color.Gray;
168            este.CanRotate = false;
169            este.X = RandomGen.NextDouble(-330.0, 330.0);
170            este.Y = RandomGen.NextDouble(-330.0, 330.0);
171            Add(este);
172            i++;
173        }
174
175        Level.CreateBorders(1.0, false);
176        Level.BackgroundColor = Color.ForestGreen;
177        Camera.ZoomToLevel();
178       
179       
180
181       
182   
183    }
184
185      void Valikko()
186    {
187        ClearAll();
188        valikonKohdat = new List<Label>();
189        Level.BackgroundColor = Color.Black;
190        Label kohta1 = new Label("Aloita uusi peli");
191        kohta1.Position = new Vector(0, 40);
192        valikonKohdat.Add(kohta1);
193
194        Label kohta2 = new Label("Lopeta");
195        kohta2.Position = new Vector(0, -40);
196        valikonKohdat.Add(kohta2);
197       
198        foreach (Label valikonKohta in valikonKohdat)
199        {
200            Add(valikonKohta);
201        }
202
203        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
204        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
205
206
207        Mouse.IsCursorVisible = true;
208        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
209        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
210
211    }
212
213
214    void ValikossaLiikkuminen(AnalogState hiirenTila)
215      {
216         
217        foreach (Label kohta in valikonKohdat)
218        {
219            if (Mouse.IsCursorOn(kohta))
220            {
221                kohta.TextColor = Color.Blue;
222            }
223            else
224            {
225                kohta.TextColor = Color.Red;
226            }
227
228        }
229    }
230
231    void AloitaPeli()
232    {   
233       
234        ClearAll();
235        LuoLaskuri();
236        LuoLaskuri2();
237        LuoKenttä();
238        luopelaaja2();
239        luopelaaja1();
240        luoElamat();
241        luoElamat2();
242        AsetaOhjaimet();
243        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
244    }
245
246
247    void AmmuAseella()
248    {
249       
250        PhysicsObject ammus = pyssy.Shoot();
251        if (ammus != null)
252        {
253            ammus.CanRotate = false;
254            ammus.Size *= 1;
255           
256
257        }
258    }
259
260    void AmmuAseella2()
261    {
262       
263        PhysicsObject ammus2 = ase.Shoot();
264        if (ammus2 != null)
265        {
266            ammus2.CanRotate = false;
267            ammus2.Size *= 1;
268        }
269    }
270
271    void AmmuTykillä()
272    {
273        tykki.Power.Value = 100000;
274        PhysicsObject tykkiammus = tykki.Shoot();
275        if (tykkiammus != null)
276        {
277            tykkiammus.CanRotate = false;
278           tykkiammus.Size *=2;
279
280        }
281   
282   
283    }
284
285
286    void AmmuKanuunalla()
287    {
288        kanuuna.Power.Value = 100000;
289        PhysicsObject kanuunaammus = kanuuna.Shoot();
290        if (kanuunaammus != null)
291        {
292            kanuunaammus.CanRotate = false;
293            kanuunaammus.Size *= 2;
294
295        }
296
297
298    }
299
300    void AmmuLaserAseella()
301    {
302
303        PhysicsObject laserammus = pelaajan2laserase.Shoot();
304        if (laserammus != null)
305        {
306            laserammus.CanRotate = false;
307            laserammus.Size *= 30;
308           
309
310        }
311    }
312
313    void AmmuLaserPyssyllä()
314    {
315
316        PhysicsObject laserammus2 = pelaajan1Laser.Shoot();
317        if (laserammus2 != null)
318        {
319            laserammus2.CanRotate = false;
320            laserammus2.Size *= 30;
321
322
323        }
324    }
325    void LuoLaskuri()
326    {
327        pisteLaskuri = new DoubleMeter(100);
328
329        Label pisteNaytto = new Label();
330        pisteNaytto.X = Screen.Left + 100;
331        pisteNaytto.Y = Screen.Top - 100;
332        pisteNaytto.TextColor = Color.Red;
333        pisteNaytto.DecimalPlaces = 0;
334        pisteNaytto.BindTo(pisteLaskuri);
335        Add(pisteNaytto);
336        Label pisteTeksti = new Label("Health: ");
337        pisteTeksti.X = Screen.Left + 50;
338        pisteTeksti.Y = Screen.Top - 100;
339        pisteTeksti.TextColor = Color.Red;
340        Add(pisteTeksti);
341        pisteLaskuri.MinValue = 0;
342        pisteLaskuri.LowerLimit += laskuriAlarajassa;
343
344    }
345        void laskuriAlarajassa(Double arvo)
346{
347        pelaaja1.Elamat--;
348        pelaaja1elamanaytto.Text = pelaaja1.Elamat.ToString();
349        pelaaja1.Destroy();
350        pisteLaskuri.Value = 100;
351        Explosion rajahdys = new Explosion(250);
352            rajahdys.Position = pelaaja1.Position;
353        Add(rajahdys);
354        rajahdys.Speed = 500.0;
355        rajahdys.Force = 5000;
356            if (pelaaja1.Elamat == 0)
357        {
358           
359        }
360
361        else
362        {
363            Timer.SingleShot(2.0, ajastinLaukesi);
364
365       
366        }
367
368        }
369
370        void LuoLaskuri2()
371        {
372            pisteLaskuri2 = new DoubleMeter(100);
373
374            Label pisteNaytto = new Label();
375            pisteNaytto.X = Screen.Right - 100;
376            pisteNaytto.Y = Screen.Top - 100;
377            pisteNaytto.TextColor = Color.Red;
378            pisteNaytto.DecimalPlaces = 0;
379            pisteNaytto.BindTo(pisteLaskuri2);
380            Add(pisteNaytto);
381            Label pisteTeksti = new Label("Health: ");
382            pisteTeksti.X = Screen.Right - 200;
383            pisteTeksti.Y = Screen.Top - 100;
384            pisteTeksti.TextColor = Color.Red;
385            Add(pisteTeksti);
386            pisteLaskuri2.MinValue = 0;
387            pisteLaskuri2.LowerLimit += laskuriAlarajassa2;
388
389           
390        }
391
392        void laskuriAlarajassa2(Double arvo)
393        {
394            pelaaja2.Elamat--;
395                    pelaaja2.Destroy();
396                    pelaaja2elamanaytto.Text = pelaaja2.Elamat.ToString();
397        pisteLaskuri2.Value = 100;
398        Explosion rajahdys = new Explosion(250);
399        rajahdys.Position = pelaaja2.Position;
400        Add(rajahdys);
401        rajahdys.Speed = 500.0;
402        rajahdys.Force = 5000;
403       
404
405            if (pelaaja2.Elamat == 0)
406        {
407
408           
409        }
410
411        else
412        {
413            Timer.SingleShot(2.0, ajastinLaukesi2);
414
415       
416        }
417
418        }
419       
420        void LuotiOsuu(PhysicsObject ammus, PhysicsObject kohde)
421        {
422            ammus.Destroy();
423            if (kohde == pelaaja2)
424
425            {
426                pisteLaskuri2.Value--;
427            }
428        }
429
430        void LuotiOsuu2(PhysicsObject ammus2, PhysicsObject kohde2)
431        {
432            ammus2.Destroy();
433            if (kohde2 == pelaaja1)
434            {
435                pisteLaskuri.Value--;
436            }
437        }
438
439
440
441        void KuulaOsuu(PhysicsObject tykkiammus, PhysicsObject kohde)
442        {
443            tykkiammus.Destroy();
444            if (kohde == pelaaja2)
445            { 
446              pisteLaskuri2.Value = pisteLaskuri2.Value - 10;
447
448           
449            }
450       
451        }
452     void KuulaOsuu2(PhysicsObject kanuunaammus, PhysicsObject kohde2)
453        {
454            kanuunaammus.Destroy();
455            if (kohde2 == pelaaja1)
456            { 
457              pisteLaskuri.Value = pisteLaskuri.Value - 10;
458
459           
460            }
461       
462        }
463
464
465     void LaserSadeOsuu(PhysicsObject laserammus2, PhysicsObject kohde2)
466     {
467
468         
469         
470         if (kohde2 == pelaaja2)
471         {
472             pisteLaskuri2.Value = pisteLaskuri2.Value - 0.1;
473             laserammus2.Destroy();
474
475         }
476
477     }
478
479     void LaserSadeOsuu2(PhysicsObject laserammus, PhysicsObject kohde)
480     {
481
482         
483
484         if (kohde == pelaaja1)
485         {
486             pisteLaskuri.Value = pisteLaskuri.Value - 0.1;
487             laserammus.Destroy();
488
489         }
490
491     }
492
493
494
495    void ajastinLaukesi()
496
497        {
498
499            luopelaaja1();
500            ClearControls();
501            AsetaOhjaimet();
502   
503    }           
504   
505    void ajastinLaukesi2()
506    {
507
508        luopelaaja2();
509        ClearControls();
510        AsetaOhjaimet();
511    }
512    void luoElamat()
513
514    {
515        //elamaLaskuri = new DoubleMeter(100);
516
517        pelaaja1elamanaytto = new Label(pelaaja1.Elamat.ToString());
518        pelaaja1elamanaytto.X = Screen.Left + 100;
519        pelaaja1elamanaytto.Y = Screen.Top - 80;
520        //elamaNaytto.TextColor = Color.Red;
521        //elamaNaytto.DecimalPlaces = 0;
522//        elamaNaytto.BindTo(pelaaja1.Elamat);
523        Add(pelaaja1elamanaytto);
524        Label elamateksti = new Label("Lives: ");
525        elamateksti.X = Screen.Left + 50;
526        elamateksti.Y = Screen.Top - 80;
527        elamateksti.TextColor = Color.Red;
528        Add(elamateksti);
529        }
530
531    void luoElamat2()
532    {
533        //elamaLaskuri = new DoubleMeter(100);
534
535        pelaaja2elamanaytto = new Label(pelaaja2.Elamat.ToString());
536        pelaaja2elamanaytto.X = Screen.Right - 100;
537        pelaaja2elamanaytto.Y = Screen.Top - 80;
538        //elamaNaytto.TextColor = Color.Red;
539        //elamaNaytto.DecimalPlaces = 0;
540        //        elamaNaytto.BindTo(pelaaja1.Elamat);
541        Add(pelaaja2elamanaytto);
542        Label elamateksti2 = new Label("Lives: ");
543        elamateksti2.X = Screen.Right - 150;
544        elamateksti2.Y = Screen.Top - 80;
545        elamateksti2.TextColor = Color.Red;
546        Add(elamateksti2);
547    }
548
549
550}
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
Note: See TracBrowser for help on using the repository browser.