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

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