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

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