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

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