source: 2017/31/PatrikK/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/BEST_GAME_EVER.cs @ 9316

Revision 9316, 17.8 KB checked in by npo17_73, 4 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 Tasohyppelypeli : PhysicsGame
10{
11    double nopeus = 700;
12    double hyppyNopeus = 900;
13    int RUUDUN_KOKO = 40;
14    EasyHighScore topLista = new EasyHighScore();
15    Hahmo pelaaja1;
16    IntMeter pisteLaskuri;
17    IntMeter tahtilaskuri= new IntMeter(0);
18    IntMeter tappolaskuri;
19    //DoubleMeter elamalaskuri;
20    Image pelaajanKuva = LoadImage("norsu");
21    Image tahtiKuva = LoadImage("tahti");
22    DoubleMeter ÄänenVoimakkuus = new DoubleMeter(0, 0, 1);
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24    bool saaHeittaaKranaatin = true;
25    double kranaattiaika = 1.5;
26    List<Timer> ajastinlista = new List<Timer>();
27    int kenttaJossaOllaanNyt = 1;
28    bool huijattu = false;
29
30
31    public override void Begin()
32    {
33        ClearAll();
34        AlkuValikko();
35
36        MediaPlayer.Play("background_music");
37        MediaPlayer.IsRepeating = true;
38    }
39    void AloitaPeli()
40    { 
41        ClearAll();
42        Gravity = new Vector(0, -1000);
43        IsMouseVisible = true;
44        LuoKentta();
45        LisaaNappaimet();
46        LuoPistelaskuri();
47        LuoTahtilaskuri();
48        LuoTappoLaskuri();
49        LuoElamaLaskuri();
50        Camera.Follow(pelaaja1);
51        Camera.ZoomFactor = 2.0;
52        Camera.StayInLevel = true;
53        huijattu = false;
54       
55    }
56
57    void LuoKentta()
58    {
59        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaJossaOllaanNyt);
60               
61        kentta.SetTileMethod('#', LisaaTaso);
62        kentta.SetTileMethod('*', LisaaTahti);
63        kentta.SetTileMethod('N', LisaaPelaaja);
64        kentta.SetTileMethod('I', VihuSpawn);
65        kentta.SetTileMethod('P', TelePort);
66        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
67        Level.CreateBorders();
68        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
69        Level.Background.Image = LoadImage("background");
70        //Level.Background.TextureWrapSize = new Vector(2.0, 1.0);
71        Level.Background.FitToLevel();
72        PushButton tauko = new PushButton(LoadImage("TAUKO"));
73        Add(tauko);
74        tauko.Size = new Vector(90, 90);
75        tauko.Left = Screen.Left;
76        tauko.Clicked += TaukoValikko;
77       
78    }
79
80    void LisaaTaso(Vector paikka, double leveys, double korkeus)
81    {
82        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
83        taso.Position = paikka;
84        taso.Image = LoadImage("ruoho");
85        Add(taso);
86        //taso.MakeOneWay();
87       
88    }
89
90    void LisaaTahti(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        tahti.IgnoresCollisionResponse = true;
94        tahti.Position = paikka;
95        tahti.Image = tahtiKuva;
96        tahti.Tag = "tahti";
97        Add(tahti);
98    }
99
100    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
101    {
102        pelaaja1 = new Hahmo(leveys, korkeus);
103        pelaaja1.Position = paikka;
104        pelaaja1.Mass = 400000.0;
105        pelaaja1.Image = pelaajanKuva;
106        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
107        AddCollisionHandler(pelaaja1, "tele", TormaaTeleport);
108        Add(pelaaja1);
109        //pelaaja1 on PlatformCharacter-tyyppinen
110        pelaaja1.Weapon = new LaserGun(30, 10);
111        pelaaja1.Weapon.FireRate = 100;
112        pelaaja1.Destroyed += GameOver;
113        //Ammusten määrä aluksi:
114        //pelaaja1.Weapon.Ammo.Value = 99999999;
115
116        //Mitä tapahtuu kun ammus osuu johonkin?
117        pelaaja1.Weapon.ProjectileCollision = PelaajanAmmusOsui;
118        pelaaja1.Tag = "pelaaja1";
119
120        Timer ammuajastinhajalle = new Timer();
121        ammuajastinhajalle.Interval = 3;
122        ammuajastinhajalle.Timeout += delegate { pelaaja1.ElamaLaskuri.Value += 1; };
123        ammuajastinhajalle.Start();
124
125    }
126
127    void LisaaNappaimet()
128    {
129        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
130        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
131
132        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
133        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
134        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
135        Keyboard.Listen(Key.Space, ButtonState.Released, LentoLopuu, "Lopeta lento", pelaaja1);
136        Keyboard.Listen(Key.G, ButtonState.Pressed, HeitaKranaatti, ("Heitä kranaatti"), pelaaja1);
137        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Konsoli, "Käytä huijauskoodeja - et pääse top 10:n");
138        Keyboard.Listen(Key.Space, ButtonState.Down, Lento, "Lennä");
139        Keyboard.Listen(Key.Space, ButtonState.Released, EiLento, "Lopeta lento");
140        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
141        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
142
143        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -1.0);
144        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, 1.0);
145        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
146
147        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
148    }
149
150    void Liikuta(PlatformCharacter hahmo, double suunta)
151    {
152        hahmo.Walk(nopeus * suunta);
153    }
154
155    void Hyppaa(PlatformCharacter hahmo, double nopeus)
156    {
157        hahmo.Jump(nopeus);
158    }
159    void Lento()
160    {
161        pelaaja1.IgnoresGravity = true;
162    }
163    void EiLento()
164    {
165        pelaaja1.IgnoresGravity = false;
166    }
167   
168
169    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
170    {
171        MessageDisplay.Add("Keräsit tähden!");
172        MessageDisplay.MaxMessageCount = 2;
173        tahti.Destroy();
174        tahtilaskuri.AddValue(1);
175       
176       
177    }
178    void Lenna(PlatformCharacter hahmo, double nopeus)
179    {
180        hahmo.Push(new Vector(0, nopeus));
181        hahmo.IgnoresCollisionResponse = false;
182       
183    }
184    void LentoLopuu(PlatformCharacter hahmo)
185    {
186        hahmo.IgnoresCollisionResponse = false;
187    }
188    void NoClip(PlatformCharacter hahmo)
189    {
190        hahmo.IgnoresCollisionResponse = true;
191    }
192    void NoClipOff(PlatformCharacter hahmo)
193    {
194        hahmo.IgnoresCollisionResponse = false;
195    }
196    void VihunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
197    {
198       
199        if(kohde.Tag=="pelaaja1")
200        {
201            (kohde as Hahmo).ElamaLaskuri.Value -= 1;
202            (kohde as Hahmo).ElamaLaskuri.MaxValue += 1;
203        }
204    }
205    void PelaajanAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
206    {
207
208        if (kohde.Tag == "VIHOLLINEN")
209        {
210            (kohde as Hahmo).ElamaLaskuri.Value -= 0.5;
211        }
212    }
213    void AmmuAseella(PlatformCharacter pelaaja)
214    {
215        PhysicsObject ammus = pelaaja.Weapon.Shoot();
216
217        if (ammus != null)
218        {
219            ammus.Size *= 3.5;
220            //ammus.Image = LoadImage("ammus");
221            ammus.MaximumLifetime = TimeSpan.FromSeconds(5.0);
222            ammus.IgnoresCollisionResponse = true;
223            pelaaja.Weapon.AttackSound.Stop();
224        }
225    }
226    void LisaaVihu(Vector paikka, double leveys, double korkeus)
227    {
228        Hahmo vihu = new Hahmo(leveys, korkeus);
229        vihu.Position = paikka;
230        vihu.Mass = 4.0;
231        vihu.Image = LoadImage("zombi");
232        vihu.Tag = "VIHOLLINEN";
233        Add(vihu);
234        vihu.CollisionIgnoreGroup = 3;
235        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
236        tasoAivot.Speed = 300;
237        tasoAivot.FallsOffPlatforms = true;
238        tasoAivot.JumpSpeed = 700;
239        tasoAivot.TriesToJump = true;
240        vihu.Brain = tasoAivot;
241        //pelaaja1 on PlatformCharacter-tyyppinen
242        vihu.Weapon = new AssaultRifle(30, 10);
243        vihu.Weapon.FireRate = 2;
244       
245        //Ammusten määrä aluksi:
246        vihu.Weapon.Ammo.Value = 99999999;
247        vihu.Weapon.MaxAmmoLifetime = TimeSpan.FromSeconds(2.0);
248        //Mitä tapahtuu kun ammus osuu johonkin?
249        vihu.Weapon.ProjectileCollision = VihunAmmusOsui;
250       
251        Timer ammuajastinhajalle = new Timer();
252        ammuajastinhajalle.Interval = 2;
253        ammuajastinhajalle.Timeout += delegate { VihuAmmuAseella(vihu); };
254        ammuajastinhajalle.Start();
255
256        vihu.Destroyed += delegate { tappolaskuri.Value += 1; ammuajastinhajalle.Stop(); };
257       
258    }
259    void VihuSpawn(Vector paikka, double leveys, double korkeus)
260    {
261        Timer spawntimer = new Timer();
262        spawntimer.Interval = 3.0;
263        if (kenttaJossaOllaanNyt == 2)
264            spawntimer.Interval = 7.0;
265        spawntimer.Timeout += delegate { LisaaVihu(paikka, leveys, korkeus); };
266        spawntimer.Start();
267        ajastinlista.Add(spawntimer);
268    }
269    void HeitaKranaatti(PlatformCharacter pelaaja)
270    {
271       
272       
273        if (saaHeittaaKranaatin)
274        {
275            Grenade kranu = new Grenade(2.0);
276            pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
277            kranu.Explosion.AddShockwaveHandler("VIHOLLINEN", KranaattiOsui);
278            kranu.Size *= 5.0;
279            kranu.Explosion.Speed = 350;
280            AddCollisionHandler<Grenade, PhysicsObject>(kranu, "VIHOLLINEN", GrenadeCollide);
281
282            saaHeittaaKranaatin = false;
283            Timer.SingleShot(kranaattiaika, HyvaksyKranaatti);
284        }
285
286    }
287    void VihuAmmuAseella(PlatformCharacter pelaaja)
288    {
289        PhysicsObject ammus = pelaaja.Weapon.Shoot();
290
291        if (ammus != null)
292        {
293            ammus.Size *= 3.5;
294            ammus.Image = LoadImage("bullet1");
295            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
296            ammus.IgnoresCollisionResponse = true;
297            pelaaja.Weapon.AttackSound.Stop();
298        }
299    }
300    void HyvaksyKranaatti()
301    {
302        saaHeittaaKranaatin = true;
303    }
304    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
305    {
306        //rajahdyksenKohde.Destroy();
307        pisteLaskuri.AddValue(1);
308        (rajahdyksenKohde as Hahmo).ElamaLaskuri.AddValue(-10);
309    }
310    void GrenadeCollide(Grenade kranu, PhysicsObject zombi)
311    {
312        kranu.Explode();
313    }
314    void Konsoli()
315    {
316        InputWindow kysymysIkkuna = new InputWindow("Huijauskoodi?");
317        kysymysIkkuna.TextEntered += ProcessInput;
318        Add(kysymysIkkuna);
319    }
320    void ProcessInput(InputWindow ikkuna)
321    {
322        string vastaus = ikkuna.InputBox.Text;
323        string[] palat = vastaus.Split(' ');
324
325        // 1 osaiset komennot
326        if (palat.Length == 1)
327        {
328            string komento = palat[0];
329
330            if (komento == "exit")
331            {
332                Exit();
333            }
334            if(komento=="pysäytäspawni")
335            {
336                foreach(Timer spawntimer in ajastinlista)
337                {
338                    spawntimer.Stop();
339                }
340               
341               
342            }
343            if (komento == "aloitaspawni")
344            {
345                foreach (Timer spawntimer in ajastinlista)
346                {
347                    spawntimer.Start();
348                }
349
350            }
351            if (komento == "god")
352            {
353                pelaaja1.ElamaLaskuri.MaxValue = 99999999;
354                pelaaja1.ElamaLaskuri.Value = pelaaja1.ElamaLaskuri.MaxValue;
355            }
356
357            if (komento == "häviä")
358            {
359                pelaaja1.Destroy();
360            }
361        }
362
363        // 2 osaiset komennot
364        if (palat.Length == 2)
365        {
366            string komento = palat[0];
367            double numero = double.Parse(palat[1]);
368
369            if (komento == "firerate")
370            {
371                pelaaja1.Weapon.FireRate = numero;
372            }
373
374            if (komento == "zombi")
375            {
376                for (int i = 0; i < numero; i++)
377                {
378                    LisaaVihu(pelaaja1.Position+RandomGen.NextVector(0,100),40,40);
379                }
380            }
381
382            if(komento=="gravity")
383            {
384                Gravity = new Vector(0,numero);
385            }
386            if (komento == "speed")
387            {
388                nopeus = numero;
389            }
390            if(komento=="god")
391            {
392                pelaaja1.ElamaLaskuri.MaxValue = 99999999;
393                pelaaja1.ElamaLaskuri.Value = pelaaja1.ElamaLaskuri.MaxValue;
394            }
395            if(komento=="kranuheittoaika")
396            {
397                kranaattiaika = numero;
398            }
399            if(komento=="tähti")
400            {
401                tahtilaskuri.Value = (int)numero;
402            }
403            if(komento=="tahti")
404            {
405                tahtilaskuri.Value = (int)numero;
406                huijattu = false;
407                return;
408            }
409           
410        }
411
412
413        huijattu = true;
414    }
415    void TaukoValikko()
416    {
417        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin taukovalikko",
418"Palaa peliin", "Parhaat pisteet", "Lopeta", "Asetukset","Aloita uudelleen");
419        Add(alkuValikko);
420        alkuValikko.DefaultCancel = 3;
421        alkuValikko.Color = Color.Charcoal;
422        alkuValikko.AddItemHandler(0, Jatka);
423        alkuValikko.AddItemHandler(1, ParhaatPisteet);
424        alkuValikko.AddItemHandler(2, Exit);
425        alkuValikko.AddItemHandler(3, AliOhjelma);
426        alkuValikko.AddItemHandler(4, UudelleenAloitus);
427
428    }
429    void AliOhjelma()
430    {
431        MultiSelectWindow Asetukset = new MultiSelectWindow("ASETUKSET",
432            "Palaa valikkoon", "Äänenvoimakkuus");
433        Add(Asetukset);
434       
435       // ÄänenVoimakkuus.Changed += ZoomaaKenttaa;
436
437        Slider liukusaadin = new Slider(200, 20);
438        liukusaadin.BindTo(ÄänenVoimakkuus);
439        liukusaadin.Color = Color.Gray;
440        liukusaadin.InactiveColor = Color.Ivory;
441        liukusaadin.ActiveColor = Color.DarkJungleGreen;
442        Add(liukusaadin);
443    }
444    void UudelleenAloitus()
445    {
446        AloitaPeli();
447    }
448    void Jatka()
449    {
450
451    }
452    void ParhaatPisteet()
453    {
454        MultiSelectWindow ParhaatPisteet = new MultiSelectWindow("ASETUKSET",
455            "Palaa valikkoon");
456        Add(ParhaatPisteet);
457    }
458   
459
460    void LuoPistelaskuri()
461    {
462        pisteLaskuri = new IntMeter(0);
463
464        Label pisteNaytto = new Label();
465        pisteNaytto.X = Screen.Left + 100;
466        pisteNaytto.Y = Screen.Top - 100;
467        pisteNaytto.TextColor = Color.Black;
468        pisteNaytto.Color = Color.White;
469
470        pisteNaytto.BindTo(pisteLaskuri);
471        Add(pisteNaytto);
472    }
473    void TelePort(Vector paikka, double leveys, double korkeus)
474    {
475        PhysicsObject teleport = PhysicsObject.CreateStaticObject(leveys, korkeus);
476        teleport.Position = paikka;
477        teleport.Image = LoadImage("blackhole");
478        Add(teleport);
479        teleport.Tag = "tele";
480    }
481    void TormaaTeleport(PhysicsObject pelaaja1, PhysicsObject teleport)
482    {
483        if(tahtilaskuri.Value>100)
484        {
485            if(kenttaJossaOllaanNyt==1) kenttaJossaOllaanNyt = 2;
486            else if (kenttaJossaOllaanNyt == 2) kenttaJossaOllaanNyt = 1;
487            AloitaPeli();
488        }
489    }
490    void LuoTahtilaskuri()
491    {
492        //tahtilaskuri =
493
494        Label pisteNaytto = new Label();
495        pisteNaytto.X = Screen.Left + 80;
496        pisteNaytto.Y = Screen.Top - 80;
497        pisteNaytto.TextColor = Color.Black;
498        pisteNaytto.Color = Color.White;
499
500        pisteNaytto.BindTo(tahtilaskuri);
501        Add(pisteNaytto);
502    }
503    void LuoElamaLaskuri()
504    {
505        //elamalaskuri = new DoubleMeter(25);
506        //elamalaskuri.MaxValue = 25;
507        //elamalaskuri.LowerLimit += pelaaja1.Destroy;
508
509        ProgressBar elamaPalkki = new ProgressBar(150, 20);
510        elamaPalkki.X = Screen.Left + 150;
511        elamaPalkki.Y = Screen.Top - 20;
512        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
513        elamaPalkki.Color = Color.Black;
514        elamaPalkki.BorderColor = Color.Black;
515        Add(elamaPalkki);
516    }
517    void LuoTappoLaskuri()
518    {
519        tappolaskuri = new IntMeter(0);
520
521        Label pisteNaytto = new Label();
522        pisteNaytto.X = Screen.Left + 60;
523        pisteNaytto.Y = Screen.Top - 60;
524        pisteNaytto.TextColor = Color.Black;
525        pisteNaytto.Color = Color.White;
526
527        pisteNaytto.BindTo(tappolaskuri);
528        Add(pisteNaytto);
529    }
530    void GameOver()
531    {
532        if (huijattu)
533        {
534            Begin();
535        }
536        else
537        {
538            topLista.EnterAndShow(pisteLaskuri.Value + tahtilaskuri.Value);
539            topLista.HighScoreWindow.Closed += (w) => Begin();
540
541        }
542       
543
544       
545       
546    }
547    void AlkuValikko()
548    {
549        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
550"Aloita peli", "Parhaat pisteet", "Lopeta");
551        Add(alkuValikko);
552        alkuValikko.AddItemHandler(0, AloitaPeli);
553        alkuValikko.AddItemHandler(1, ParhaatPisteet);
554        alkuValikko.AddItemHandler(2, Exit);
555    }
556
557
558
559
560
561}
562class Hahmo : PlatformCharacter
563{
564    private DoubleMeter elamaLaskuri = new DoubleMeter(25, 0, 25);
565    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
566
567    public Hahmo(double leveys, double korkeus)
568        : base(leveys, korkeus)
569    {
570        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
571    }
572}
573
Note: See TracBrowser for help on using the repository browser.