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

Revision 8980, 17.5 KB checked in by npo17_39, 2 years ago (diff)

koodia ja grafiikkaa

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