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

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