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

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