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

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