source: 2017/31/TaavettiV/Trumpsimulator/Trumpsimulator/Trumpsimulator/Trumpsimulator.cs @ 9344

Revision 9344, 17.3 KB checked in by nupeohje, 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
9class Pelihahmo : PlatformCharacter
10{
11    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Pelihahmo(double leveys, double korkeus)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }
19
20}
21
22class Asevihu : PlatformCharacter
23{
24    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
25    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
26    public Timer Ajastin;
27    public Asevihu(double leveys, double korkeus)
28        : base(leveys, korkeus)
29    {
30        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
31    }
32
33    public bool AloitaAjastin()
34    {
35        return true;
36    }
37
38
39
40
41
42
43
44
45}
46class Talo : PlatformCharacter
47{
48    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
49    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
50
51    public Talo(double leveys, double korkeus)
52        : base(leveys, korkeus)
53    {
54        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
55    }
56
57}
58
59
60public class Trumpsimulator : PhysicsGame
61{
62    const double nopeus = 300;
63    const double hyppyNopeus = 750;
64    const int RUUDUN_KOKO = 40;
65    const double flynopeus = 3000;
66    IntMeter pommilaskuri = new IntMeter(3, 0, 3);
67
68    Image meksikolainen = LoadImage("meksikolainen");
69    Pelihahmo pelaaja1;
70
71    DoubleMeter jetpacklaskuri;
72
73    int kenttaNumero = 1;
74    Image bombiKuva = LoadImage("Bombi");
75    Image pelaajanKuva = LoadImage("trumphahmo");
76    Image tahtiKuva = LoadImage("one dollar");
77    Image wifekuva = LoadImage("untitled");
78
79    SoundEffect maaliAani = LoadSoundEffect("maali");
80    Image olio6Kuva = LoadImage("tumbleweed");
81    public override void Begin()
82    {
83        Gravity = new Vector(0, -1000);
84
85        jetpacklaskuri = new DoubleMeter(0, 0, 100);
86
87        LuoKentta();
88        LisaaNappaimet();
89
90        Camera.Follow(pelaaja1);
91        Camera.ZoomFactor = 1.2;
92        Camera.StayInLevel = true;
93    }
94    void Rajayta(PhysicsObject tormaaja, PhysicsObject Kohde)
95    {
96        int pMaxMaara = 3;
97        // Alustetaan räjähdysjärjestelmä
98        // Parametrit:
99        // * kuva: mitä tekstuuria räjähdyksen
100        //   hiukkasten halutaan käyttävän
101        // * pMaxMaara: räjähdyksen käyttämien
102        //   hiukkasten eli partikkeleiden maksimimäärä
103        ExplosionSystem rajahdys =
104        new ExplosionSystem(LoadImage("tomasräjähdys"), pMaxMaara);
105        rajahdys.MaxScale = 100;
106
107
108        // Lisätään järjestelmä peliin
109        Add(rajahdys);
110
111        int pMaara = 50;
112        // "Käynnistetään" räjähdys
113        rajahdys.AddEffect(tormaaja.X, Kohde.Y, pMaara);
114        tormaaja.Destroy();
115    }
116    void tomas(Vector paikka, double leveys, double korkeus)
117    {
118        PlatformCharacter y = new PlatformCharacter(leveys * 0.8, korkeus * 1.0);
119        y.Position = paikka;
120
121
122
123
124        Add(y);
125        y.Tag = "y";
126        y.Image = LoadImage("tumbleweed");
127        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
128        tasoAivot.Speed = 200;
129
130        tasoAivot.FallsOffPlatforms = true;
131        tasoAivot.TriesToJump = true;
132
133        y.Brain = tasoAivot;
134
135    }
136
137    void bombi(Vector paikka, double leveys, double korkeus)
138    {
139        PlatformCharacter p = new PlatformCharacter(leveys * 2.0, korkeus * 2.0);
140        p.Position = paikka;
141        p.Image = bombiKuva;
142        Add(p);
143        p.Tag = "p";
144
145
146
147        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
148        tasoAivot.Speed = 100;
149
150        tasoAivot.FallsOffPlatforms = true;
151        tasoAivot.TriesToJump = true;
152
153        p.Brain = tasoAivot;
154
155    }
156    void paasiMaalin(PhysicsObject pelaaja, PhysicsObject maali)
157    {
158        kenttaNumero++;
159
160        ClearAll();
161        Begin();
162
163
164    }
165    void lisaaMaali(Vector paikka, double leveys, double korkeus)
166    {
167        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
168        maali.Tag = "maali";
169        maali.Position = paikka;
170        Add(maali);
171    }
172
173    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
174    {
175        ammus.Destroy();
176        if (kohde.Tag.Equals("A"))
177        {
178            (kohde as Asevihu).ElamaLaskuri.Value--;
179        }
180
181        if (kohde is Talo)
182        {
183            (kohde as Talo).ElamaLaskuri.Value--;
184        }
185    }
186
187    void AmmuAseella(PlatformCharacter ampuja)
188    {
189        if (pelaaja1.IsDestroyed) return;
190
191        PhysicsObject ammus = ampuja.Weapon.Shoot();
192
193        if (ammus != null)
194        {
195            //ammus.Size *= 0.10;
196            ammus.Width = 20;
197            ammus.Height = 1;
198            //ammus.Image = ...
199            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
200        }
201
202    }
203
204    void VihuAmmuAseella(PlatformCharacter ampuja)
205    {
206        if (ampuja.IsDestroyed) return;
207
208        PhysicsObject ammus = ampuja.Weapon.Shoot();
209
210        if (ammus != null)
211        {
212            //ammus.Size *= 0.10;
213            ammus.Width = 20;
214            ammus.Height = 1;
215            //ammus.Image = ...
216            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
217            AddCollisionHandler(ammus, "talo", Tormaataloon);
218        }
219
220    }
221
222    void Tormaataloon(PhysicsObject tormaa, PhysicsObject kohde)
223    {
224        (kohde as Talo).ElamaLaskuri.AddValue(-1);
225    }
226    void LuoKentta()
227    {
228
229        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaNumero);
230        kentta.SetTileMethod('#', LisaaTaso);
231        kentta.SetTileMethod('*', Lisaadollar);
232        kentta.SetTileMethod('N', LisaaPelaaja);
233        kentta.SetTileMethod('K', lisaaMaali);
234        kentta.SetTileMethod('y', tomas);
235        kentta.SetTileMethod('A', Lisaaasevihu);
236        kentta.SetTileMethod('Q', wife);
237        kentta.SetTileMethod('H', Lisaahiekka);
238        kentta.SetTileMethod('R', LisaaRuoho);
239        kentta.SetTileMethod('Z', LisaaTalo);
240        kentta.SetTileMethod('M', LisaaMuuri);
241        kentta.SetTileMethod('G', LisaaTacoVihu);
242        kentta.SetTileMethod('p', bombi);
243        kentta.SetTileMethod('C', Lisaacaktus);
244        kentta.SetTileMethod('J', lisaajetpack);
245        kentta.Optimize('H');
246        kentta.Optimize('R');
247        kentta.Optimize('#');
248
249        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
250
251
252        Level.CreateBorders();
253        Level.Background.CreateGradient(Color.White, Color.SeaGreen);
254        Level.Background.Image = LoadImage("taustakuvanewyork");
255    }
256
257    void lisaajetpack(Vector paikka, double leveys, double korkeus)
258    {
259        PhysicsObject jetpack = PhysicsObject.CreateStaticObject(leveys, korkeus);
260        jetpack.Position = paikka;
261        jetpack.Image = LoadImage("jetpack picture");
262        jetpack.IgnoresCollisionResponse = true;
263        jetpack.Tag = "jetpack";
264       
265        Add(jetpack);
266
267    }
268
269    void HeitaKranaatti(PlatformCharacter pelaaja)
270    {
271        if (pelaaja.IsDestroyed) return;
272
273        Grenade kranu = new Grenade(3.0);
274        pelaaja1.Throw(kranu, Angle.FromDegrees(50), 10000);
275
276        kranu.Explosion.AddShockwaveHandler("A", KranaattiOsui);
277
278        kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
279    }
280    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
281    {
282        rajahdyksenKohde.Destroy();
283    }
284    void ydinpommi(IPhysicsObject rajahdyksenKohde, Vector v)
285    {
286        rajahdyksenKohde.Destroy();
287 
288    }
289    void Heitaydinpommi(PlatformCharacter pelaaja)
290    {
291        if (pelaaja.IsDestroyed) return;
292        if (pommilaskuri.Value > 0)
293        {
294            pommilaskuri.Value -= 1;
295
296            Grenade kranu = new Grenade(180.0);
297            kranu.ExplosionRadius = 4000;
298            kranu.Image = LoadImage("Ydinbomb");
299            pelaaja1.Throw(kranu, Angle.FromDegrees(50), 1000);
300
301            kranu.Explosion.AddShockwaveHandler("A", KranaattiOsui);
302
303            kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
304        }
305       
306    }
307    void LisaaTaso(Vector paikka, double leveys, double korkeus)
308    {
309        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
310        taso.Position = paikka;
311        taso.Color = Color.Green;
312        Add(taso);
313        taso.TextureWrapSize = new Vector(leveys / RUUDUN_KOKO, korkeus / RUUDUN_KOKO);
314    }
315
316    void LisaaMuuri(Vector paikka, double leveys, double korkeus)
317    {
318        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
319        taso.Position = paikka;
320        taso.Color = Color.Green;
321        Add(taso);
322
323        taso.Image = LoadImage("muuri");
324    }
325
326    void Lisaahiekka(Vector paikka, double leveys, double korkeus)
327    {
328        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
329        taso.Position = paikka;
330
331        Add(taso);
332        taso.Color = Color.Green;
333        taso.Image = LoadImage("hiekka");
334        taso.TextureWrapSize = new Vector(leveys / RUUDUN_KOKO, korkeus / RUUDUN_KOKO);
335        Add(taso);
336    }
337
338    void LisaaTalo(Vector paikka, double leveys, double korkeus)
339    {
340        Talo taso = new Talo(leveys, korkeus);
341        taso.Position = paikka;
342        taso.Color = Color.Green;
343        taso.Tag = "talo";
344        Add(taso);
345        taso.MakeStatic();
346
347        taso.Image = LoadImage("talo");
348
349    }
350
351
352    void LisaaRuoho(Vector paikka, double leveys, double korkeus)
353    {
354        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
355        taso.Position = paikka;
356
357        Add(taso);
358        taso.Color = Color.Green;
359        taso.Image = LoadImage("ruoho");
360        taso.TextureWrapSize = new Vector(leveys / RUUDUN_KOKO, korkeus / RUUDUN_KOKO);
361    }
362
363
364    void Lisaacaktus(Vector paikka, double leveys, double korkeus)
365    {
366        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*2, korkeus*3);
367        taso.Position = paikka;
368        taso.Bottom = paikka.Y - RUUDUN_KOKO / 2;
369
370        Add(taso);
371        taso.Color = Color.Green;
372        taso.Image = LoadImage("caktus");
373    }
374
375
376
377
378    void Lisaadollar(Vector paikka, double leveys, double korkeus)
379    {
380        PhysicsObject dollar = PhysicsObject.CreateStaticObject(leveys, korkeus);
381        dollar.IgnoresCollisionResponse = true;
382        dollar.Position = paikka;
383        dollar.Image = tahtiKuva;
384        dollar.Tag = "dollar";
385        Add(dollar);
386    }
387
388    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
389    {
390        pelaaja1 = new Pelihahmo(leveys, korkeus * 2.0);
391        pelaaja1.Position = paikka;
392        pelaaja1.Mass = 2.0;
393        pelaaja1.Image = pelaajanKuva;
394        pelaaja1.Tag = "pelaaja";
395        AddCollisionHandler(pelaaja1, "dollar", Tormaadollar);
396        AddCollisionHandler(pelaaja1, "jetpack", Tormaajetpack);
397        Add(pelaaja1);
398        AddCollisionHandler(pelaaja1, "p", CollisionHandler.ExplodeBoth(5110, true));
399        AddCollisionHandler(pelaaja1, "maali", paasiMaalin);
400        AddCollisionHandler(pelaaja1, "y", CollisionHandler.ExplodeBoth(9999999, true));
401   
402        pelaaja1.Weapon = new AssaultRifle(30, 10);
403        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
404        pelaaja1.Weapon.InfiniteAmmo = false;
405        pelaaja1.Weapon.Ammo.Value = 1000;
406        pelaaja1.Weapon.Power.DefaultValue = 400;
407        pelaaja1.Weapon.AmmoIgnoresGravity = true;
408        pelaaja1.Weapon.AmmoIgnoresExplosions = true;
409        pelaaja1.Weapon.CanHitOwner = false;
410        pelaaja1.Weapon.Image = LoadImage("machine gun");
411        pelaaja1.Weapon.Y = 5;
412        pelaaja1.Weapon.FireRate = 200;
413
414        ProgressBar jetpackpalkki = new ProgressBar(150, 20);
415        jetpackpalkki.X = Screen.Right - 150;
416        jetpackpalkki.Y = Screen.Top - 20;
417        jetpackpalkki.BindTo(jetpacklaskuri);
418        jetpackpalkki.BarColor = Color.SkyBlue;
419        Add(jetpackpalkki);
420
421        ProgressBar elamaPalkki = new ProgressBar(150, 20);
422        elamaPalkki.X = Screen.Left + 150;
423        elamaPalkki.Y = Screen.Top - 20;
424        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
425        Add(elamaPalkki); 
426    }
427
428    void LisaaNappaimet()
429    {
430        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
431        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
432        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Lopeta peli", pelaaja1);
433
434        Keyboard.Listen(Key.E, ButtonState.Pressed, HeitaKranaatti, "heitä kranaatti", pelaaja1);
435        Keyboard.Listen(Key.Q, ButtonState.Pressed, Heitaydinpommi, "heitä ydinpommi", pelaaja1);
436        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
437        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
438        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
439        Keyboard.Listen(Key.Space, ButtonState.Down, fly, "pelaaja lentää", pelaaja1, flynopeus);
440        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
441        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
442
443        //ControllerOne.Listen(Button.A, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
444        //ControllerOne.Listen(Button.D, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
445        //ControllerOne.Listen(Button.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
446
447        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
448    }
449
450    void Liikuta(PlatformCharacter hahmo, double nopeus)
451    {
452        hahmo.Walk(nopeus);
453    }
454
455    void Hyppaa(PlatformCharacter hahmo, double nopeus)
456    {
457        hahmo.Jump(nopeus);
458    }
459    void VihuAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
460    {
461        ammus.Destroy();
462        if (kohde.Tag.ToString() == "pelaaja")
463        {
464            (kohde as Pelihahmo).ElamaLaskuri.Value--;
465        }
466    }
467    void asevihuOsui(PhysicsObject ammus, PhysicsObject kohde)
468    {
469        ammus.Destroy();
470        if (kohde.Tag == "pelaaja1")
471        {
472            kohde.Destroy();
473        }
474    }
475    void Lisaaasevihu(Vector paikka, double leveys, double korkeus)
476    {
477        Asevihu asevihu = new Asevihu(leveys * 2.0, korkeus * 2.0);
478        asevihu.Position = paikka;
479        asevihu.Image = meksikolainen;
480        Add(asevihu);
481        asevihu.Tag = "A";
482
483        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
484        tasoAivot.Speed = 100;
485
486        tasoAivot.FallsOffPlatforms = true;
487        tasoAivot.TriesToJump = true;
488
489        asevihu.Brain = tasoAivot;
490
491        asevihu.Weapon = new AssaultRifle(30, 10);
492        asevihu.Weapon.ProjectileCollision = VihuAmmusOsui;
493
494        Timer aikaLaskuri = new Timer();
495        aikaLaskuri.Interval = 0.06;
496        aikaLaskuri.Timeout += () => VihuAmmuAseella(asevihu);
497        aikaLaskuri.Start();
498    }
499
500    void LisaaTacoVihu(Vector paikka, double leveys, double korkeus)
501    {
502        Asevihu tacovihu = new Asevihu(leveys * 2.0, korkeus * 2.0);
503        tacovihu.Position = paikka;
504        tacovihu.Image = LoadImage("mexivotacoduude");
505        Add(tacovihu);
506        tacovihu.Tag = "A";
507
508        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
509        tasoAivot.Speed = 100;
510
511        tasoAivot.FallsOffPlatforms = true;
512        tasoAivot.TriesToJump = true;
513
514        tacovihu.Brain = tasoAivot;
515
516        //tacovihu.Weapon = new AssaultRifle(30, 10);
517        //tacovihu.Weapon.ProjectileCollision = VihuAmmusOsui;
518
519        Timer aikaLaskuri = new Timer();
520        aikaLaskuri.Interval = 5.2;
521        aikaLaskuri.Timeout += delegate
522        {
523            Grenade kranu = new Grenade(7.2);
524            kranu.Image = LoadImage("tacobom");
525            tacovihu.Throw(kranu, Angle.FromDegrees(300), 1000);
526
527        };
528        aikaLaskuri.Start();
529
530        tacovihu.Destroyed += aikaLaskuri.Stop;
531    }
532
533    void Tormaadollar(PhysicsObject hahmo, PhysicsObject dollar)
534    {
535        maaliAani.Play();
536        MessageDisplay.Add("Keräsit dollarin!");
537        dollar.Destroy();
538    }
539
540    void Tormaajetpack(PhysicsObject hahmo, PhysicsObject jetpack)
541    {
542        maaliAani.Play();
543        MessageDisplay.Add("Keräsit jetpack!");
544        jetpack.Destroy();
545
546        jetpacklaskuri.Value = 100;
547    }
548    void fly(PlatformCharacter hahmo, double nopeus)
549    {
550        if (jetpacklaskuri.Value > 0)
551        {
552            hahmo.Push(new Vector(0, nopeus));
553            jetpacklaskuri.Value -= 0.1;
554        }
555
556    }
557    void wife(Vector paikka, double leveys, double korkeus)
558    {
559        PlatformCharacter p = new PlatformCharacter(leveys * 0.7, korkeus * 2.0);
560        p.Position = paikka;
561        p.Image = wifekuva;
562        Add(p);
563        p.Tag = "Q";
564
565
566
567        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
568        tasoAivot.Speed = 100;
569
570        tasoAivot.FallsOffPlatforms = true;
571        tasoAivot.TriesToJump = true;
572
573        p.Brain = tasoAivot;
574
575    }
576
577
578
579
580
581
582
583
584}
Note: See TracBrowser for help on using the repository browser.