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

Revision 9300, 15.6 KB checked in by npo17_73, 23 months 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.F2, ButtonState.Down, NoClip, ("Mene blockien läpi"),pelaaja1);
121        Keyboard.Listen(Key.F3, ButtonState.Down, NoClipOff, ("Älä mene blockien läpi"), pelaaja1);
122        Keyboard.Listen(Key.G, ButtonState.Pressed, HeitaKranaatti, ("Heitä kranaatti"), pelaaja1);
123        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Konsoli, null);
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   
144
145    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
146    {
147        maaliAani.Play();
148        MessageDisplay.Add("Keräsit tähden!");
149        tahti.Destroy();
150        tahtilaskuri.AddValue(1);
151       
152       
153    }
154    void Lenna(PlatformCharacter hahmo, double nopeus)
155    {
156        hahmo.Push(new Vector(0, nopeus));
157        hahmo.IgnoresCollisionResponse = false;
158       
159    }
160    void LentoLopuu(PlatformCharacter hahmo)
161    {
162        hahmo.IgnoresCollisionResponse = false;
163    }
164    void NoClip(PlatformCharacter hahmo)
165    {
166        hahmo.IgnoresCollisionResponse = true;
167    }
168    void NoClipOff(PlatformCharacter hahmo)
169    {
170        hahmo.IgnoresCollisionResponse = false;
171    }
172    void VihunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
173    {
174       
175        if(kohde.Tag=="pelaaja1")
176        {
177            (kohde as Hahmo).ElamaLaskuri.Value -= 1;
178        }
179    }
180    void PelaajanAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
181    {
182
183        if (kohde.Tag == "VIHOLLINEN")
184        {
185            (kohde as Hahmo).ElamaLaskuri.Value -= 1;
186        }
187    }
188    void AmmuAseella(PlatformCharacter pelaaja)
189    {
190        PhysicsObject ammus = pelaaja.Weapon.Shoot();
191
192        if (ammus != null)
193        {
194            ammus.Size *= 3.5;
195            ammus.Image = LoadImage("ammus");
196            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
197            ammus.IgnoresCollisionResponse = true;
198        }
199    }
200    void LisaaVihu(Vector paikka, double leveys, double korkeus)
201    {
202        Hahmo vihu = new Hahmo(leveys, korkeus);
203        vihu.Position = paikka;
204        vihu.Mass = 4.0;
205        vihu.Image = LoadImage("zombi");
206        vihu.Tag = "VIHOLLINEN";
207        Add(vihu);
208        vihu.Destroyed += delegate { tappolaskuri.Value += 1; };
209        vihu.CollisionIgnoreGroup = 3;
210        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
211        tasoAivot.Speed = 300;
212        tasoAivot.FallsOffPlatforms = true;
213        tasoAivot.JumpSpeed = 700;
214        tasoAivot.TriesToJump = true;
215        vihu.Brain = tasoAivot;
216        //pelaaja1 on PlatformCharacter-tyyppinen
217        vihu.Weapon = new AssaultRifle(30, 10);
218        vihu.Weapon.FireRate = 2;
219
220        //Ammusten määrä aluksi:
221        vihu.Weapon.Ammo.Value = 99999999;
222        vihu.Weapon.MaxAmmoLifetime = TimeSpan.FromSeconds(1);
223        //Mitä tapahtuu kun ammus osuu johonkin?
224        vihu.Weapon.ProjectileCollision = VihunAmmusOsui;
225       
226        Timer ammuajastinhajalle = new Timer();
227        ammuajastinhajalle.Interval = 1;
228        ammuajastinhajalle.Timeout += delegate { VihuAmmuAseella(vihu); };
229        ammuajastinhajalle.Start();
230       
231    }
232    void VihuSpawn(Vector paikka, double leveys, double korkeus)
233    {
234        Timer spawntimer = new Timer();
235        spawntimer.Interval = 7.0;
236        spawntimer.Timeout += delegate { LisaaVihu(paikka, leveys, korkeus); };
237        spawntimer.Start();
238        ajastinlista.Add(spawntimer);
239    }
240    void HeitaKranaatti(PlatformCharacter pelaaja)
241    {
242       
243       
244        if (saaHeittaaKranaatin)
245        {
246            Grenade kranu = new Grenade(1.0);
247            pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
248            kranu.Explosion.AddShockwaveHandler("VIHOLLINEN", KranaattiOsui);
249            kranu.Size *= 5.0;
250            kranu.Explosion.Speed = 350;
251            AddCollisionHandler<Grenade, PhysicsObject>(kranu, "VIHOLLINEN", GrenadeCollide);
252
253            saaHeittaaKranaatin = false;
254            Timer.SingleShot(kranaattiaika, HyvaksyKranaatti);
255        }
256
257    }
258    void VihuAmmuAseella(PlatformCharacter pelaaja)
259    {
260        PhysicsObject ammus = pelaaja.Weapon.Shoot();
261
262        if (ammus != null)
263        {
264            ammus.Size *= 3.5;
265            ammus.Image = LoadImage("bullet1");
266            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
267            ammus.IgnoresCollisionResponse = true;
268        }
269    }
270    void HyvaksyKranaatti()
271    {
272        saaHeittaaKranaatin = true;
273    }
274    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
275    {
276        //rajahdyksenKohde.Destroy();
277        pisteLaskuri.AddValue(1);
278        (rajahdyksenKohde as Hahmo).ElamaLaskuri.AddValue(-4);
279    }
280    void GrenadeCollide(Grenade kranu, PhysicsObject zombi)
281    {
282        kranu.Explode();
283    }
284    void Konsoli()
285    {
286        InputWindow kysymysIkkuna = new InputWindow("Huijauskoodi?");
287        kysymysIkkuna.TextEntered += ProcessInput;
288        Add(kysymysIkkuna);
289    }
290    void ProcessInput(InputWindow ikkuna)
291    {
292        string vastaus = ikkuna.InputBox.Text;
293        string[] palat = vastaus.Split(' ');
294
295        // 1 osaiset komennot
296        if (palat.Length == 1)
297        {
298            string komento = palat[0];
299
300            if (komento == "exit")
301            {
302                Exit();
303            }
304            if(komento=="pysäytäspawni")
305            {
306                foreach(Timer spawntimer in ajastinlista)
307                {
308                    spawntimer.Stop();
309                }
310               
311               
312            }
313            if (komento == "aloitaspawni")
314            {
315                foreach (Timer spawntimer in ajastinlista)
316                {
317                    spawntimer.Start();
318                }
319
320            }
321            if (komento == "god")
322            {
323                pelaaja1.ElamaLaskuri.MaxValue = 99999999;
324                pelaaja1.ElamaLaskuri.Value = pelaaja1.ElamaLaskuri.MaxValue;
325            }
326
327            if (komento == "häviä")
328            {
329                pelaaja1.Destroy();
330            }
331        }
332
333        // 2 osaiset komennot
334        if (palat.Length == 2)
335        {
336            string komento = palat[0];
337            double numero = double.Parse(palat[1]);
338
339            if (komento == "firerate")
340            {
341                pelaaja1.Weapon.FireRate = numero;
342            }
343
344            if (komento == "zombi")
345            {
346                for (int i = 0; i < numero; i++)
347                {
348                    LisaaVihu(pelaaja1.Position+RandomGen.NextVector(0,100),40,40);
349                }
350            }
351
352            if(komento=="gravity")
353            {
354                Gravity = new Vector(0,numero);
355            }
356            if (komento == "speed")
357            {
358                nopeus = numero;
359            }
360            if(komento=="god")
361            {
362                pelaaja1.ElamaLaskuri.MaxValue = 99999999;
363                pelaaja1.ElamaLaskuri.Value = pelaaja1.ElamaLaskuri.MaxValue;
364            }
365            if(komento=="kranuheittoaika")
366            {
367                kranaattiaika = numero;
368            }
369           
370        }
371
372
373        huijattu = true;
374    }
375    void TaukoValikko()
376    {
377        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin taukovalikko",
378"Palaa peliin", "Parhaat pisteet", "Lopeta", "Asetukset");
379        Add(alkuValikko);
380        alkuValikko.DefaultCancel = 3;
381        alkuValikko.Color = Color.Charcoal;
382        alkuValikko.AddItemHandler(0, Jatka);
383        alkuValikko.AddItemHandler(1, ParhaatPisteet);
384        alkuValikko.AddItemHandler(2, Exit);
385        alkuValikko.AddItemHandler(3, AliOhjelma);
386
387    }
388    void AliOhjelma()
389    {
390        MultiSelectWindow Asetukset = new MultiSelectWindow("ASETUKSET",
391            "Palaa valikkoon", "Äänenvoimakkuus");
392        Add(Asetukset);
393       
394       // ÄänenVoimakkuus.Changed += ZoomaaKenttaa;
395
396        Slider liukusaadin = new Slider(200, 20);
397        liukusaadin.BindTo(ÄänenVoimakkuus);
398        liukusaadin.Color = Color.Gray;
399        liukusaadin.InactiveColor = Color.Ivory;
400        liukusaadin.ActiveColor = Color.DarkJungleGreen;
401        Add(liukusaadin);
402    }
403    void Jatka()
404    {
405
406    }
407    void ParhaatPisteet()
408    {
409        MultiSelectWindow ParhaatPisteet = new MultiSelectWindow("ASETUKSET",
410            "Palaa valikkoon");
411        Add(ParhaatPisteet);
412    }
413   
414
415    void LuoPistelaskuri()
416    {
417        pisteLaskuri = new IntMeter(0);
418
419        Label pisteNaytto = new Label();
420        pisteNaytto.X = Screen.Left + 100;
421        pisteNaytto.Y = Screen.Top - 100;
422        pisteNaytto.TextColor = Color.Black;
423        pisteNaytto.Color = Color.White;
424
425        pisteNaytto.BindTo(pisteLaskuri);
426        Add(pisteNaytto);
427    }
428    void TelePort(Vector paikka, double leveys, double korkeus)
429    {
430        PhysicsObject teleport = PhysicsObject.CreateStaticObject(leveys, korkeus);
431        teleport.Position = paikka;
432        teleport.Image = LoadImage("blackhole");
433        Add(teleport);
434        teleport.Tag = "tele";
435    }
436    void TormaaTeleport(PhysicsObject pelaaja1, PhysicsObject teleport)
437    {
438
439    }
440    void LuoTahtilaskuri()
441    {
442        tahtilaskuri = new IntMeter(0);
443
444        Label pisteNaytto = new Label();
445        pisteNaytto.X = Screen.Left + 80;
446        pisteNaytto.Y = Screen.Top - 80;
447        pisteNaytto.TextColor = Color.Black;
448        pisteNaytto.Color = Color.White;
449
450        pisteNaytto.BindTo(tahtilaskuri);
451        Add(pisteNaytto);
452    }
453    void LuoTappoLaskuri()
454    {
455        tappolaskuri = new IntMeter(0);
456
457        Label pisteNaytto = new Label();
458        pisteNaytto.X = Screen.Left + 60;
459        pisteNaytto.Y = Screen.Top - 60;
460        pisteNaytto.TextColor = Color.Black;
461        pisteNaytto.Color = Color.White;
462
463        pisteNaytto.BindTo(tappolaskuri);
464        Add(pisteNaytto);
465    }
466    void GameOver()
467    {
468        if (huijattu)
469        {
470            Begin();
471        }
472        else
473        {
474            topLista.EnterAndShow(pisteLaskuri.Value + tahtilaskuri.Value);
475            topLista.HighScoreWindow.Closed += (w) => Begin();
476
477        }
478       
479
480       
481       
482    }
483
484
485
486
487
488}
489class Hahmo : PlatformCharacter
490{
491    private IntMeter elamaLaskuri = new IntMeter(25, 0, 25);
492    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
493
494    public Hahmo(double leveys, double korkeus)
495        : base(leveys, korkeus)
496    {
497        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
498    }
499}
500//public class Peli : Game
501//{
502   
503
504//    public override void Begin()
505//    {
506//      // alustuksia jne.
Note: See TracBrowser for help on using the repository browser.