source: 2014/27/OttoR/GrazyGunFighters/GrazyGunFighters/GrazyGunFighters/GrazyGunFighters.cs @ 5455

Revision 5455, 16.1 KB checked in by otrolig, 6 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
9
10public class GrazyGunFighters : PhysicsGame
11{
12
13    private Animation soltunkävely;
14    private Animation soltunkävely2;
15    private Animation seiso1;
16    private Animation seiso2;
17
18    DoubleMeter elamaLaskuri;
19    DoubleMeter elamaLaskuri2;
20
21    IntMeter pisteLaskuri;
22    IntMeter pisteLaskuri2;
23
24    IntMeter kranulaskuri1;
25    IntMeter kranulaskuri2;
26
27    const double nopeus = 147;
28    const double hyppyNopeus = 760;
29    const int RUUDUN_KOKO = 40;
30
31
32    PlatformCharacter pelaaja1;
33    PlatformCharacter pelaaja2;
34
35    AssaultRifle pelaajan1Ase;
36    AssaultRifle pelaajan2Ase;
37
38    DoubleMeter alaspainLaskuri;
39    Timer aikaLaskuri;
40
41
42    Image pelikuva = LoadImage("Solttu2");
43    Image pelaajankuva = LoadImage("Solttu");
44   
45    Image tasokuva = LoadImage("vesi");
46    Image atasokuva = LoadImage("lankku");
47    Image btasokuva = LoadImage("metalli");
48    Image ctasokuva = LoadImage("Aperture");
49    Image putkipommi = LoadImage("putkipommi");
50    Image taustaKuva = LoadImage("taustakuva");
51
52    Vector alkupaikka1;
53    Vector alkupaikka2;
54
55    public override void Begin()
56    {
57        //SetWindowSize(1024, 768);
58        IsFullScreen = true;
59       
60        LuoAlkuvalikko();
61    }
62
63
64
65    //TÄSTÄ ALKAA PELI 1.
66    //TÄSTÄ ALKAA PELI 1.
67    //TÄSTÄ ALKAA PELI 1.
68    //TÄSTÄ ALKAA PELI 1.
69    //TÄSTÄ ALKAA PELI 1.
70
71
72
73    void aloitapeli1()
74    {
75        MediaPlayer.Play("taustamusa");
76
77
78        LuoElamaLaskuri();
79        LuoElamaLaskuri2();
80        LuoAikaLaskuri();
81
82        soltunkävely = LoadAnimation("Solttu1 animaatio");
83        soltunkävely2 = LoadAnimation("Solttu2 animaatio");
84        seiso1 = LoadAnimation("seiso1");
85        seiso2 = LoadAnimation("seiso2");
86        Gravity = new Vector(0, -1500);
87
88        LuoKentta();
89        LisaaNappaimet();
90
91        LuoPistelaskuri();
92        LuoPistelaskuri2();
93
94        //Camera.ZoomFactor = -30.0;
95        //Camera.StayInLevel = true;
96        Camera.ZoomToLevel();
97    }
98
99    void LuoPistelaskuri()
100    {
101        pisteLaskuri = new IntMeter(0);
102
103        Label pisteNaytto = new Label();
104        //pisteNaytto.X = Screen.Left + 750;
105        pisteNaytto.X = -170;
106        pisteNaytto.Y = Screen.Top - 100;
107        pisteNaytto.TextColor = Color.White;
108        pisteNaytto.TextScale *= 3;
109        pisteNaytto.Color = Color.Blue;
110
111        pisteNaytto.BindTo(pisteLaskuri);
112        Add(pisteNaytto);
113    }
114
115    void LuoPistelaskuri2()
116    {
117        pisteLaskuri2 = new IntMeter(0);
118
119        Label pisteNaytto = new Label();
120        //pisteNaytto.X = Screen.Right - 750;
121        pisteNaytto.X = 170;
122        pisteNaytto.Y = Screen.Top - 100;
123        pisteNaytto.TextColor = Color.White;
124        pisteNaytto.Color = Color.Red;
125        pisteNaytto.TextScale *= 3;
126        pisteNaytto.BindTo(pisteLaskuri2);
127        Add(pisteNaytto);
128    }
129
130    void LuoElamaLaskuri()
131    {
132        elamaLaskuri = new DoubleMeter(100);
133        elamaLaskuri.MaxValue = 100;
134        elamaLaskuri.LowerLimit += ElamaLoppui;
135
136        ProgressBar elamaPalkki = new ProgressBar(400, 20);
137        elamaPalkki.Right = Screen.Right - 10;
138        elamaPalkki.Y = Screen.Bottom + 50;
139        elamaPalkki.BindTo(elamaLaskuri);
140
141        //Taustaväri:
142        elamaPalkki.Color = Color.Red;
143
144        //Palkin väri:
145        elamaPalkki.BarColor = Color.BrightGreen;
146
147        //Reunan väri:
148        elamaPalkki.BorderColor = Color.Black;
149
150
151        Add(elamaPalkki);
152    }
153
154    void ElamaLoppui2()
155    {
156        pisteLaskuri2.Value++;
157        pelaaja2.Position = alkupaikka2;
158        elamaLaskuri2.Value = 100;
159        kranulaskuri2.Value = 10;
160    }
161
162    void ElamaLoppui()
163    {
164        pisteLaskuri.Value++;
165       
166        pelaaja1.Position = alkupaikka1;
167        elamaLaskuri.Value = 100;
168        kranulaskuri1.Value = 10;
169    }
170
171    void LuoElamaLaskuri2()
172    {
173        elamaLaskuri2 = new DoubleMeter(100);
174        elamaLaskuri2.MaxValue = 100;
175        elamaLaskuri2.LowerLimit += ElamaLoppui2;
176
177        ProgressBar elamaPalkki2 = new ProgressBar(400, 20);
178        elamaPalkki2.Left = Screen.Left + 10; // -250;
179        elamaPalkki2.Y = Screen.Bottom + 50;
180        elamaPalkki2.BindTo(elamaLaskuri2);
181
182        //Taustaväri:
183        elamaPalkki2.Color = Color.Red;
184
185        //Palkin väri:
186        elamaPalkki2.BarColor = Color.BrightGreen;
187
188        //Reunan väri:
189        elamaPalkki2.BorderColor = Color.Black;
190
191
192        Add(elamaPalkki2);
193    }
194
195
196
197    void HeitaKranaatti(PlatformCharacter pelaaja)
198    {
199        IntMeter kranulaskuri;
200        if (pelaaja==pelaaja1) kranulaskuri = kranulaskuri1;
201        else if (pelaaja==pelaaja2) kranulaskuri = kranulaskuri2;
202        else return;
203
204        if (kranulaskuri.Value <= 0 )
205        {
206            return;
207        }
208   
209        Grenade kranu = new Grenade(10.0);
210        pelaaja.Throw(kranu, Angle.FromDegrees(40+RandomGen.NextDouble(-5, 5)), 10500);
211        kranu.Explosion.MaxRadius = 100;
212        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
213        kranu.CollisionIgnoreGroup = 1;
214        kranu.Image = putkipommi;
215        kranulaskuri.Value--;
216    }
217
218    void Teevahinkoa(IPhysicsObject kohde, double määrä)
219    {
220        if (kohde == pelaaja1)
221        {
222            elamaLaskuri.Value -= määrä;
223        }
224        else
225        {
226            elamaLaskuri2.Value -= määrä;
227        }
228    }
229
230
231    IntMeter Luokranulaskuri(double x, double y)
232    {
233        IntMeter kranulaskuri = new IntMeter(10);
234
235        Label pisteNaytto = new Label();
236        pisteNaytto.X = x;
237        pisteNaytto.Y = y;
238        pisteNaytto.TextColor = Color.White;
239        pisteNaytto.Color = Color.Green;
240        pisteNaytto.Title = "Grenades";
241        pisteNaytto.BindTo(kranulaskuri);
242        Add(pisteNaytto);
243        return kranulaskuri;
244    }
245
246    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
247    {
248        Teevahinkoa(rajahdyksenKohde, 30);
249    }
250
251    void RäjähdysOsui(IPhysicsObject rajahdyksenKohde, Vector v)
252    {
253        Teevahinkoa(rajahdyksenKohde, 25);
254    }
255
256    void PommiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
257    {
258        Teevahinkoa(rajahdyksenKohde, 100);
259    }
260
261
262    void LuoKentta()
263    {
264        TileMap kentta = TileMap.FromLevelAsset("kentta1");
265        kentta.SetTileMethod('#', LisaaTaso);
266        kentta.SetTileMethod('-', LisaaTaso2);
267        kentta.SetTileMethod('*', LisaaTahti);
268        kentta.SetTileMethod('R', LisaaPelaaja);
269        kentta.SetTileMethod('B', LisaaPelaaja2);
270        kentta.SetTileMethod('E', LisaaTaso3);
271        kentta.SetTileMethod('H', LisaaTaso5);
272        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
273        Level.CreateBorders(1.0,false);
274        Level.Background.FitToLevel();
275        Level.Background.Color = Color.Silver;
276
277    }
278
279
280
281
282
283    void LisaaTaso(Vector paikka, double leveys, double korkeus)
284    {
285        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
286        taso.Position = paikka;
287        taso.Size = new Vector(40, 40);
288        taso.Image = atasokuva;
289        taso.Color = Color.Brown;
290        Add(taso);
291    }
292    void LisaaTaso5(Vector paikka, double leveys, double korkeus)
293    {
294        PhysicsObject taso5 = PhysicsObject.CreateStaticObject(leveys, korkeus);
295        taso5.Position = paikka;
296        taso5.Size = new Vector(40, 40);
297        taso5.Image = ctasokuva;
298        taso5.Color = Color.White;
299        Add(taso5);
300    }
301
302    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
303    {
304        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
305        taso3.Position = paikka;
306        taso3.Size = new Vector(40, 40);
307        taso3.Image = tasokuva;
308        taso3.Color = Color.Blue;
309        taso3.IgnoresCollisionResponse = true;
310        taso3.Tag = "myrkky";
311
312        Add(taso3, 1);
313
314    }
315
316    void LisaaTahti(Vector paikka, double leveys, double korkeus)
317    {
318        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
319        tahti.IgnoresCollisionResponse = true;
320        tahti.Position = paikka;
321
322        Add(tahti);
323    }
324    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
325    {
326        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
327        taso.Position = paikka;
328        taso.Size = new Vector(40, 23);
329        taso.Color = Color.Gray;
330        taso.Image = btasokuva;
331        Add(taso);
332    }
333
334    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
335    {
336        pelaaja1 = new PlatformCharacter(leveys, korkeus);
337        pelaaja1.Position = paikka;
338        pelaaja1.Mass = 4.0;
339        pelaaja1.Image = pelaajankuva;
340        pelaaja1.AnimWalk = new Animation(soltunkävely);
341        pelaaja1.AnimIdle = new Animation(seiso1);
342        pelaaja1.Tag = "vihollinen";
343        pelaaja1.CollisionIgnoreGroup = 1;
344
345        alkupaikka1 = paikka;
346
347        pelaajan1Ase = new AssaultRifle(30, 10);
348        pelaajan1Ase.Y = 10;
349        pelaajan1Ase.IsVisible = false;
350
351        pelaajan1Ase.InfiniteAmmo = true;
352        pelaajan1Ase.ProjectileCollision = AmmusOsui;
353        pelaajan1Ase.CanHitOwner = true;
354        pelaajan1Ase.FireRate = 1;
355
356        pelaaja1.Add(pelaajan1Ase);
357
358
359        Add(pelaaja1);
360
361        kranulaskuri1=Luokranulaskuri(300, Screen.Top - 100);
362
363        AddCollisionHandler(pelaaja1, "myrkky", PelaajaOsuiMyrkkyyn);
364
365    }
366    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
367    {
368
369        pelaaja2 = new PlatformCharacter(leveys, korkeus);
370        pelaaja2.Position = paikka;
371        pelaaja2.Mass = 4.0;
372        pelaaja2.Image = pelikuva;
373        pelaaja2.AnimWalk = new Animation(soltunkävely2);
374        pelaaja2.AnimIdle = new Animation(seiso2);
375        pelaaja2.Tag = "vihollinen";
376        pelaaja2.CollisionIgnoreGroup = 1;
377
378        alkupaikka2 = paikka;
379
380        pelaajan2Ase = new AssaultRifle(30, 10);
381        pelaajan2Ase.Y = 10;
382        pelaajan2Ase.IsVisible = false;
383        //Ammusten määrä aluksi:
384        pelaajan2Ase.InfiniteAmmo = true;
385        pelaajan2Ase.FireRate = 1;
386        //Mitä tapahtuu kun ammus osuu johonkin?
387        pelaajan2Ase.ProjectileCollision = AmmusOsui;
388        pelaajan2Ase.CanHitOwner = true;
389
390        pelaaja2.Add(pelaajan2Ase);
391
392
393        Add(pelaaja2);
394
395        kranulaskuri2=Luokranulaskuri(-300, Screen.Top - 100);
396
397        AddCollisionHandler(pelaaja2, "myrkky", PelaajaOsuiMyrkkyyn);
398
399    }
400
401
402    void PelaajaOsuiMyrkkyyn(PhysicsObject pelaaja, PhysicsObject myrkky)
403    {
404        if (myrkky.Tag.Equals("myrkky"))
405        {
406            Teevahinkoa(pelaaja, 10);
407        }
408    }
409
410    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
411    {
412        ammus.Destroy();
413        Explosion räjähdys = new Explosion(70);
414        räjähdys.Position = ammus.Position;
415        räjähdys.AddShockwaveHandler("vihollinen", RäjähdysOsui);
416        Add(räjähdys);
417    }
418
419
420
421    void LisaaNappaimet()
422    {
423        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
424        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Begin");
425
426        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
427        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
428        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
429
430        Keyboard.Listen(Key.End, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti", pelaaja1);
431        Keyboard.Listen(Key.D2, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti", pelaaja2);
432
433        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
434
435        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
436        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
437        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
438
439        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
440        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
441        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
442
443        Keyboard.Listen(Key.Delete, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1, pelaajan1Ase);
444
445        Keyboard.Listen(Key.D1, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2, pelaajan2Ase);
446
447
448        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
449        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
450        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
451
452
453        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
454    }
455
456    void AmmuAseella(PlatformCharacter pelaaja, AssaultRifle ase)
457    {
458        ase.AbsoluteAngle = pelaaja.FacingDirection.Angle;
459        PhysicsObject ammus = ase.Shoot();
460
461        if (ammus != null)
462        {
463            ammus.X += pelaaja.FacingDirection.GetVector().X * 30;
464            ammus.CollisionIgnoreGroup = 0;
465            ammus.Size *= 1.5;
466            ammus.Image = LoadImage("ammus");
467            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
468
469        }
470    }
471
472
473    void Liikuta(PlatformCharacter hahmo, double nopeus)
474    {
475        hahmo.Walk(nopeus);
476
477
478
479
480
481    }
482    void LuoAlkuvalikko()
483    {
484
485        MultiSelectWindow alkuValikko = new MultiSelectWindow("GrazyGunFighters",
486        "Deathmatch", "Exit");
487        alkuValikko.AddItemHandler(0, aloitapeli1);
488        alkuValikko.AddItemHandler(1, Exit);
489
490
491        Add(alkuValikko);
492
493    }
494
495    void Hyppaa(PlatformCharacter hahmo, double nopeus)
496    {
497        hahmo.Jump(nopeus);
498    }
499
500    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
501    {
502
503        MessageDisplay.Add("Keräsit tähden!");
504        tahti.Destroy();
505    }
506
507    Label aikaNaytto;
508
509    void LuoAikaLaskuri()
510    {
511        alaspainLaskuri = new DoubleMeter(2*60+25);
512
513        aikaLaskuri = new Timer();
514        aikaLaskuri.Interval = 0.1;
515        aikaLaskuri.Timeout += LaskeAlaspain;
516        aikaLaskuri.Start();
517
518        aikaNaytto = new Label();
519        aikaNaytto.TextColor = Color.White;
520        aikaNaytto.TextScale *= 4;
521        aikaNaytto.DecimalPlaces = 1;
522        aikaNaytto.Y = Screen.Top - 100;
523        //aikaNaytto.BindTo(alaspainLaskuri);
524        Add(aikaNaytto);
525    }
526
527    void LaskeAlaspain()
528    {
529        int min = (int)(alaspainLaskuri.Value / 60);
530        int sek = (int)alaspainLaskuri.Value % 60;
531        aikaNaytto.Text = String.Format("{0:0}:{1:00}", min, sek); //"" + min + ":" + sek;
532
533        alaspainLaskuri.Value -= 0.1;
534
535        if (alaspainLaskuri.Value <= 0)
536        {
537            MessageDisplay.Add("Aika loppui...");
538            aikaLaskuri.Stop();
539
540            Explosion räjähdys = new Explosion(2500);
541            räjähdys.Y = Level.Bottom + 50;
542            Add(räjähdys);
543            räjähdys.AddShockwaveHandler("vihollinen", delegate (IPhysicsObject k, Vector v) {
544                //PommiOsui(k, v);
545
546                Label gameover = new Label("Victory!");
547                gameover.TextScale *= 4;
548                gameover.TextColor = pisteLaskuri.Value > pisteLaskuri2.Value? Color.Blue:Color.Red;
549                Add(gameover);
550                Pause();
551            });
552        }
553    }
554
555
556
557
558    //TÄSTÄ ALKAA PELI 2.
559    //TÄSTÄ ALKAA PELI 2.
560    //TÄSTÄ ALKAA PELI 2.
561    //TÄSTÄ ALKAA PELI 2.
562    //TÄSTÄ ALKAA PELI 2.
563    //TÄSTÄ ALKAA PELI 2.
564    //TÄSTÄ ALKAA PELI 2.
565
566
567
568
569    void aloitapeli2()
570    {
571
572    }
573
574
575}
Note: See TracBrowser for help on using the repository browser.