source: 2017/27/EinoS/FireFight_Demo/FireFight_Demo/FireFight_Demo/FireFight_Demo.cs @ 8988

Revision 8988, 18.5 KB checked in by npo17_41, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class FireFight_Demo : PhysicsGame
10{
11
12    Animation suuliekkixd;
13    PhysicsObject taso;
14    PlatformCharacter pelaaja1;
15    PlatformCharacter pelaaja2;
16    PhysicsObject suuliekki2;
17    PhysicsObject suuliekki;
18    PhysicsObject ammus2;
19    PhysicsObject hylsy2;
20    PhysicsObject hylsy;
21    PhysicsObject ammus;
22    PhysicsObject taustaammus;
23    PhysicsObject powerup;
24    PhysicsObject ase;
25    PhysicsObject alareuna;
26    PhysicsObject ylareuna;
27    Image pelaaja1kuva = LoadImage("IdleBO1");
28    Image pelaaja2kuva = LoadImage("IdleRO1");
29    Image kentta1bg = LoadImage("Kenttä1BG");
30    Image titlelogo = LoadImage("FireFightLogo");
31    Image ammusKuva = LoadImage("Luoti1");
32    Image ammusKuva2 = LoadImage("Luoti2");
33    Image hylsyKuva = LoadImage("Hylsy");
34    Image hylsyKuva2 = LoadImage("Hylsy2");
35    Image osuma = LoadImage("HIT");
36    Timer suuliekkitimer;
37    Explosion ammus1rajahdys;
38    Explosion ammus2rajahdys;
39
40    int kenttanro = 1;
41    Vector ejectO = new Vector(-50, 500);
42    Vector ejectV = new Vector(50, 500);
43    Vector spawn1 = new Vector(200, 300);
44    Vector spawn2 = new Vector(-100, 300);
45    int pelaaja1hypyt = 1;
46    int pelaaja2hypyt = 1;
47    int sairaannopee = 500;
48    IntMeter pelaaja1pisteet;
49    IntMeter pelaaja2pisteet;
50    const int RUUDUN_KOKO = 80;
51    const double nopeus = 400;
52    Vector lähtönopeusO = new Vector(600,0);
53    Vector lähtönopeusV = new Vector(-600, 0);
54    bool alkuvalikkoKayty = false;
55    int pelaaja1suunta = 2;
56    int pelaaja2suunta = 2;
57    public override void Begin()
58    {
59        ClearAll();
60        if(alkuvalikkoKayty == false)
61        {
62            ValikkoTausta();
63            MultiSelectWindow alkuvalikko = new MultiSelectWindow("", "Aloita peli", "Lopeta");
64            alkuvalikko.AddItemHandler(0, delegate {
65                AloitaPeli(kenttanro);
66                alkuvalikkoKayty = true;
67                }
68            );
69            alkuvalikko.AddItemHandler(1, Exit);
70            alkuvalikko.DefaultCancel = 1;
71            alkuvalikko.Color = Color.BloodRed;
72            alkuvalikko.Shape = Shape.Octagon;
73            Add(alkuvalikko);
74        }
75    }
76    void ValikkoTausta()
77    {
78        Level.Background.Color = Color.DarkBlue;
79        Level.Background.Image = titlelogo;
80        Timer taustaLaskuri = new Timer();
81        taustaLaskuri.Interval = 0.04;
82        taustaLaskuri.Timeout += delegate
83        {
84            LuoTaustaAmmus(RandomGen.NextDouble(Level.Left - 450, Level.Right + 450), Level.Bottom - 150, RandomGen.SelectOne(Shape.Diamond, Shape.Ellipse, Shape.Hexagon), RandomGen.SelectOne(Color.Blue, Color.Red), 2, true);
85            taustaammus.Hit(new Vector(0.0, RandomGen.NextDouble(4.0, 40.0)));
86        };
87        taustaLaskuri.Start();
88    }
89    void LuoTaustaAmmus(double x, double y, Shape shape, Color vari, int cig, bool ignores)
90    {
91        taustaammus = new PhysicsObject(32.0, 32.0);
92        taustaammus.X = x;
93        taustaammus.Y = y;
94        taustaammus.Shape = shape;
95        taustaammus.Color = vari;
96        taustaammus.CanRotate = true;
97        taustaammus.IgnoresCollisionResponse = false;
98        taustaammus.IgnoresExplosions = ignores;
99        taustaammus.CollisionIgnoreGroup = cig;
100        taustaammus.IgnoresCollisionWith(taustaammus);
101        taustaammus.Tag = "taustaammus";
102        Add(taustaammus);
103    }
104    void AloitaPeli(int kenttanro)
105    {
106        ClearAll();
107        LuoPistelaskurit();
108        Luokentta(kenttanro);
109        Kontrollit();
110        Kamera();
111        LuoPistelaskurit();
112        Poistasuuliekkiajastin();
113    }
114    void LuoPistelaskurit()
115    {
116        pelaaja1pisteet = new IntMeter(0);
117        pelaaja1pisteet.MaxValue = 10;
118        pelaaja1pisteet.UpperLimit += Pelaaja1Voittaa;
119        Label pisteNaytto1 = new Label();
120        pisteNaytto1.X = Screen.Right - 100;
121        pisteNaytto1.Y = Screen.Top - 100;
122        pisteNaytto1.TextColor = Color.Black;
123        pisteNaytto1.Color = Color.White;
124        pisteNaytto1.BindTo(pelaaja1pisteet);
125        Add(pisteNaytto1);
126
127        pelaaja2pisteet = new IntMeter(0);
128        pelaaja2pisteet.MaxValue = 10;
129        pelaaja2pisteet.UpperLimit += Pelaaja2Voittaa;
130        Label pisteNaytto2 = new Label();
131        pisteNaytto2.X = Screen.Left + 100;
132        pisteNaytto2.Y = Screen.Top - 100;
133        pisteNaytto2.TextColor = Color.Black;
134        pisteNaytto2.Color = Color.White;
135        pisteNaytto2.BindTo(pelaaja2pisteet);
136        Add(pisteNaytto2);
137    }
138    void Kamera()
139    {
140        //Camera.ZoomFactor = 1;
141        //Camera.Follow(pelaaja1, pelaaja2);
142        Camera.StayInLevel = true;
143        Camera.ZoomTo(-1500, -1500, 1500, 500);
144    }
145    void Luokentta(int kenttanro)
146
147    {
148
149        Gravity = new Vector(0, -800);
150
151        string kenttanimi = kenttanro.ToString();
152        TileMap kentta = TileMap.FromLevelAsset(kenttanimi);
153        kentta.SetTileMethod('P', LisaaTaso);
154        kentta.SetTileMethod('A', POWERUP);
155        kentta.SetTileMethod('N', LisaaPelaaja);
156        kentta.SetTileMethod('M', LisaaToinenPelaaja);
157        kentta.SetTileMethod('O', LisaaAse);
158        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
159        alareuna = Level.CreateBottomBorder(1, false);
160        alareuna.Tag = "alareuna";
161        ylareuna = Level.CreateTopBorder(1, false);
162        ylareuna.Tag = "ylareuna";
163        Level.CreateHorizontalBorders(1, false, Color.Azure);
164        Level.Background.Image = kentta1bg;
165        Level.Background.FitToLevel();
166    }
167    void Kontrollit()
168    {
169        Keyboard.Listen(Key.Up, ButtonState.Pressed, Pelaaja1Hyppaa, "Pelaaja hyppää", pelaaja1, nopeus);
170        Keyboard.Listen(Key.Down, ButtonState.Pressed, Pelaaja1Hyppaa, "Pelaaja laskeutuu", pelaaja1, -nopeus);
171        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
172        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
173        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, Pelaaja1Ammu, "Ampuu aseella");
174        Keyboard.Listen(Key.W, ButtonState.Pressed, Pelaaja2Hyppaa, "Pelaaja hyppää", pelaaja2, nopeus);
175        Keyboard.Listen(Key.S, ButtonState.Pressed, Pelaaja2Hyppaa, "Pelaaja laskeutuu", pelaaja2, -nopeus);
176        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
177        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
178        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, Pelaaja2Ammu, "Ampuu aseella");
179        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
180        Keyboard.Listen(Key.Right, ButtonState.Down, SuunnanVaihdosBO, "null");
181        Keyboard.Listen(Key.Left, ButtonState.Down, SuunnanVaihdosBV, "null");
182        Keyboard.Listen(Key.D, ButtonState.Down, SuunnanVaihdosRO, "null");
183        Keyboard.Listen(Key.A, ButtonState.Down, SuunnanVaihdosRV, "null");
184    }
185    void Pelaaja1Hyppaa(PlatformCharacter hahmo, double nopeus)
186    {
187          if(pelaaja1hypyt >= 0)
188          {
189              pelaaja1hypyt--;
190              hahmo.ForceJump(nopeus * 3);
191          }
192    }
193    void Pelaaja2Hyppaa(PlatformCharacter hahmo, double nopeus)
194    {
195        if (pelaaja2hypyt >= 0)
196        {
197            pelaaja2hypyt--;
198            hahmo.ForceJump(nopeus * 3);
199        }
200
201    }
202    void SuunnanVaihdosBO()
203    {
204        pelaaja1suunta = 2;
205    }
206    void SuunnanVaihdosBV()
207    {
208        pelaaja1suunta = 1;
209    }
210    void SuunnanVaihdosRO()
211    {
212        pelaaja2suunta = 2;
213    }
214    void SuunnanVaihdosRV()
215    {
216        pelaaja2suunta = 1;
217    }
218    void Poistasuuliekkiajastin()
219
220    {
221        suuliekkitimer = new Timer();
222        suuliekkitimer.Interval = 0.1;
223        suuliekkitimer.Timeout += Poistasuuliekki;
224       
225    }
226    void Pelaaja1Ammu()
227    {
228        hylsy = new PhysicsObject(35, 22);
229        ammus = new PhysicsObject(77, 20);
230        suuliekki = new PhysicsObject(180, 80);
231        suuliekki2 = new PhysicsObject(180, 80);
232
233        suuliekki.IgnoresExplosions = true;
234        suuliekki.IgnoresCollisionResponse = true;
235        suuliekki.IgnoresGravity = true;
236        suuliekki.CanRotate = false;
237        suuliekkixd = LoadAnimation("suuliekkix");
238        suuliekki2.IgnoresExplosions = true;
239        suuliekki2.IgnoresCollisionResponse = true;
240        suuliekki2.IgnoresGravity = true;
241        suuliekki2.CanRotate = false;
242
243        hylsy.RotateImage = true;
244        hylsy.CanRotate = true;
245        hylsy.AngularVelocity = 10;
246        hylsy.IgnoresCollisionResponse = true;
247       
248        if (pelaaja1suunta == 2)
249         {
250            ammus.Shape = Shape.Circle;
251            ammus.IgnoresExplosions = true;
252            ammus.IgnoresCollisionResponse = true;
253            ammus.IgnoresGravity = true;
254            ammus.StopVertical();
255            ammus.Image = ammusKuva;
256            ammus.X = pelaaja1.X + 110;
257            ammus.Tag = "9mmB";
258            ammus.Y = pelaaja1.Y + 74;
259            ammus.Hit(lähtönopeusO);
260            AddCollisionHandler(ammus, "pelaaja2", Ammus1Osuu);
261
262            hylsy.X = pelaaja1.X + 62;
263            hylsy.Y = pelaaja1.Y + 74;
264            hylsy.Hit(ejectO);
265            hylsy.Image = hylsyKuva;
266
267            suuliekki.X = pelaaja1.X + 200;
268            suuliekki.Y = pelaaja1.Y + 74;
269            suuliekki.Animation = new Animation(suuliekkixd);
270            suuliekki.Animation.Start(1);
271
272            Add(suuliekki);
273            Add(hylsy);
274            Add(ammus);
275            suuliekkitimer.Start(1);
276        }
277        if (pelaaja1suunta == 1)
278        {
279            ammus.Shape = Shape.Circle;
280            ammus.IgnoresExplosions = true;
281            ammus.IgnoresCollisionResponse = true;
282            ammus.IgnoresGravity = true;
283            ammus.StopVertical();
284            ammus.Image = ammusKuva2;
285            ammus.X = pelaaja1.X + -110;
286            ammus.Y = pelaaja1.Y + 74;
287            ammus.Tag = "9mmB";
288            ammus.Hit(lähtönopeusV);
289            AddCollisionHandler(ammus, "pelaaja2", Ammus1Osuu);
290
291            hylsy.X = pelaaja1.X + -62;
292            hylsy.Y = pelaaja1.Y + 74;
293            hylsy.Hit(ejectV);
294            hylsy.Image = hylsyKuva2;
295            suuliekki2.X = pelaaja1.X - 200;
296            suuliekki2.Y = pelaaja1.Y + 74;
297            suuliekki2.Animation = new Animation(suuliekkixd);
298            suuliekki2.Animation.Start(1);
299
300            Add(suuliekki2);
301            Add(hylsy);
302            Add(ammus);
303            suuliekkitimer.Start(1);
304        }
305
306    }
307    void Ammus1Osuu(PhysicsObject ammus, PhysicsObject pelaaja2)
308    {
309        ammus1rajahdys = new Explosion(300);
310        ammus1rajahdys.Image = osuma;
311        ammus1rajahdys.Speed = sairaannopee*4;
312        ammus1rajahdys.Force = 1000;
313        ammus1rajahdys.Position = ammus.Position;
314        Add(ammus1rajahdys);
315        ammus.Destroy();
316    }
317    void Pelaaja2Ammu()
318    {
319        hylsy2 = new PhysicsObject(35, 22);
320        hylsy2.RotateImage = true;
321        hylsy2.CanRotate = true;
322        hylsy2.AngularVelocity = 10;
323        hylsy2.IgnoresCollisionResponse = true;
324        if (pelaaja2suunta == 2)
325        {
326            ammus2 = new PhysicsObject(77, 20);
327            ammus2.Shape = Shape.Circle;
328            ammus2.IgnoresCollisionResponse = true;
329            ammus2.IgnoresExplosions = true;
330            ammus2.IgnoresGravity = true;
331            ammus2.Image = ammusKuva;
332            ammus2.Tag = "9mmR";
333            ammus2.StopVertical();
334            ammus2.X = pelaaja2.X + 110;
335            ammus2.Y = pelaaja2.Y + 74;
336            ammus2.Hit(lähtönopeusO);
337            AddCollisionHandler(ammus2, "pelaaja1", Ammus2Osuu);
338
339            hylsy2 = new PhysicsObject(35, 22);
340
341            hylsy2.RotateImage = true;
342            hylsy2.CanRotate = true;
343            hylsy2.AngularVelocity = 10;
344            hylsy2.IgnoresCollisionResponse = true;
345            hylsy2.X = pelaaja2.X + 62;
346            hylsy2.Y = pelaaja2.Y + 74;
347            hylsy2.Hit(ejectO);
348            hylsy2.Image = hylsyKuva;
349
350            Add(hylsy2);
351
352            Add(ammus2);
353        }
354        if (pelaaja2suunta == 1)
355        {
356
357            ammus2 = new PhysicsObject(77, 20);
358
359            ammus2.Shape = Shape.Circle;
360            ammus2.IgnoresCollisionResponse = true;
361            ammus2.IgnoresExplosions = true;
362            ammus2.Image = ammusKuva2;
363            ammus2.IgnoresGravity = true;
364            ammus2.Tag = "9mmR";
365            ammus2.StopVertical();
366            ammus2.X = pelaaja2.X + -110;
367            ammus2.Y = pelaaja2.Y + 74;
368            ammus2.Hit(lähtönopeusV);
369            AddCollisionHandler(ammus2, "pelaaja1", Ammus2Osuu);
370
371            hylsy2 = new PhysicsObject(35, 22);
372
373            hylsy2.RotateImage = true;
374            hylsy2.CanRotate = true;
375            hylsy2.AngularVelocity = 10;
376            hylsy2.IgnoresCollisionResponse = true;
377            hylsy2.X = pelaaja2.X + -62;
378            hylsy2.Y = pelaaja2.Y + 74;
379            hylsy2.Hit(ejectV);
380            hylsy2.Image = hylsyKuva2;
381
382            Add(hylsy2);
383
384            Add(ammus2);
385
386        }
387
388
389
390        /*/ Vector suunta = (pelaaja1.Position - pelaaja2.Position).Normalize();
391        ase.Angle = suunta.Angle;
392        PhysicsObject ammus = ase.Shoot();/*/
393    }
394    void Ammus2Osuu(PhysicsObject ammus, PhysicsObject pelaaja1)
395    {
396        ammus2rajahdys = new Explosion(300);
397        ammus2rajahdys.Image = osuma;
398        ammus2rajahdys.Speed = sairaannopee*4;
399        ammus2rajahdys.Force = 1000;
400        ammus2rajahdys.Position = ammus.Position;
401        Add(ammus2rajahdys);
402        ammus.Destroy();
403    }
404    void Poistasuuliekki()
405    {
406        suuliekki.Destroy();
407        suuliekki2.Destroy();
408        suuliekki.Destroy();
409        suuliekki2.Destroy();
410
411    }
412    void Liikuta(PlatformCharacter hahmo, double nopeus)
413    {
414        hahmo.Walk(nopeus);
415    }
416    void LisaaTaso(Vector paikka, double leveys, double korkeus)
417    {
418        taso = new PhysicsObject(leveys, korkeus);
419        taso.Position = paikka;
420        taso.Color = Color.Azure;
421        taso.Tag = "taso";
422        taso.IgnoresGravity = true;
423        taso.IgnoresPhysicsLogics = true;
424        taso.MakeOneWay();
425        taso.MakeStatic();
426        taso.IsVisible = false;
427
428        Add(taso);
429
430    }
431
432    void POWERUP(Vector paikka, double leveys, double korkeus)
433    {
434        powerup = new PhysicsObject(leveys, korkeus);
435        powerup.Position = paikka;
436        powerup.Color = Color.Azure;
437        powerup.Tag = "powerup";
438        Add(powerup); 
439
440    }
441    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
442    {
443        pelaaja1 = new PlatformCharacter(244, 284.5);
444        pelaaja1.Position = paikka;
445        pelaaja1.Mass = 3.0;
446        AddCollisionHandler(pelaaja1, "taso", TuplaHyppy);
447        AddCollisionHandler(pelaaja1, "alareuna", Pelaaja1Kuolee);
448        //pelaaja1.IgnoresCollisionWith(pelaaja2);
449        pelaaja1.MaintainMomentum = true;
450        pelaaja1.Tag = "pelaaja1";
451        pelaaja1.Image = pelaaja1kuva;
452        Add(pelaaja1);
453
454    }
455    void LisaaToinenPelaaja(Vector paikka, double leveys, double korkeus)
456    {
457        pelaaja2 = new PlatformCharacter(244, 284.5);
458        pelaaja2.Position = paikka;
459        pelaaja2.Mass = 3.0;
460        AddCollisionHandler(pelaaja2, "taso", TuplaHyppy);
461        AddCollisionHandler(pelaaja2, "alareuna", Pelaaja2Kuolee);
462        //pelaaja2.IgnoresCollisionWith(pelaaja1);
463        pelaaja2.MaintainMomentum = true;
464        pelaaja2.Tag = "pelaaja2";
465        pelaaja2.Image = pelaaja2kuva;
466        Add(pelaaja2);
467
468    }
469    void LisaaAse(Vector paikka, double leveys, double korkeus)
470    {
471
472        ase = PhysicsObject.CreateStaticObject(leveys, korkeus);
473        ase.Position = paikka;
474        ase.Color = Color.Azure;
475        ase.Tag = "ase";
476        Add(ase);
477    }
478    void TuplaHyppy(PhysicsObject pelaaja, PhysicsObject taso)
479    {
480        if(taso.Tag.ToString() == "taso")
481        {
482            if(pelaaja.Tag.ToString() == "pelaaja1")
483            {
484                pelaaja1hypyt = 1;
485            }
486            if(pelaaja.Tag.ToString() == "pelaaja2")
487            {
488                pelaaja2hypyt = 1;
489            }
490        }
491    }
492    void Pelaaja1Kuolee(PhysicsObject pelaaja, PhysicsObject pohja)
493    {
494       
495        pelaaja2pisteet.Value += 1;
496        pelaaja1.IsVisible = false;
497        //ClearControls();
498        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
499        Timer.SingleShot(3.0, delegate
500        {
501            Kontrollit();
502            pelaaja1.AbsolutePosition = spawn1;
503            pelaaja1.IsVisible = true;
504        });
505    }
506    void Pelaaja2Kuolee(PhysicsObject pelaaja, PhysicsObject pohja)
507    {
508       
509        pelaaja1pisteet.Value += 1;
510        pelaaja2.IsVisible = false;
511        //ClearControls();
512        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
513        Timer.SingleShot(3.0, delegate 
514        {
515            Kontrollit();
516            pelaaja2.AbsolutePosition = spawn2;
517            pelaaja2.IsVisible = true;     
518        });
519    }
520    void Pelaaja1Voittaa()
521    {
522        MultiSelectWindow voittoikkuna = new MultiSelectWindow("Sininen voittaa", "Uudestaan", "Alkuvalikkoon", "Poistu");
523        voittoikkuna.AddItemHandler(0, delegate
524        {
525            AloitaPeli(kenttanro);
526        });
527        voittoikkuna.AddItemHandler(1, delegate
528        {
529            alkuvalikkoKayty = false;
530            Begin();
531        });
532        voittoikkuna.AddItemHandler(2, Exit);
533        voittoikkuna.Color = Color.BloodRed;
534        voittoikkuna.Shape = Shape.Octagon;
535        Add(voittoikkuna);
536    }
537    void Pelaaja2Voittaa()
538    {
539        MultiSelectWindow voittoikkuna = new MultiSelectWindow("Punainen voittaa", "Uudestaan", "Alkuvalikkoon", "Poistu");
540        voittoikkuna.AddItemHandler(0, delegate
541        {
542            AloitaPeli(kenttanro);
543        });
544        voittoikkuna.AddItemHandler(1, delegate
545        {
546            alkuvalikkoKayty = false;
547            Begin();
548        });
549        voittoikkuna.AddItemHandler(2, Exit);
550        voittoikkuna.Color = Color.BloodRed;
551        voittoikkuna.Shape = Shape.Octagon;
552        Add(voittoikkuna);
553
554    }
555}
Note: See TracBrowser for help on using the repository browser.