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

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