source: 2016/27/PaavoH/UltimateAdventure/UltimateAdventure/UltimateAdventure/UltimateAdventure.cs @ 8398

Revision 8398, 15.2 KB checked in by tesatapa, 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
9public class UltimateAdventure : PhysicsGame
10{
11    double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    IntMeter Pommit = new IntMeter(50);
15    Double Painovoima = -1000;
16    bool saapiiskata = true;
17    bool saapommittaa = true;
18    PushButton TextureButton;
19    DoubleMeter aani = new DoubleMeter(0, 0, 1);
20
21    PlatformCharacter pelaaja1;
22    IntMeter elamaLaskuri;
23
24    Image pelaajanKuva = LoadImage("norsu");
25    Image tahtiKuva = LoadImage("tahti");
26    Image Bpimage = LoadImage("stoneplatform");
27    Image silmamobimage = LoadImage("silmamob");
28    Image veripartikkeli = LoadImage("veripartikkeli");
29    Image playerhealth = LoadImage("playerhealth");
30    Image Bomb = LoadImage("bomb");
31    Image Arrow = LoadImage("Arrow");
32    Image PhysicBlockImage = LoadImage("PhysicBlockTexture");
33    Image TurretImage = LoadImage("TurretTextureV1");
34    Image Snake = LoadImage("snake");
35    Image Player = LoadImage("PlayerV2");
36
37
38    SoundEffect maaliAani = LoadSoundEffect("maali");
39    Animation Ruoskanimaatio;
40
41    double aanenvoimakkuus = 0.1;
42
43    public override void Begin()
44    {
45        Ruoskanimaatio = LoadAnimation("ruoska");
46        LuoAlkuValikko();
47
48
49    }
50
51    void LuoAlkuValikko()
52    {
53        ClearAll();
54        MultiSelectWindow alkuValikko = new MultiSelectWindow("UltimateAdventure", "Aloita peli", "Options", "Lopeta");
55
56        alkuValikko.AddItemHandler(0, AloitaPeli);
57        alkuValikko.AddItemHandler(1, MenuOptions);
58        alkuValikko.AddItemHandler(2, Exit);
59
60        Add(alkuValikko);
61    }
62    void LuoPeliValikko()
63    {
64        MultiSelectWindow Pelivalikko = new MultiSelectWindow(" ", "Jatka peliä", "Options", "Lopeta");
65
66        //Pelivalikko.AddItemHandler(0, AloitaPeli);
67        Pelivalikko.AddItemHandler(1, PeliOptions);
68        Pelivalikko.AddItemHandler(2, Exit);
69
70        Add(Pelivalikko);
71    }
72    void AloitaPeli()
73    {
74        ClearAll();
75        Gravity = new Vector(0, Painovoima);
76
77        LuoKentta();
78        LisaaNappaimet();
79        LuoElamaLaskuri();
80        Camera.Follow(pelaaja1);
81        Camera.ZoomFactor = 2.8;
82        Camera.StayInLevel = true;
83        Label PommienMaara = new Label(Pommit);
84        PommienMaara.X = Screen.Right - 150;
85        PommienMaara.Y = Screen.Top - 150;
86        Add(PommienMaara);
87    }
88
89    void MenuOptions()
90    {
91        Options();
92        TeeBackNappain();
93    }
94    void Options()
95    {
96        Mouse.IsCursorVisible = true;
97        Slider liukusaadin = LuoSlider();
98        Add(liukusaadin);
99        TeeTextureButton();
100    }
101    void PeliOptions()
102    {
103        Options();
104        TeeSuljePeliOptions();
105    }
106    void TeeTextureButton()
107    {
108        TextureButton = new PushButton("" + SmoothTextures);
109        TextureButton.Y = -100;
110        TextureButton.Clicked += PaivitaTextureButton;
111        TextureButton.Tag = "Options";
112
113        Add(TextureButton);
114    }
115    void PaivitaTextureButton()
116    {
117        SmoothTextures = !SmoothTextures;
118        TextureButton.Text = "" + SmoothTextures;
119    }
120    Slider LuoSlider()
121    {
122
123        aani.Changed += MuutaAanenvoimakuutta;
124
125        Slider liukusaadin = new Slider(200, 20);
126        liukusaadin.BindTo(aani);
127        liukusaadin.Tag = "Options";
128        liukusaadin.X = 0;
129        liukusaadin.Y = 0;
130
131        liukusaadin.Color = Color.GreenYellow;
132        liukusaadin.Knob.Image = tahtiKuva;
133        liukusaadin.Track.Color = Color.Black;
134        liukusaadin.BorderColor = Color.LightBlue;
135
136        return liukusaadin;
137
138    }
139    void TeeBackNappain()
140    {
141        PushButton BackNappain = new PushButton("Back");
142        BackNappain.Y = -300;
143        BackNappain.Clicked += LuoAlkuValikko;
144
145        Add(BackNappain);
146    }
147    void TeeSuljePeliOptions()
148    {
149        PushButton SuljePeliOptions = new PushButton("Back");
150        SuljePeliOptions.Y = -300;
151        SuljePeliOptions.Tag = "Options";
152        SuljePeliOptions.Clicked += JatkaPelia;
153
154        Add(SuljePeliOptions);
155    }
156
157    void JatkaPelia()
158    {
159        List<GameObject> Oliot = GetObjectsWithTag("Options");
160        foreach (GameObject item in Oliot)
161        {
162            item.Destroy();
163        }
164        IsMouseVisible = false;
165    }
166    void MuutaAanenvoimakuutta(double vanhaArvo, double uusiArvo)
167    {
168        aanenvoimakkuus = uusiArvo;
169        MessageDisplay.Add(aanenvoimakkuus.ToString());
170    }
171
172    void LuoKentta()
173    {
174        TileMap kentta = TileMap.FromLevelAsset("kentta1");
175        kentta.SetTileMethod('#', LisaaSolid);
176        kentta.SetTileMethod('&', LisaaBp);
177        kentta.SetTileMethod('*', LisaaHealt);
178        kentta.SetTileMethod('o', LisaaPelaaja);
179        kentta.SetTileMethod('0', LisaaSilmamob);
180        kentta.SetTileMethod('5', LisaaSnakemob);
181        kentta.SetTileMethod('>', LisaaTurret);
182        kentta.SetTileMethod('☂', PhysicBlock);
183        kentta.SetTileMethod('7', LisaaSpeedBoots);
184        kentta.SetTileMethod('O', LisaaPommipakkaus);
185        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
186        Level.CreateBorders();
187        Level.Background.CreateGradient(Color.SkyBlue, Color.SkyBlue);
188    }
189
190    void LisaaSolid(Vector paikka, double leveys, double korkeus)
191    {
192        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
193        taso.Position = paikka;
194        taso.Color = RandomGen.NextColor();
195        Add(taso);
196    }
197
198    void LisaaBp(Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        taso.Position = paikka;
202        taso.Image = Bpimage;
203        Add(taso);
204    }
205
206    void LisaaTurret(Vector paikka, double leveys, double korkeus)
207    {
208        PhysicsObject Turret = PhysicsObject.CreateStaticObject(leveys, korkeus);
209        Turret.Position = paikka;
210        Turret.Image = TurretImage;
211        Add(Turret);
212
213
214        Timer ajastin = new Timer();
215        ajastin.Interval = 0.1;
216        ajastin.Timeout += delegate
217        {
218            if (pelaaja1.X > Turret.X && Math.Abs(pelaaja1.Y - Turret.Y) < 20)
219            {
220                PhysicsObject nuoli = new PhysicsObject(30, 5);
221                nuoli.Position = Turret.Position;
222                nuoli.Velocity = new Vector(1700, 0);
223                Add(nuoli);
224                nuoli.Image = Arrow;
225                nuoli.Tag = "nuoli";
226                //AddCollisionHandler(nuoli, CollisionHandler.DestroyObject);
227                ajastin.Stop();
228            }
229        };
230        ajastin.Start();
231    }
232
233    void PhysicBlock(Vector paikka, double leveys, double korkeus)
234    {
235        PhysicsObject PhysicBlock = new PhysicsObject(leveys, korkeus);
236        PhysicBlock.Position = paikka;
237        PhysicBlock.Image = PhysicBlockImage;
238        PhysicBlock.Mass = 200.0;
239        Add(PhysicBlock);
240    }
241
242
243
244
245    void LisaaHealt(Vector paikka, double leveys, double korkeus)
246    {
247        PhysicsObject healt = PhysicsObject.CreateStaticObject(leveys, korkeus);
248        healt.IgnoresCollisionResponse = true;
249        healt.Position = paikka;
250        healt.Image = tahtiKuva;
251        healt.Tag = "healt";
252        Add(healt);
253    }
254    void LisaaPommipakkaus(Vector paikka, double leveys, double korkeus)
255    {
256        PhysicsObject Pommipakkaus = PhysicsObject.CreateStaticObject(leveys, korkeus);
257        Pommipakkaus.IgnoresCollisionResponse = true;
258        Pommipakkaus.Position = paikka;
259        //Pommipakkaus.Image = tahtiKuva;
260        Pommipakkaus.Tag = "Pommipakkaus";
261        Add(Pommipakkaus);
262    }
263    void LisaaSpeedBoots(Vector paikka, double leveys, double korkeus)
264    {
265        PhysicsObject SpeedBoots = PhysicsObject.CreateStaticObject(leveys, korkeus);
266        SpeedBoots.IgnoresCollisionResponse = true;
267        SpeedBoots.Position = paikka;
268        SpeedBoots.Tag = "SpeedBoots";
269        Add(SpeedBoots);
270    }
271    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
272    {
273        pelaaja1 = new PlatformCharacter(leveys, korkeus);
274        pelaaja1.Position = paikka;
275        pelaaja1.Mass = 4.0;
276        pelaaja1.Image = Player;
277        pelaaja1.Tag = "pelaaja";
278        pelaaja1.Mass = 100.0;
279        AddCollisionHandler(pelaaja1, "healt", TormaaHealtiin);
280        AddCollisionHandler(pelaaja1, "silmamob", TormaaSilmaMobiin);
281        AddCollisionHandler(pelaaja1, "snake", TormaaSnakeen);
282        AddCollisionHandler(pelaaja1, "nuoli", TormaaNuoleen);
283        AddCollisionHandler(pelaaja1, "SpeedBoots", TormaaSpeedBootsiin);
284        AddCollisionHandler(pelaaja1, "Pommipakkaus", TormaaPommipakkaukseen);
285        Add(pelaaja1);
286    }
287
288
289    void LisaaMob(Vector paikka, double leveys, double korkeus, double massa, string tag, Brain aivo, Image kuva)
290    {
291        PlatformCharacter Mob = new PlatformCharacter(leveys, korkeus);
292        Mob.Position = paikka;
293        Mob.Mass = massa;
294        Mob.Image = kuva;
295        Add(Mob);
296        Mob.Tag = tag;
297        Mob.Brain = aivo;
298    }
299
300    void LisaaSilmamob(Vector paikka, double leveys, double korkeus)
301    {
302        PlatformWandererBrain aivot = new PlatformWandererBrain();
303        aivot.Speed = 100;
304
305        LisaaMob(paikka, leveys, korkeus, 2.0, "silmamob", aivot, silmamobimage);
306    }
307
308    void LisaaSnakemob(Vector paikka, double leveys, double korkeus)
309    {
310        PlatformWandererBrain aivot = new PlatformWandererBrain();
311        aivot.Speed = 100;
312
313        LisaaMob(paikka, leveys, korkeus, 3.0, "snake", aivot, Snake);
314    }
315
316    void LisaaNappaimet()
317    {
318        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
319        Keyboard.Listen(Key.Escape, ButtonState.Pressed, LuoPeliValikko, "Lopeta peli");
320
321        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
322        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
323        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
324
325        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Lyo, "Pelaaja Lyö", pelaaja1);
326        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, HeitaPommi, "Pelaaja heittää pommin", pelaaja1);
327
328        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
329
330        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
331        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
332        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, HeitaPommi, "Pelaaja heittää pommin", pelaaja1);
333        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, Lyo, "Pelaaja Lyö", pelaaja1);
334    }
335
336    void LiikutaPelaajaa(AnalogState tatinTila)
337    {
338        Vector tatinAsento = tatinTila.StateVector;
339        pelaaja1.Walk(tatinAsento.X * nopeus);
340    }
341    void Lyo(PlatformCharacter hahmo)
342    {
343        if (saapiiskata == false)
344            return;
345
346        saapiiskata = false;
347
348        PhysicsObject temp = new PhysicsObject(50, 20);
349        //temp.IsVisible = false;
350        temp.IgnoresGravity = true;
351        temp.IgnoresCollisionResponse = true;
352        temp.Destroyed += delegate { saapiiskata = true; };
353        Add(temp);
354        temp.Animation = new Animation(Ruoskanimaatio);
355        temp.Animation.Start();
356
357        AddCollisionHandler(temp, "silmamob", CollisionHandler.DestroyTarget);
358        AddCollisionHandler(temp, "snake", CollisionHandler.DestroyTarget);
359
360        Timer.SingleShot(1, temp.Destroy);
361
362        Timer ajastin = new Timer();
363        ajastin.Interval = 0.01;
364        ajastin.Timeout += delegate
365        {
366            if (hahmo.FacingDirection == Direction.Left)
367            {
368                temp.TextureWrapSize = new Vector(-1, 1);
369                temp.Position = new Vector((hahmo.Position.X - (hahmo.Width / 2) - (temp.Width * .35)), hahmo.Position.Y);
370            }
371            else
372            {
373                temp.TextureWrapSize = new Vector(1, 1);
374                temp.Position = new Vector((hahmo.Position.X + (hahmo.Width / 2) + (temp.Width * .35)), hahmo.Position.Y);
375            }
376        };
377        ajastin.Start();
378    }
379    void HeitaPommi(PlatformCharacter hahmo)
380    {
381        if (saapommittaa == false || Pommit.Value <= 0)
382            return;
383        Pommit.Value--;
384
385        saapommittaa = false;
386
387        Grenade Pommi = new Grenade(10.0);
388        //  Pommi.Destroyed += delegate { Pommit.AddValue(-1); };
389        hahmo.Throw(Pommi, Angle.FromDegrees(30), 10000);
390        Pommi.Image = Bomb;
391
392        Timer.SingleShot(.2, delegate { saapommittaa = true; });
393    }
394
395    void Liikuta(PlatformCharacter hahmo, double suunta)
396    {
397        hahmo.Walk(nopeus * suunta);
398    }
399
400    void Hyppaa(PlatformCharacter hahmo, double nopeus)
401    {
402        hahmo.Jump(nopeus);
403    }
404
405    void TormaaHealtiin(PhysicsObject hahmo, PhysicsObject healt)
406    {
407        maaliAani.Play(aanenvoimakkuus, 0.0, 0.0);
408        healt.Destroy();
409        elamaLaskuri.Value += 5;
410    }
411
412    void LuoElamaLaskuri()
413    {
414        elamaLaskuri = new IntMeter(10);
415        elamaLaskuri.MaxValue = 99;
416        elamaLaskuri.LowerLimit += ElamaLoppui;
417
418        Label ElamaKuva = new Label(playerhealth);
419        ElamaKuva.Size = new Vector(80, 80);
420        Add(ElamaKuva);
421
422        Label pisteNaytto = new Label();
423        pisteNaytto.X = Screen.Left + 100;
424        pisteNaytto.Y = Screen.Top - 100;
425        pisteNaytto.TextColor = Color.Black;
426        pisteNaytto.Color = Color.Red;
427        pisteNaytto.BindTo(elamaLaskuri);
428        Add(pisteNaytto);
429
430        ElamaKuva.X = pisteNaytto.X;
431        ElamaKuva.Y = pisteNaytto.Y;
432
433
434
435    }
436
437    void ElamaLoppui()
438    {
439        pelaaja1.Destroy();
440        ExplosionSystem rajahdys = new ExplosionSystem(veripartikkeli, 100);
441        Add(rajahdys);
442        rajahdys.MaxScale = 1.0;
443        rajahdys.MaxVelocity = 20.0;
444        rajahdys.MinLifetime = 2.0;
445        int pMaara = 50;
446        Timer.SingleShot(3.0, ConfirmExit);
447
448
449
450        rajahdys.AddEffect(pelaaja1.X, pelaaja1.Y, pMaara);
451        //rajahdys.X = pelaaja1.X;
452        //rajahdys.Y = pelaaja1.Y;
453    }
454    void TormaaSilmaMobiin(PhysicsObject hahmo, PhysicsObject silmamob)
455    {
456        elamaLaskuri.Value -= 1;
457    }
458
459    void TormaaSnakeen(PhysicsObject hahmo, PhysicsObject silmamob)
460    {
461        elamaLaskuri.Value -= 1;
462    }
463
464    void TormaaNuoleen(PhysicsObject hahmo, PhysicsObject nuoli)
465    {
466        elamaLaskuri.Value -= 2;
467
468    }
469
470    void TormaaSpeedBootsiin(PhysicsObject hahmo, PhysicsObject SpeedBoots)
471    {
472        nopeus *= 2;
473        SpeedBoots.Destroy();
474        Timer.SingleShot(5.0, delegate { nopeus /= 2; });
475
476    }
477
478    void TormaaPommipakkaukseen(PhysicsObject hahmo, PhysicsObject Pommipakkaus)
479    {
480        Pommit.Value += 5;
481        Pommipakkaus.Destroy();
482    }
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534}
Note: See TracBrowser for help on using the repository browser.