source: 2015/26/AtteK/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli.cs @ 6374

Revision 6374, 19.7 KB checked in by anmurtok, 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    DoubleMeter nopeus;
12    double hyppyNopeus = 750;
13
14    const int RUUDUN_KOKO = 40;
15
16    PlatformCharacter pelaaja1;
17    IntMeter yrityslaskuri=new IntMeter(0);
18    IntMeter kolikkolaskuri = new IntMeter(0);
19
20    int tankkeja = 0;
21    int kenttänumero = 1
22        ;
23    Image[] BonusAtt = LoadImages("Bonusvihu", "Bonusvihu2");
24    Image Burgerikuva = LoadImage("BurgeriBonus");
25    Image porttikuva1 = LoadImage("portti");
26    Image porttikuva2 = LoadImage("portti2");
27    Image tynnyrikuva = LoadImage("Tynnyri");
28    Image tynnyrikuva2 = LoadImage("Tynnyri2");
29    Image tankkikuva = LoadImage("tankki");
30    Image ammuskuva = LoadImage("Ammus");
31    Image donitsikuva = LoadImage("Donitsi");
32    Image[] PoliisiAtt = LoadImages("Polisi", "Polisiattack");
33    Image tiilikuva = LoadImage("tiili");
34    Image lopunkuva = LoadImage("Loppu");
35    Image[] vihukavely = LoadImages("vih1att", "vih1att2");
36    Image[] idlekuva = LoadImages("kaljaidle", "kaljaidle2");
37    Image powerupkuva = LoadImage("powerup");
38    Image vihollisenkuva = LoadImage("vihollinen");
39    Image poliisinkuva = LoadImage("polisi");
40    Image[] lyöntikuvat = LoadImages("lyöntikalja", "lyöntikalja2");
41    Image[] hyppykuvat = LoadImages("hyppykalja", "hyppykalja2", "hyppykalja3");
42    Image[] kävelykuvat = LoadImages("Kaljakavely", "Kaljakavely2");
43    Image pelaajanKuva = LoadImage("kaljajuoppo");
44    Image tahtiKuva = LoadImage("Kolike");
45    Image ruohokuva = LoadImage("ruohotilkku");
46    SoundEffect maaliaani = LoadSoundEffect("maali");
47    SoundEffect pulloaani = LoadSoundEffect("pullo");
48    SoundEffect punchaani = LoadSoundEffect("punch");
49    SoundEffect vitutusaani = LoadSoundEffect("huutoo");
50    SoundEffect splataani = LoadSoundEffect("splat");
51    Image taustakuva = LoadImage("taustsa");
52
53
54    public override void Begin()
55    {
56        SmoothTextures = false;
57
58        MediaPlayer.Play("taustamusa");
59        MediaPlayer.IsRepeating = true;
60        MediaPlayer.Volume = 0.5; 
61
62        aloitapeli();
63    }
64    void LuoPistelaskuri()
65    {
66        Label YritysNaytto = new Label();
67        YritysNaytto.X = Screen.Left + 200;
68        YritysNaytto.Y = Screen.Top - 100;
69        YritysNaytto.TextColor = Color.White;
70        YritysNaytto.TextScale *= 3;
71        YritysNaytto.IntFormatString = "yritykset {0}";       
72        YritysNaytto.BindTo(yrityslaskuri);
73        Add(YritysNaytto);
74
75        Label KolikkoNaytto = new Label();
76        KolikkoNaytto.X = Screen.Right - 200;
77        KolikkoNaytto.Y = Screen.Top - 100;
78        KolikkoNaytto.TextColor = Color.White;
79        KolikkoNaytto.TextScale *= 3;
80        KolikkoNaytto.IntFormatString = "x{0}";
81        KolikkoNaytto.BindTo(kolikkolaskuri);
82        Add(KolikkoNaytto);
83
84        Label kolikkokuva = new Label();
85        kolikkokuva.Image = tahtiKuva;
86        kolikkokuva.Position = KolikkoNaytto.Position;
87        kolikkokuva.X -= 70;
88        Add(kolikkokuva);
89        kolikkokuva.Size = new Vector(60, 60);
90    }
91
92    void seuraavakenttä()
93    {
94        kenttänumero++;
95        aloitapeli();
96
97        if (kenttänumero == 2)
98        {
99            MediaPlayer.Play("tankkimusa");
100        }
101
102        if (kenttänumero == 3)
103        {
104            MediaPlayer.Play("bonusmusa");
105        }
106
107
108        MediaPlayer.IsRepeating = true;
109        MediaPlayer.Volume = 0.5; 
110    }
111
112    void aloitapeli()
113    {
114        ClearAll();
115
116        kolikkolaskuri.Value = 0;
117
118        nopeus = new DoubleMeter(300);
119        Gravity = new Vector(0, -1000);
120
121        LuoKentta();
122        LisaaNappaimet();
123       
124        Camera.Follow(pelaaja1);
125        Camera.ZoomFactor = 1.9;
126        Camera.StayInLevel = true;
127
128        LuoPistelaskuri();
129    }
130
131    void LuoKentta()
132    {
133        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttänumero);
134        kentta.SetTileMethod('T', LisaaTiili);
135        kentta.SetTileMethod('J', LisaaBonus);
136        kentta.SetTileMethod('Z', LisaaPortti1);
137        kentta.SetTileMethod('X', LisaaPortti2);
138        kentta.SetTileMethod('O', LisaaPudotettava);
139        kentta.SetTileMethod('L', LisaaLoppu);
140        kentta.SetTileMethod('#', LisaaTaso);
141        kentta.SetTileMethod('*', LisaaTahti);
142        kentta.SetTileMethod('N', LisaaPelaaja);
143        kentta.SetTileMethod('K', LisaaPowerup);
144        kentta.SetTileMethod('S', LisaaTankki);
145        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
146        TileMap kentta2 = TileMap.FromLevelAsset("kentta"+kenttänumero);
147        kentta2.SetTileMethod('V', LisaaVihollinen);
148        kentta2.SetTileMethod('P', LisaaPolisi);
149        kentta2.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
150        Level.CreateBorders();
151        Level.Background.CreateGradient(Color.White, Color.White);
152        Level.Background.Image = taustakuva;
153    }
154    void LisaaPortti1(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        taso.Position = paikka;
158        taso.Color = Color.Green;
159        Add(taso);
160        taso.Image = porttikuva1;
161        taso.Tag = "portti";
162    }
163    void LisaaPortti2(Vector paikka, double leveys, double korkeus)
164    {
165        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
166        taso.Position = paikka;
167        taso.Color = Color.Green;
168        Add(taso);
169        taso.Image = porttikuva2;
170        taso.Tag = "portti";
171    }
172    void LisaaTaso(Vector paikka, double leveys, double korkeus)
173    {
174        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
175        taso.Position = paikka;
176        taso.Color = Color.Green;
177        Add(taso);
178        taso.Image = ruohokuva;
179    }
180    void LisaaPudotettava(Vector paikka, double leveys, double korkeus)
181    {
182        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*0.75, korkeus*1);
183        taso.Position = paikka;
184        taso.Color = Color.Green;
185        taso.IgnoresGravity = true;
186        Add(taso);
187        taso.Image = tynnyrikuva;
188        taso.Tag = "pudotettava";
189        taso.IgnoresCollisionResponse = true;
190        AddCollisionHandler(taso, "lyonti", delegate(PhysicsObject pudotettava, PhysicsObject nyrkki)
191        {
192            taso.Image = tynnyrikuva2;
193            pudotettava.Velocity = new Vector(0, -800);
194            Timer.SingleShot(10, delegate { LisaaPudotettava(paikka, leveys, korkeus); });
195        });
196    }
197 
198    void LisaaTiili (Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        taso.Position = paikka;
202        taso.Color = Color.Green;
203        Add(taso);
204        taso.Image = tiilikuva;
205    }
206    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
207    {
208        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*5, korkeus*3);
209        taso.Position = paikka;
210        taso.Color = Color.Green;
211        Add(taso);
212        taso.Image = lopunkuva;
213        taso.Y += korkeus;
214        taso.Tag = "loppu";
215    }
216    void LisaaTahti(Vector paikka, double leveys, double korkeus)
217    {
218        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
219        tahti.IgnoresCollisionResponse = true;
220        tahti.Position = paikka;
221        tahti.Image = tahtiKuva;
222        tahti.Tag = "tahti";
223        Add(tahti);
224    }
225    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
226    {
227        PlatformCharacter Vihollinen1 = new PlatformCharacter(leveys, korkeus);
228        Vihollinen1.Position = paikka;
229        Vihollinen1.Image = vihollisenkuva;
230        Vihollinen1.Tag = "vihollinen";
231        Add(Vihollinen1);
232        Vihollinen1.AnimWalk = new Animation (vihukavely);
233        Vihollinen1.AnimWalk.FPS = 4;
234
235        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
236        tasoAivot.TriesToJump = true;
237        tasoAivot.Speed = 100;
238
239        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
240        seuraajanAivot.Speed = 425;
241        seuraajanAivot.DistanceFar = 300;
242        seuraajanAivot.DistanceClose = 200;
243        seuraajanAivot.StopWhenTargetClose = false;
244        seuraajanAivot.FarBrain = tasoAivot;
245
246       
247
248        Vihollinen1.Brain = seuraajanAivot;
249        AddCollisionHandler(Vihollinen1, "lyonti", osuma);
250
251        Timer ajastin = new Timer();
252        ajastin.Interval = 0.75;
253        ajastin.Timeout += delegate
254        {
255            Vihollinen1.Jump(400);
256
257        };
258        ajastin.Start();
259   
260    }
261    void LisaaPolisi(Vector paikka, double leveys, double korkeus)
262    {
263        PlatformCharacter Polisi = new PlatformCharacter(leveys, korkeus);
264        Polisi.Position = paikka;
265        Polisi.Image = poliisinkuva;
266        Polisi.CollisionIgnoreGroup = 1;
267        Polisi.Tag = "vihollinen";
268        Polisi.Animation = new Animation(PoliisiAtt) { FPS = 2 };
269        Polisi.Animation.Start();
270        Add(Polisi);
271       // Polisi.AnimWalk = new Animation(vihukavely);
272        //Polisi.AnimWalk.FPS = 4;
273
274        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
275        tasoAivot.Speed = 100;
276
277        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
278        seuraajanAivot.Speed = 425;
279        seuraajanAivot.DistanceFar = 300;
280        seuraajanAivot.DistanceClose = 200;
281        seuraajanAivot.StopWhenTargetClose = false;
282        seuraajanAivot.FarBrain = tasoAivot;
283
284        //seuraajanAivot.TargetClose +=
285
286        Polisi.Brain = seuraajanAivot;
287        AddCollisionHandler(Polisi, "lyonti", osuma);
288
289        Timer ajastin = new Timer();
290        ajastin.Interval = 1;
291        ajastin.Timeout += delegate
292        {
293            if (!Polisi.IsDestroyed)
294            {
295                //Polisi.PlayAnimation(new Animation(PoliisiAtt) { FPS = 1 });
296                PhysicsObject Donitsi = new PhysicsObject(17, 17);
297                Donitsi.Image = donitsikuva;
298                Donitsi.Position = Polisi.Position;
299                Donitsi.Hit((pelaaja1.Position - Polisi.Position).Normalize() * 1500);
300                Add(Donitsi);
301                Donitsi.Shape = Shape.Circle;
302                Donitsi.LifetimeLeft = TimeSpan.FromSeconds(0.75);
303                Donitsi.Tag = "vihollinen";
304                AddCollisionHandler(Donitsi, "lyonti", osuma);
305                AddCollisionHandler(Donitsi, LuoRajahdys);
306                Donitsi.CollisionIgnoreGroup = 1;
307            }
308        };
309        ajastin.Start();
310
311    }
312    void LuoRajahdys(PhysicsObject Donitsi, PhysicsObject kohde)
313    {
314        Explosion rajahdys = new Explosion(50);
315        rajahdys.Position = Donitsi.Position;
316        rajahdys.Sound = null;
317        Add(rajahdys);
318        Donitsi.Destroy();
319
320    }
321    void LisaaBonus(Vector paikka, double leveys, double korkeus)
322    {
323        PlatformCharacter Polisi = new PlatformCharacter(leveys, korkeus);
324        Polisi.Position = paikka;
325        Polisi.Image = poliisinkuva;
326        Polisi.CollisionIgnoreGroup = 1;
327        Polisi.Tag = "vihollinen";
328        Polisi.Animation = new Animation(BonusAtt) { FPS = 10 };
329        Polisi.Animation.Start();
330        Add(Polisi);
331        // Polisi.AnimWalk = new Animation(vihukavely);
332        //Polisi.AnimWalk.FPS = 4;
333
334        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
335        tasoAivot.Speed = 100;
336
337        FollowerBrain seuraajanAivot = new FollowerBrain(Polisi);
338        seuraajanAivot.Speed = 425;
339        seuraajanAivot.DistanceFar = 300;
340        seuraajanAivot.DistanceClose = 200;
341        seuraajanAivot.StopWhenTargetClose = false;
342        seuraajanAivot.FarBrain = tasoAivot;
343
344        //seuraajanAivot.TargetClose +=
345
346        Polisi.Brain = seuraajanAivot;
347        AddCollisionHandler(Polisi, "lyonti", osuma);
348
349        Timer ajastin = new Timer();
350        ajastin.Interval = 0.1;
351        ajastin.Timeout += delegate
352        {
353            if (!Polisi.IsDestroyed)
354            {
355                //Polisi.PlayAnimation(new Animation(PoliisiAtt) { FPS = 1 });
356                PhysicsObject Donitsi = new PhysicsObject(17, 17);
357                Donitsi.Image = Burgerikuva;
358                Donitsi.Position = Polisi.Position;
359                Donitsi.Hit((pelaaja1.Position - Polisi.Position).Normalize() * 1500);
360                Add(Donitsi);
361                Donitsi.Shape = Shape.Circle;
362                Donitsi.LifetimeLeft = TimeSpan.FromSeconds(10);
363                Donitsi.Tag = "BONUS";
364                AddCollisionHandler(Donitsi, "lyonti", osuma);
365                //AddCollisionHandler(Donitsi, CollisionHandler.ExplodeObject(100, false));
366                //Donitsi.CollisionIgnoreGroup = 1;
367            }
368        };
369        ajastin.Start();
370
371    }
372    void LisaaTankki(Vector paikka, double leveys, double korkeus)
373    {
374        PlatformCharacter Tankki = new PlatformCharacter(leveys*4, korkeus*2);
375        Tankki.Position = paikka;
376        Tankki.Image = tankkikuva;
377        Tankki.CollisionIgnoreGroup = 1;
378        Tankki.Tag = "Tankki";
379        //Tankki.Animation = new Animation(PoliisiAtt) { FPS = 2 };
380        //Tankki.Animation.Start();
381        Add(Tankki);
382        tankkeja++;
383        // Polisi.AnimWalk = new Animation(vihukavely);
384        //Polisi.AnimWalk.FPS = 4;
385
386        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
387        tasoAivot.Speed = 100;
388
389        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
390        seuraajanAivot.Speed = 425;
391        seuraajanAivot.DistanceFar = 300;
392        seuraajanAivot.DistanceClose = 200;
393        seuraajanAivot.StopWhenTargetClose = false;
394        seuraajanAivot.FarBrain = tasoAivot;
395
396        IntMeter elämät = new IntMeter(3);
397
398        Tankki.Brain = tasoAivot;
399        AddCollisionHandler(Tankki, "pudotettava", delegate(PhysicsObject vihollinen, PhysicsObject nyrkki)
400        {
401            elämät.Value--;
402            if (elämät.Value == 0)
403            {
404                Tankki.Destroy();
405                tankkeja--;
406                if (tankkeja == 0)
407                {
408                    foreach (GameObject portti in GetObjectsWithTag("portti"))
409                    {
410                        portti.Destroy();
411                    }
412                }
413            }
414        });
415
416        Timer ajastin = new Timer();
417        ajastin.Interval = 1;
418        ajastin.Timeout += delegate
419        {
420            if (!Tankki.IsDestroyed && Math.Sign(Tankki.FacingDirection.GetVector().X) == Math.Sign(pelaaja1.X - Tankki.X))
421            {
422                //Polisi.PlayAnimation(new Animation(PoliisiAtt) { FPS = 1 });
423                PhysicsObject Ammus = new PhysicsObject(30, 17);
424                Ammus.Image = ammuskuva;
425                Ammus.Position = Tankki.Position + new Vector(Tankki.FacingDirection.GetVector().X * 80, 30);
426                Ammus.Hit((pelaaja1.Position - Tankki.Position).Normalize() * 1500);
427                Ammus.Angle = (pelaaja1.Position - Tankki.Position).Angle;
428                Add(Ammus);
429                Ammus.Shape = Shape.Circle;
430                Ammus.LifetimeLeft = TimeSpan.FromSeconds(2);
431                Ammus.Tag = "vihollinen";
432                AddCollisionHandler(Ammus, "lyonti", osuma);
433                AddCollisionHandler(Ammus, CollisionHandler.ExplodeObject(100, true));
434                Ammus.CollisionIgnoreGroup = 1;
435            }
436        };
437        ajastin.Start();
438
439    }
440
441    void osuma(PhysicsObject vihollinen, PhysicsObject nyrkki)
442    {
443        nyrkki.Destroy();
444        vihollinen.Destroy();
445    }
446
447
448    void LisaaPowerup(Vector paikka, double leveys, double korkeus)
449    {
450        PhysicsObject Powerup = PhysicsObject.CreateStaticObject(leveys * 0.225, korkeus * 0.75);
451        Powerup.IgnoresCollisionResponse = true;
452        Powerup.Position = paikka;
453        Powerup.Image = powerupkuva;
454        Powerup.Tag = "speedpowerup";
455        Add(Powerup);
456    }
457
458    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
459    {
460        pelaaja1 = new PlatformCharacter(leveys, korkeus);
461        pelaaja1.AnimJump = new Animation(hyppykuvat);
462        pelaaja1.AnimJump.FPS = 300;
463        pelaaja1.Position = paikka;
464        pelaaja1.Mass = 4.0;
465        pelaaja1.Image = pelaajanKuva;
466        pelaaja1.AnimIdle = new Animation(idlekuva);
467        pelaaja1.AnimIdle.FPS = 3;
468        pelaaja1.AnimWalk = new Animation(kävelykuvat);
469        pelaaja1.AnimWalk.FPS = 4;
470        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
471        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
472        AddCollisionHandler(pelaaja1, "speedpowerup", TormaaPoweruppiin);
473        AddCollisionHandler(pelaaja1, "loppu", törmääloppuun);
474        Add(pelaaja1);
475    }
476    void törmääloppuun(PhysicsObject pelaaja, PhysicsObject loppu)
477    {
478        kolikkolaskuri.MinValue = kolikkolaskuri.Value;
479        seuraavakenttä();
480    }
481    void LisaaNappaimet()
482    {
483        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
484        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
485        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyö, "Pelaaja lyö", pelaaja1);
486        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
487        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
488        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
489        Keyboard.Listen(Key.F12, ButtonState.Pressed, seuraavakenttä, "");
490
491        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
492
493        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
494        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
495        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
496
497        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
498    }
499
500    void Lyö(PlatformCharacter hahmo)
501    {
502        Animation lyöntianimaatio = new Animation(lyöntikuvat);
503        lyöntianimaatio.FPS = 10;
504        hahmo.PlayAnimation(lyöntianimaatio);
505        hahmo.Width = RUUDUN_KOKO + 15;
506        lyöntianimaatio.Played += delegate
507        {
508            hahmo.Width = RUUDUN_KOKO;
509        };
510        punchaani.Play();
511
512        PhysicsObject lyonti = new PhysicsObject(40,30);
513        lyonti.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 30;
514        lyonti.IgnoresCollisionResponse = true;
515        lyonti.Tag = "lyonti";
516        lyonti.IsVisible = false;
517        lyonti.LifetimeLeft = TimeSpan.FromSeconds(0.1);
518        Add(lyonti);
519    }
520
521    void Liikuta(PlatformCharacter hahmo, double suunta)
522    {
523        hahmo.Walk(nopeus.Value * suunta);
524    }
525
526    void Hyppaa(PlatformCharacter hahmo, double nopeus)
527    {
528        hahmo.Jump(nopeus);
529    }
530
531    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
532    {
533        maaliaani.Play(0.5,0.0,0.0);
534        MessageDisplay.Add("LISÄÄ RAHEJA!");
535        tahti.Destroy();
536        kolikkolaskuri.Value++;
537    }
538    void TormaaPoweruppiin(PhysicsObject hahmo, PhysicsObject Powerup)
539    {
540        pulloaani.Play();
541        Powerup.Destroy();
542        nopeus.Value += 150;
543    }
544
545    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
546    {
547        yrityslaskuri.Value++;
548        aloitapeli();
549        vitutusaani.Play();
550    }
551}
Note: See TracBrowser for help on using the repository browser.