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

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