source: 2013/27/HenrikS/Masa Majava/MasaMajavanMaailma/MasaMajavanMaailma/Peli.cs @ 4501

Revision 4501, 40.4 KB checked in by hesasnel, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Loukku : PhysicsObject
10{
11    public Timer HyokkaysTimer;
12
13    public Loukku( double leveys, double korkeus )
14        : base(leveys, korkeus)
15    {
16    }
17
18    public override void Destroy()
19    {
20        HyokkaysTimer.Stop();
21        base.Destroy();
22    }
23}
24
25public class Peli : PhysicsGame
26{
27    const double nopeus = 532;
28    const double hyppyNopeus = 1691;
29    const double lentonopeus = 21400;
30    const int RUUDUN_KOKO = 40;
31    bool onkoJetPak = false;
32
33    PlatformCharacter pelaaja1;
34    DoubleMeter ESmittari = new DoubleMeter(0);
35    DoubleMeter Elama;
36    int Liikeesto = 0;
37    IntMeter kepit = new IntMeter(0);
38
39    Image pelaajanKuvaOikea = LoadImage("Masaoikea");
40    Image[] pelaajanKavelykuvatOikea = LoadImages("Masaoikea", "Masajuoksuoikea");
41    Image[] pelaajanKavelykuvatVasen = LoadImages("Masavasen", "Masajuoksuvasen");
42    Image Kivi = LoadImage("Kivi");
43    Image tahtiKuva = LoadImage("tahti");
44    Image pelaajanKuvaVasen = LoadImage("Masavasen");
45    Image PelaajajuokseeOikea = LoadImage("Masajuoksuvasen");
46    Image PelaajajuokseeVasen = LoadImage("Masajuoksuoikea");
47    Image Pelaajalentaa = LoadImage("Masalentaa");
48    Image Jetpack = LoadImage("Jetpak");
49    Image Polttoaine = LoadImage("Euroshopper");
50    Image Plussa = LoadImage("ES plus");
51    Image Juusto = LoadImage("Juusto");
52    Image ruohikko = LoadImage("Maanpinta");
53    Image multa = LoadImage("Multa");
54    Image kallio = LoadImage("Kallio");
55    Image Kiitara = LoadImage("Kitara");
56    Image masahakkaaOikea = LoadImage("Masakitara");
57    Image masahakkaaOikeaPAM = LoadImage("MasakitaraPAM");
58    Image tausta = LoadImage("Tausta");
59    Image luolaTausta = LoadImage("Luola tausta");
60    Image vuoretTausta = LoadImage("Taustavuoret");
61    Image lootikko = LoadImage("Laatikko");
62    Image Kyltti = LoadImage("Kyltti");
63    Image masahakkaaVasen = LoadImage("MasakitaraVasen");
64    Image masahakkaaVasenTUM = LoadImage("MasakitaraTUM");
65    Image Maaali = LoadImage("Maali");
66    Image vasenlookku = LoadImage("Loukku toisin päin");
67    Image lookku = LoadImage("Loukku");
68    Image loukkuhyokkaus = LoadImage("Loukkuhyökkäys");
69    Image loukkuhyokkausvasen = LoadImage("LoukkuhyökkäysVasen");
70    Image isoloukkuhyokkausvasen = LoadImage("IsoLoukkuHyökkäysVasen");
71    Image loukkutör = LoadImage("PieniLoukkuTör");
72     
73    Image multaseina = LoadImage("Multa seinä");
74    Image lopetusnaytto = LoadImage("Loppu näyttö");
75    Image ylaosa = LoadImage("Yläosa");
76    Image alaosa = LoadImage("Alaosa");
77    Image ylaosator = LoadImage("YläosaTör");
78    Image alaosator = LoadImage("AlaosaTör");
79
80    Animation LentoAnimaatio;
81    // Image kyltti = LoadImage("Kyltti");
82
83    ExplosionSystem hajotus;
84    ExplosionSystem hajotus2;
85
86    bool masaKatsooOikealle = true;
87    bool masaLyo = false;
88    bool onkoilmassa = false;
89
90    SoundEffect maaliAani = LoadSoundEffect("maali");
91    int kenttatilanne = 0;
92
93    bool SkipFrame = false;
94
95    public override void Begin()
96    {
97        Elama = new DoubleMeter(10);
98        Elama.MaxValue = 10;
99
100        aloitapeli(kenttatilanne);
101        lisaaKeppimittari();
102        lisaaElamamittari();
103     
104        hajotus = new ExplosionSystem(LoadImage("Lentävälauta"), 50);
105
106        Add(hajotus);
107
108        hajotus2 = new ExplosionSystem(LoadImage("Hammas"), 50);
109        hajotus2.MinScale = 35;
110        hajotus2.MaxScale = 35;
111        Add(hajotus2);
112    }
113
114    protected override void Update(Time time)
115    {
116
117       
118       
119
120            base.Update(time);
121
122            if (kepit.Value == 100)
123            {
124
125                Elama.MaxValue += 5;
126                Elama.Value = Elama.MaxValue;
127                kepit.Value = 0;
128            }
129
130
131            if (!pelaaja1.IsDestroyed && pelaaja1 != null)
132            {
133                if (pelaaja1.Top < Level.Bottom)
134                {
135                    pelaaja1.Destroy();
136                    Begin();
137                }
138            }
139       
140    }
141   
142    void aloitapeli(int kenttanumero)
143    {
144       
145        //ClearAll();
146        double esMaara = 0;
147        if (ESmittari != null) { esMaara = ESmittari.Value; }
148
149        double klapiMaara = 0;
150        if (kepit != null) { klapiMaara = kepit.Value; }
151
152        double enuMaara = 10;
153        if (Elama != null) { enuMaara = Elama.Value; }
154
155        ClearControls();
156        ClearGameObjects();
157        lisaaElamamittari();
158        lisaaKeppimittari();
159        PoistaIsotLoukut();
160
161        Gravity = new Vector(0, -2800);
162        if (kenttanumero == 0)
163        {
164            luoDebug();
165        }
166        if (kenttanumero == 1)
167        {
168            luoKentta();
169        }
170        if (kenttanumero == 2)
171        {
172            luokentta2();
173            lisaaESmittari(esMaara);
174        }
175        if (kenttanumero == 3)
176        {
177            luokentta3();
178            lisaaESmittari(esMaara);
179        }
180        if (kenttanumero == 4)
181        {
182            luokentta4();
183        }
184        lisaaNappaimet();
185
186        Camera.Follow(pelaaja1);
187        Camera.ZoomFactor = 1.2;
188        Camera.StayInLevel = true;
189
190    }
191
192    private void PoistaIsotLoukut()
193    {
194        foreach (var loukku in GetObjectsWithTag("isoVasenLoukku"))
195        {
196            loukku.Destroy();
197        }
198    }
199
200     
201    #region uusi kentänluonti
202
203    void LuoKentta(String kenttatiedosto, Color taustavari, Image taustakuva)
204    {
205        TileMap kentta = TileMap.FromFile(kenttatiedosto);
206        kentta.SetTileMethod('*', lisaaTahti);
207        kentta.SetTileMethod('M', lisaaPelaaja);
208        kentta.SetTileMethod('O', lisaaMaankamara);
209        kentta.SetTileMethod('S', lisaaMaa);
210        kentta.SetTileMethod('J', lisaaJetpak);
211        kentta.SetTileMethod('E', lisaaES);
212        kentta.SetTileMethod('L', lisaaLaatikko);
213        kentta.SetTileMethod('K', lisaaKitara);
214        kentta.SetTileMethod('m', lisaaMaali);
215        kentta.SetTileMethod('l', lisaaloukku);
216        kentta.SetTileMethod('t', lisaaMaali2);
217        kentta.SetTileMethod('j', lisaaJuusto);
218        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
219
220        Level.CreateBorders();
221        Level.BackgroundColor = Color.DarkBlue;
222        GameObject tausta = new GameObject(Screen.Width, Screen.Height);
223        tausta.Image = taustakuva;
224        Add(tausta, -2);
225        Level.Background.FitToLevel();
226        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
227    }
228
229    #endregion
230
231
232    #region Vanha kentänluonti
233    void luoDebug()
234    {
235        TileMap debug = TileMap.FromFile("Debug.txt");
236        debug.SetTileMethod('*', lisaaTahti);
237        debug.SetTileMethod('M', lisaaPelaaja);
238        debug.SetTileMethod('O', lisaaMaankamara);
239        debug.SetTileMethod('S', lisaaMaa);
240        debug.SetTileMethod('J', lisaaJetpak);
241        debug.SetTileMethod('E', lisaaES);
242        debug.SetTileMethod('L', lisaaLaatikko);
243        debug.SetTileMethod('K', lisaaKitara);
244        debug.SetTileMethod('m', lisaaMaali);
245        debug.SetTileMethod('l', lisaaloukku);
246        debug.SetTileMethod('t', lisaaMaali2);
247        debug.SetTileMethod('j', lisaaJuusto);
248        debug.SetTileMethod('I', lisaaIsoLoukku);
249        debug.SetTileMethod('k', lisaakyltti);
250        debug.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
251
252        Level.CreateBorders();
253        Level.BackgroundColor = Color.DarkBlue;
254        GameObject taustakuva = new GameObject(Screen.Width, Screen.Height);
255        taustakuva.Image = tausta;
256        Add(taustakuva, -2);
257        Level.Background.FitToLevel();
258        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
259    }
260    void luoKentta()
261    {
262        TileMap kentta = TileMap.FromFile("kentta1.txt");
263
264        kentta.SetTileMethod('*', lisaaTahti);
265        kentta.SetTileMethod('M', lisaaPelaaja);
266        kentta.SetTileMethod('O', lisaaMaankamara);
267        kentta.SetTileMethod('S', lisaaMaa);
268        kentta.SetTileMethod('J', lisaaJetpak);
269        kentta.SetTileMethod('E', lisaaES);
270        kentta.SetTileMethod('L', lisaaLaatikko);
271        kentta.SetTileMethod('K', lisaaKitara);
272        kentta.SetTileMethod('m', lisaaMaali);
273        kentta.SetTileMethod('l', lisaaloukku);
274        kentta.SetTileMethod('t', lisaaMaali2);
275        kentta.SetTileMethod('j', lisaaJuusto);
276        kentta.SetTileMethod('I', lisaaIsoLoukku);
277        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
278
279        Level.CreateBorders();
280        Level.BackgroundColor = Color.DarkBlue;
281        GameObject taustakuva = new GameObject(Screen.Width, Screen.Height);
282        taustakuva.Image = tausta;
283        Add(taustakuva, -2);
284        Level.Background.FitToLevel();
285        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
286       
287       
288    }
289
290    void luokentta2()
291    {
292        TileMap kentta2 = TileMap.FromFile("kentta2a.txt");
293
294        kentta2.SetTileMethod('*', lisaaTahti);
295        kentta2.SetTileMethod('M', lisaaPelaaja);
296        kentta2.SetTileMethod('O', lisaaMaankamara);
297        kentta2.SetTileMethod('S', lisaaMaa);
298        kentta2.SetTileMethod('J', lisaaJetpak);
299        kentta2.SetTileMethod('E', lisaaES);
300        kentta2.SetTileMethod('L', lisaaLaatikko);
301        kentta2.SetTileMethod('K', lisaaKitara);
302        kentta2.SetTileMethod('m', lisaaMaali);
303        kentta2.SetTileMethod('l', lisaaloukku);
304        kentta2.SetTileMethod('t', lisaaMaali2);
305        kentta2.SetTileMethod('R', lisaaKivi);
306        kentta2.SetTileMethod('s', lisaaSeina);
307        kentta2.SetTileMethod('j', lisaaJuusto);
308        kentta2.SetTileMethod('P', lisaaESplus);
309        kentta2.SetTileMethod('k', lisaakyltti);
310        kentta2.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
311
312        Level.CreateBorders();
313 
314
315
316        Level.BackgroundColor = Color.Charcoal;
317        GameObject taustakuva = new GameObject(Screen.Width, Screen.Height);
318        taustakuva.Image = luolaTausta;
319        Level.Background.FitToLevel();
320        Add(taustakuva, -2);
321       
322        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
323        Add(hajotus);
324        Add(hajotus2);
325    }
326
327    void luokentta3()
328    {
329        TileMap kentta3 = TileMap.FromFile("kentta2b.txt");
330
331        kentta3.SetTileMethod('*', lisaaTahti);
332        kentta3.SetTileMethod('M', lisaaPelaaja);
333        kentta3.SetTileMethod('O', lisaaMaankamara);
334        kentta3.SetTileMethod('S', lisaaMaa);
335        kentta3.SetTileMethod('J', lisaaJetpak);
336        kentta3.SetTileMethod('E', lisaaES);
337        kentta3.SetTileMethod('L', lisaaLaatikko);
338        kentta3.SetTileMethod('K', lisaaKitara);
339        kentta3.SetTileMethod('m', lisaaMaali);
340        kentta3.SetTileMethod('l', lisaaloukku);
341        kentta3.SetTileMethod('t', lisaaMaali2);
342        kentta3.SetTileMethod('R', lisaaKivi);
343        kentta3.SetTileMethod('s', lisaaSeina);
344        kentta3.SetTileMethod('j', lisaaJuusto);
345        kentta3.SetTileMethod('r', lisaaKallio);
346        kentta3.SetTileMethod('P', lisaaESplus);
347        kentta3.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
348
349        kentta3.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
350
351        PhysicsObject vasenReuna = Level.CreateLeftBorder();
352        vasenReuna.IsVisible = false;
353
354        PhysicsObject oikeaReuna = Level.CreateRightBorder();
355        oikeaReuna.IsVisible = false;
356
357        PhysicsObject ylaReuna = Level.CreateTopBorder();
358        ylaReuna.IsVisible = false;
359
360        Level.BackgroundColor = Color.DarkBlue;
361        GameObject taustakuva = new GameObject(Screen.Width, Screen.Height);
362        taustakuva.Image = vuoretTausta;
363        Level.Background.FitToLevel();
364        Add(taustakuva, -2);
365        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
366        Add(hajotus);
367        Add (hajotus2);
368    }
369
370    void luokentta4()
371    {
372        Level.BackgroundColor = Color.White;
373        GameObject taustakuva = new GameObject(Screen.Width, Screen.Height);
374        taustakuva.Image = lopetusnaytto;
375        Level.Background.FitToLevel();
376        Add(taustakuva, -2);
377        Layers[-2].RelativeTransition = new Vector(0.1, 0.1);
378    }
379
380    #endregion
381
382    void lisaaKivi(Vector paikka, double leveys, double korkeus)
383    {
384        PhysicsObject kivi = PhysicsObject.CreateStaticObject(50, 50);
385        kivi.Image = Kivi;
386        kivi.Tag = "KIVI";
387        kivi.Position = paikka;
388        Add(kivi);
389    }
390
391    void lisaaSeina(Vector paikka, double leveys, double korkeus)
392    {
393        PhysicsObject seina = PhysicsObject.CreateStaticObject(400, 800);
394        seina.IgnoresCollisionResponse = true;
395        seina.Image = multaseina;
396        seina.Tag = "Seina";
397        seina.Position = paikka;
398
399        Add(seina, -1);
400    }
401   
402    void lisaaJuusto(Vector paikka, double leveys, double korkeus)
403    {
404        PhysicsObject juusto = PhysicsObject.CreateStaticObject(90, 70);
405        juusto.IgnoresCollisionResponse = true;
406        juusto.Image = Juusto;
407        juusto.Tag = "Juusto";
408        juusto.Position = paikka;
409        Add(juusto);
410    }
411
412    void lisaakyltti(Vector paikka, double leveys, double korkeus)
413    {
414        PhysicsObject kyltti = PhysicsObject.CreateStaticObject(85, 120);
415        kyltti.IgnoresCollisionResponse = true;
416        kyltti.Image = Kyltti;
417        kyltti.Tag = "Kyltti";
418        kyltti.Position = paikka;
419
420
421        Add(kyltti);
422    }
423
424    void lisaaESplus(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject ESplus = PhysicsObject.CreateStaticObject(90, 90);
427        ESplus.IgnoresCollisionResponse = true;
428        ESplus.Image = Plussa;
429        ESplus.Tag = "ESplus";
430        ESplus.Position = paikka;
431        Add(ESplus);
432    }
433
434    void lisaaLaatikko(Vector paikka, double leveys, double korkeus)
435    {
436        PhysicsObject laatikko = PhysicsObject.CreateStaticObject(200, 200);
437        laatikko.Image = lootikko;
438        laatikko.Tag = "laatikko";
439        laatikko.Position = paikka;
440        Add(laatikko);
441    }
442
443    void lisaaloukku(Vector paikka, double leveys, double korkeus)
444    {
445        PhysicsObject loukku = new PhysicsObject(110, 115);
446        loukku.Image = vasenlookku;
447        loukku.IgnoresCollisionResponse = true;
448        loukku.IgnoresGravity = true;
449        loukku.Tag = "vasenloukku";
450        loukku.Shape = Shape.FromImage(vasenlookku);
451
452        Timer vartiointi = new Timer();
453        vartiointi.Interval = 0.1;
454        vartiointi.Timeout += delegate { vihollishyokkaus(loukku, vartiointi); };
455        vartiointi.Start();
456        AddCollisionHandler(loukku, delegate(PhysicsObject l, PhysicsObject kohde) { LoukkuOsuu(loukku, kohde, vartiointi); });
457        loukku.Position = paikka;
458        Add(loukku);
459    }
460
461    void lisaaIsoLoukku(Vector paikka, double leveys, double korkeus)
462    {
463        Loukku isoLoukku = new Loukku(350, 350);
464        isoLoukku.Image = vasenlookku;
465        isoLoukku.IgnoresCollisionResponse = true;
466        isoLoukku.IgnoresGravity = true;
467        isoLoukku.Tag = "isoVasenLoukku";
468        isoLoukku.Shape = Shape.FromImage(vasenlookku);
469
470        Timer isoVartiointi = new Timer();
471        isoVartiointi.Interval = 0.1;
472        isoVartiointi.Timeout += delegate { isoVihollishyokkaus(isoLoukku); };
473        isoVartiointi.Start();
474        //AddCollisionHandler(isoLoukku, delegate(PhysicsObject l, PhysicsObject kohde) { isoLoukkuOsuu(isoLoukku, kohde, isoVartiointi); });
475        isoLoukku.Position = paikka;
476        Add(isoLoukku, 3);
477
478        isoLoukku.HyokkaysTimer = isoVartiointi;
479    }
480
481    void lisaaoikealoukku(Vector paikka, double leveys, double korkeus)
482    {
483        PhysicsObject oikealoukku = PhysicsObject.CreateStaticObject(60, 60);
484        oikealoukku.Image = lookku;
485        oikealoukku.Tag = "loukku";
486        oikealoukku.Position = paikka;
487        Add(oikealoukku);
488    }
489    void lisaaKitara(Vector paikka, double leveys, double korkeus)
490    {
491        PhysicsObject kitara = PhysicsObject.CreateStaticObject(65, 120);
492        kitara.IgnoresCollisionResponse = true;
493        kitara.Image = Kiitara;
494        kitara.Tag = "Kitara";
495        kitara.Position = paikka;
496        Add(kitara);
497    }
498
499    void lisaaTahti(Vector paikka, double leveys, double korkeus)
500    {
501        PhysicsObject tahti = PhysicsObject.CreateStaticObject(70, 60);
502        tahti.IgnoresCollisionResponse = true;
503        tahti.Shape = Shape.Rectangle;
504        tahti.Image = tahtiKuva;
505        tahti.Tag = "tahti";
506        tahti.Position = paikka;
507        Add(tahti);
508    }
509
510    void lisaaMaankamara(Vector paikka, double leveys, double korkeus)
511    {
512        PhysicsObject maankamara = PhysicsObject.CreateStaticObject(40, 40);
513        maankamara.Image = ruohikko;
514        maankamara.Position = paikka;
515        maankamara.Tag = "maankamara";
516        Add(maankamara);
517    }
518
519    void lisaaMaa(Vector paikka, double leveys, double korkeus)
520    {
521        PhysicsObject maa = PhysicsObject.CreateStaticObject(40, 40);
522        maa.Image = multa;
523        maa.Position = paikka;
524        maa.Tag = "maa";
525        Add(maa);
526    }
527    void lisaaKallio(Vector paikka, double leveys, double korkeus)
528    {
529        PhysicsObject Kallio = PhysicsObject.CreateStaticObject(40, 40);
530        Kallio.Image = kallio;
531        Kallio.Position = paikka;
532        Kallio.Tag = "Kallio";
533        Add(Kallio);
534    }
535
536    void lisaaJetpak(Vector paikka, double leveys, double korkeus)
537    {
538        PhysicsObject jetpak = PhysicsObject.CreateStaticObject(65, 90);
539        jetpak.IgnoresCollisionResponse = true;
540        jetpak.Image = Jetpack;
541        jetpak.Tag = "jetpak";
542        jetpak.Position = paikka;
543        Add(jetpak);
544    }
545
546    void lisaaES(Vector paikka, double leveys, double korkeus)
547    {
548        PhysicsObject es = PhysicsObject.CreateStaticObject(40, 80);
549        es.Image = Polttoaine;
550        es.IgnoresCollisionResponse = true;
551        es.Tag = "ES";
552        es.Position = paikka;
553        Add(es);
554    }
555
556    void lisaaMaali(Vector paikka, double leveys, double korkeus)
557    {
558        PhysicsObject maali = PhysicsObject.CreateStaticObject(100, 120);
559        maali.IgnoresCollisionResponse = true;
560        maali.Shape = Shape.FromImage(Maaali);
561        maali.Image = Maaali;
562        maali.Tag = "Maali";
563        maali.Position = paikka;
564        Add(maali);
565    }
566
567    void lisaaMaali2(Vector paikka, double leveys, double korkeus)
568    {
569        PhysicsObject Maali2 = PhysicsObject.CreateStaticObject(100, 120);
570        Maali2.IgnoresCollisionResponse = true;
571        Maali2.Shape = Shape.FromImage(Maaali);
572        Maali2.Image = Maaali;
573        Maali2.Tag = "Maali2";
574        Maali2.Position = paikka;
575        Add(Maali2);
576    }
577
578    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
579    {
580        pelaaja1 = new PlatformCharacter(80, 120);
581        pelaaja1.CollisionIgnoreGroup = 1;
582        pelaaja1.Tag = "pelaaja";
583        PelaajanAnimaatiot();
584        pelaaja1.Mass = 4.0;
585        AddCollisionHandler(pelaaja1, osuTahteen);
586        AddCollisionHandler(pelaaja1, osuJetpakiin);
587        AddCollisionHandler(pelaaja1, "laatikko", osuLaatikkoon);
588        AddCollisionHandler(pelaaja1, osuKitaraan);
589        AddCollisionHandler(pelaaja1, osuMaaliin);
590        AddCollisionHandler(pelaaja1, osuToiseenMaaliin);
591        AddCollisionHandler(pelaaja1, "Juusto", CollisionHandler.AddMeterValue(Elama, 5));
592        AddCollisionHandler(pelaaja1, "Juusto", CollisionHandler.DestroyTarget);
593        AddCollisionHandler(pelaaja1, osuKylttiin);
594        AddCollisionHandler(pelaaja1, maassa);
595
596       
597        if (onkoJetPak)
598        {
599            AddCollisionHandler(pelaaja1, osuES);
600        }
601
602
603
604        AddCollisionHandler(pelaaja1, osuLoukkuun);
605        AddCollisionHandler(pelaaja1, osuIsoonLoukkuun);
606        //pelaaja1.Shape = Shape.Circle;
607        pelaaja1.Position = paikka;
608        Add(pelaaja1, 1);
609    }
610
611    void PelaajanAnimaatiot()
612    {
613        pelaaja1.AnimWalk = new Animation(pelaajanKavelykuvatOikea);
614        pelaaja1.AnimWalk.FPS = 10;
615        pelaaja1.AnimIdle = new Animation(pelaajanKuvaOikea);
616        pelaaja1.AnimIdle.FPS = 1;
617    //    pelaaja1.AnimFall = new Animation(pelaajanKuvaOikea);
618    //    pelaaja1.AnimFall.FPS = 1;
619        pelaaja1.Image = pelaajanKuvaOikea;
620
621        SkipFrame = true;
622
623        Image[] lento = new Image[]{Pelaajalentaa};
624
625        LentoAnimaatio = new Animation(lento);
626
627    }
628
629    void lisaaNappaimet()
630    {
631        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
632        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
633
634        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
635        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
636        Keyboard.Listen(Key.X, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
637        if (onkoJetPak)
638        {
639            Keyboard.Listen(Key.Up, ButtonState.Down, kaytajetpak, "Käyttää Jetpakiä", pelaaja1, lentonopeus);
640            Keyboard.Listen(Key.Up, ButtonState.Released, PelaajanAnimaatiot, "Lopettaa lennon");
641
642            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, kaytajetpak, "Käyttää Jetpakiä", pelaaja1, lentonopeus);
643            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, PelaajanAnimaatiot, "Lopettaa lennon");
644        }
645                             
646        ControllerOne.Listen(Button.X, ButtonState.Pressed, hakkaa, "Hakkaa kitaralla", pelaaja1);                 
647        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");                                   
648        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
649        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
650        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
651    }
652
653    void lisaaESmittari(double esMaara)
654    {
655        ESmittari = LuoESmittari(600, 500, esMaara);
656        Label ES = new Label("ES");
657        ES.X = 300;
658        ES.Y = 380;
659        ES.TextColor = Color.LightGreen;
660        ES.BorderColor = Color.Blue;
661        ES.Color = Color.DarkBlue;
662
663        Add(ES);
664    }
665
666    DoubleMeter LuoESmittari(double x, double y, double esMaara)
667    {
668        DoubleMeter mittari = new DoubleMeter(esMaara);
669        Label naytto = new Label();
670        naytto.BindTo(mittari);
671        naytto.X = 300;
672        naytto.Y = 350;
673        naytto.TextColor = Color.LightGreen;
674        naytto.BorderColor = Color.Blue;
675        naytto.Color = Color.DarkBlue;
676        mittari.MaxValue = 20;
677        Add(naytto);
678        return mittari;
679
680
681
682    }
683    void lisaaKeppimittari()
684    {
685       
686        Label klapit = new Label("Klapit");
687        klapit.X = -300;
688        klapit.Y = 380;
689        klapit.TextColor = Color.LightGreen;
690        klapit.BorderColor = Color.Blue;
691        klapit.Color = Color.DarkBlue;
692        Add(klapit);
693
694        LuoKeppiMittari();
695    }
696
697    void LuoKeppiMittari()
698    {
699       
700        Label keppinaytto = new Label();
701        keppinaytto.BindTo(kepit);
702        keppinaytto.X = -300;
703        keppinaytto.Y = 350;
704        keppinaytto.TextColor = Color.LightGreen;
705        keppinaytto.BorderColor = Color.Blue;
706        keppinaytto.Color = Color.DarkBlue;
707
708        Add(keppinaytto);
709
710    }
711
712    void lisaaElamamittari()
713    {
714        Label enu = new Label("Terveys");
715        enu.X = 0;
716        enu.Y = 380;
717        enu.TextColor = Color.LightGreen;
718        enu.BorderColor = Color.Blue;
719        enu.Color = Color.DarkBlue;
720        Add(enu);
721
722        LuoElamaMittari();
723    }
724
725    void LuoElamaMittari()
726    {
727        Label nautto = new Label();
728        nautto.BindTo(Elama);
729        nautto.X = 0;
730        nautto.Y = 350;
731        nautto.TextColor = Color.LightGreen;
732        nautto.BorderColor = Color.Blue;
733        nautto.Color = Color.DarkBlue;
734        Add(nautto);
735    }
736
737    void kaytajetpak(PlatformCharacter hahmo, double nopeus)
738    {
739        if (ESmittari.Value > 0.0)
740        {
741            hahmo.Push(new Vector(0, nopeus));
742            ESmittari.Value -= 0.035;
743            pelaaja1.AnimWalk = null;
744            pelaaja1.AnimIdle = null;
745            pelaaja1.PlayAnimation(LentoAnimaatio);
746        }
747    }
748
749    void hakkaa(PlatformCharacter hahmo)
750    {
751        pelaaja1.Width = 170;
752
753        pelaaja1.AnimIdle = null;
754        pelaaja1.AnimWalk = null;
755
756        //pelaaja1.
757        if (!onkoilmassa)
758        {
759            Keyboard.Disable(Key.Down);
760            Keyboard.Disable(Key.Left);
761            Keyboard.Disable(Key.Right);
762            Keyboard.Disable(Key.Space);
763            Keyboard.Disable(Key.Up);
764
765            pelaaja1.Velocity = new Vector(0, 0);
766        }
767
768        if (pelaaja1.FacingDirection == Direction.Left)
769        {
770            //pelaaja1.Image = masahakkaaVasen;
771            pelaaja1.Image = masahakkaaOikea;
772            pelaaja1.Shape = Shape.FromImage(masahakkaaVasen);
773        }
774        else
775        {
776            pelaaja1.Image = masahakkaaOikea;
777            pelaaja1.Shape = Shape.FromImage(masahakkaaOikea);
778        }
779
780
781        Timer.SingleShot(0.11, ajastinlaukesi);
782    }
783
784    void ajastinlaukesi()
785    {
786        if (pelaaja1.FacingDirection == Direction.Left)
787        {
788            pelaaja1.Image = masahakkaaOikeaPAM;
789            pelaaja1.Shape = Shape.FromImage(masahakkaaVasenTUM);
790        }
791        else
792        {
793            pelaaja1.Image = masahakkaaOikeaPAM;
794            pelaaja1.Shape = Shape.FromImage(masahakkaaOikeaPAM);
795        }
796
797        masaLyo = true;
798        Timer.SingleShot(0.06, toinenAjastinlaukesi);
799        Timer.SingleShot(0.135, vielYksAjastinlaukesi);
800    }
801   
802    void toinenAjastinlaukesi()
803    {
804        PelaajanAnimaatiot();
805        pelaaja1.Width = 75;
806        masaLyo = false;
807
808        if (masaKatsooOikealle)
809        {
810            pelaaja1.Shape = Shape.FromImage(pelaajanKuvaOikea);
811        }
812        else
813        {
814            pelaaja1.Shape = Shape.FromImage(pelaajanKuvaVasen);
815        }
816    }
817
818    void vielYksAjastinlaukesi()
819{
820    Keyboard.EnableAll();
821}
822
823    void liikuta(PlatformCharacter hahmo, double nopeus)
824    {
825        if (!SkipFrame)
826        {
827            if (nopeus < 0)
828                masaKatsooOikealle = false;
829            else
830                masaKatsooOikealle = true;
831
832            if (Liikeesto != Math.Sign(nopeus)) 
833            {
834                if (Liikeesto == 1)
835                {
836                    hahmo.Walk(nopeus + Liikeesto * nopeus * 1.53);
837                }
838
839                else if (Liikeesto == -1)
840                {
841                    hahmo.Walk((nopeus - Liikeesto * nopeus * 1.53));
842                }
843                else
844                {
845                    hahmo.Walk(nopeus);
846                }
847            }
848           
849        }
850        else SkipFrame = false;
851        if (masaKatsooOikealle)
852        {
853            pelaaja1.Shape = Shape.FromImage(pelaajanKuvaOikea);
854        }
855        else
856        {
857            pelaaja1.Shape = Shape.FromImage(pelaajanKuvaVasen);
858        }
859    }
860   //IntMeter hyppyvoima = new IntMeter(18);
861    void hyppaa(PlatformCharacter hahmo, double nopeus)
862    {
863
864        onkoilmassa = hahmo.Jump(nopeus);
865
866        if (!onkoilmassa)
867        {
868            PhysicsObject seina = etsiviereinenseina(hahmo);
869            if (seina != null)
870            {
871                Timer ajastin = new Timer();
872                Timer ajastin2 = new Timer();
873                ajastin.Interval = 0.001;
874                ajastin.Timeout += delegate()
875                {
876                    Vector vastasuunta = Math.Sign(hahmo.X - seina.X) * Vector.UnitX * 200;
877                    //hahmo.Hit(new Vector(Math.Sign(vastasuunta.X) * 50, 50));
878                    hahmo.Velocity = new Vector(Math.Sign(vastasuunta.X) * 756, 848);
879                    Liikeesto = -Math.Sign(vastasuunta.X);
880                };
881                ajastin.Start();
882                ajastin2.Start();
883                Timer.SingleShot(0.25, delegate() {
884                    ajastin.Stop(); 
885                   
886                });
887                Timer.SingleShot(0.62, delegate()
888                {
889                    Liikeesto = 0;
890                });
891                //onkoilmassa = hahmo.Jump(nopeus);
892                //hahmo.ForceJump(vastasuunta.Y * 100000);
893            }
894        }
895        //else if (!onkoilmassa)
896        //{
897        //    onkoilmassa = hahmo.Jump(nopeus);
898        //}
899
900        //tätä ei ehkä tarvi:
901     //   if (hahmo.Jump(nopeus)) hyppyvoima = new IntMeter(18);
902       // else if (hyppyvoima.Value-- > 0) hahmo.ForceJump(35);
903    }
904
905    PhysicsObject etsiviereinenseina(PlatformCharacter hahmo)
906    {
907        double etaisyys = (hahmo.FacingDirection == Direction.Left ? -hahmo.Width : hahmo.Width) * 0.5;
908        return (PhysicsObject)GetFirstObject(olio =>
909            (
910                (Math.Abs(olio.Y - hahmo.Y) < hahmo.Height) &&
911                (Math.Abs(olio.X - (hahmo.X + etaisyys)) < olio.Width / 2 ) &&
912                (olio is PhysicsObject) &&
913                (double.IsInfinity(((PhysicsObject)olio).Mass))
914            )
915        );
916    }
917
918    void maassa(PhysicsObject hahmo, PhysicsObject kohde)
919    {
920        if
921        (kohde.Y < pelaaja1.Y)
922        {
923            onkoilmassa = false;
924        }
925
926    }
927
928
929    void vihollishyokkaus(PhysicsObject loukku, Timer ajastin)
930    {
931        // pelaajan pitää olla loukun vasemmalla puolella 300:n päässä
932        if (loukku.X - pelaaja1.X > 0 && loukku.X - pelaaja1.X < 400 && loukku.Y - pelaaja1.Y < 140 && loukku.Y - pelaaja1.Y > -140)
933        {
934            if (loukku.Image == vasenlookku)
935            {
936                // loukkua pitää nostaa hieman kun alottaa hyökkäyksen,
937                // jottei raavi maata ja jää jumiin
938                loukku.Y = loukku.Y + 25;
939            }
940
941            loukku.Velocity = new Vector(-1000, 0);
942            loukku.Shape = Shape.FromImage(loukkuhyokkausvasen);
943            loukku.Height = 150;
944            loukku.Image = loukkuhyokkausvasen;
945        }
946    }
947
948    void isoVihollishyokkaus(Loukku isoLoukku)
949    {
950        if ( isoLoukku.X - pelaaja1.X > 0 && isoLoukku.X - pelaaja1.X < 550 && isoLoukku.Y - pelaaja1.Y < 540 && isoLoukku.Y - pelaaja1.Y > -300)
951        {
952
953            //hyokkayskaynnissa = true;
954            PhysicsObject Ylaosa = new PhysicsObject(400, 100);
955            Ylaosa.IgnoresCollisionResponse = true;
956            Ylaosa.IgnoresGravity = true;
957            Ylaosa.Velocity = new Vector(-650, 0);
958            Ylaosa.Image = ylaosa;
959            Ylaosa.Shape = Shape.FromImage(ylaosator);
960            Ylaosa.Tag = "Ylaosa";
961            Ylaosa.X = isoLoukku.X -= 0;
962            Ylaosa.Y = isoLoukku.Y += 300;
963            Add(Ylaosa, 3);
964            PhysicsObject Alaosa = new PhysicsObject(400,150);
965            Alaosa.Shape = Shape.FromImage(alaosator);
966            Alaosa.Image = alaosa;
967            Alaosa.Velocity = new Vector(-650, 0);
968            Alaosa.IgnoresCollisionResponse = true;
969            Alaosa.IgnoresGravity = true;
970            Alaosa.Tag = "Alaosa";
971            Alaosa.X = isoLoukku.X;
972            Alaosa.Y = isoLoukku.Y - 400;
973            Add (Alaosa, 3);
974
975            isoLoukku.X += 8;
976            isoLoukku.Y -= 185;
977            isoLoukku.Velocity = new Vector(-650, 0);
978           
979            isoLoukku.Height = 280;
980            isoLoukku.Width = 400;
981            isoLoukku.Image = isoloukkuhyokkausvasen;
982           
983            isoLoukku.HyokkaysTimer.Stop();
984           
985        }
986    }
987
988    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
989    {
990        if (kohde.Tag.ToString() == "tahti")
991        {
992            kepit.Value += 1;
993            kohde.Destroy();
994        }
995
996    }
997    void osuPlussaan(PhysicsObject hahmo, PhysicsObject kohde)
998    {
999      //  if (kohde.Tag.ToString() == "ESplus")
1000        //{
1001          //  mittari.MaxValue += 10;
1002
1003 //       }
1004    }
1005
1006    void osuJuustoon(PhysicsObject hahmo, PhysicsObject kohde)
1007    {
1008        if (kohde.Tag.ToString() == "Juusto")
1009        {
1010            Elama.Value += 5;
1011            kohde.Destroy();
1012        }
1013    }
1014
1015    void osuLoukkuun(PhysicsObject hahmo, PhysicsObject kohde)
1016    {
1017        if (kohde.Tag.ToString() == "vasenloukku" && (masaLyo == true) || (kohde.Tag.ToString() == "loukkuJumissa" && (masaLyo == true)))
1018        {
1019           
1020
1021
1022            int pMaara = 50;
1023            double x = kohde.X;
1024            double y = kohde.Y;
1025
1026            hajotus2.AddEffect(x, y, pMaara);
1027            kohde.Destroy();
1028        }
1029        else if (kohde.Tag.ToString() == "vasenloukku")
1030        {
1031
1032            Timer ajastin = new Timer();
1033            Elama.Value -= 2.5;
1034            Timer.SingleShot(0.01, delegate()
1035
1036            {
1037                Keyboard.Disable(Key.Down);
1038                Keyboard.Disable(Key.Left);
1039                Keyboard.Disable(Key.Right);
1040                Keyboard.Disable(Key.Space);
1041                Keyboard.Disable(Key.Up);
1042               
1043                ajastin.Interval = 0.001;
1044                ajastin.Timeout += delegate() { pelaaja1.Velocity = new Vector(-700, 750);  };
1045                ajastin.Start();
1046             
1047            });
1048
1049            Timer.SingleShot(0.24745, delegate()
1050            {
1051                ajastin.Stop();
1052                Keyboard.EnableAll();
1053                //Gravity = new Vector(0, -2800);
1054            });
1055        }
1056
1057
1058        else if (kohde.Tag.ToString() == "loukku")
1059        {
1060            Elama.Value -= 2.5;
1061        }
1062        if (Elama.Value == 0)
1063        {
1064            //aloitapeli(kenttatilanne);
1065            Begin();
1066        }
1067
1068    }
1069
1070    void osuIsoonLoukkuun(PhysicsObject hahmo, PhysicsObject kohde)
1071    {
1072        if (kohde.Tag.ToString() == "Alaosa" || kohde.Tag.ToString() == "Ylaosa")
1073        {
1074            Timer Ajastin = new Timer();
1075            Elama.Value -= 3.5;
1076            Timer.SingleShot (0.01, delegate()
1077           
1078           {
1079               Keyboard.Disable(Key.Down);
1080               Keyboard.Disable(Key.Left);
1081               Keyboard.Disable(Key.Right);
1082               Keyboard.Disable(Key.Space);
1083               Keyboard.Disable(Key.Up);
1084            pelaaja1.Velocity = new Vector(0, 0);
1085
1086            Ajastin.Interval = 0.001;
1087            Ajastin.Timeout += delegate() { pelaaja1.Velocity = new Vector(-700, 750); };
1088            Ajastin.Start();
1089
1090            Timer.SingleShot(0.24745, delegate()
1091         {
1092
1093             Ajastin.Stop();
1094             Keyboard.EnableAll();
1095
1096             Gravity = new Vector(0, -2800);
1097         });
1098           });
1099            Timer.SingleShot(0.35, delegate()
1100            {
1101                Keyboard.EnableAll();
1102            });
1103
1104        }
1105        if (Elama.Value <= 0)
1106        {
1107            Begin();
1108        }
1109    }
1110
1111    void LoukkuOsuu(PhysicsObject loukku, PhysicsObject kohde, Timer ajastin)
1112    {
1113        if (kohde != pelaaja1 && !kohde.Tag.Equals("maankamara") && !kohde.Tag.Equals(""))
1114        {
1115            loukku.Velocity = new Vector(0, 0);
1116            ajastin.Stop();
1117
1118
1119            loukku.MakeStatic();
1120            //loukku.Shape = Shape.Rectangle;
1121            loukku.Shape = Shape.FromImage (loukkutör);
1122            loukku.IgnoresCollisionResponse = false;
1123            loukku.Tag = "loukkuJumissa";
1124        }
1125
1126    }
1127
1128
1129    void osuKitaraan(PhysicsObject hahmo, PhysicsObject kohde)
1130    {
1131        if (kohde.Tag.ToString() == "Kitara")
1132        {
1133            Label label = new Label("Masa majava: Kitara...mitä minä tällä tekisin? Soittaisin musiikkia?");
1134            label.TextColor = Color.Black;
1135            label.Color = Color.White;
1136            Label label2 = new Label("Masa majava: Hei! Nyt keksin! Painamalla 'Alas' minä voisin...");
1137            label2.TextColor = Color.Black;
1138            label2.Color = Color.White;
1139            //Add(label);
1140            Timer.SingleShot(4, delegate()
1141            {
1142                label.Destroy();
1143           //     Add(label2);
1144            }
1145            );
1146            Timer.SingleShot(8, label2.Destroy);
1147
1148            Keyboard.Listen(Key.Z, ButtonState.Pressed, hakkaa, "Hakkaa kitaralla", pelaaja1);
1149            kohde.Destroy();
1150        }
1151    }
1152
1153    void osuLaatikkoon(PhysicsObject hahmo, PhysicsObject kohde)
1154    {
1155        if (!masaLyo)
1156        {
1157            hahmo.Hit(new Vector(-Math.Sign(kohde.X - hahmo.X) * 100, 0));
1158            return;
1159        }
1160       
1161
1162
1163        int pMaara = 50;
1164        double x = kohde.X;
1165        double y = kohde.Y;
1166
1167        hajotus.AddEffect(x, y, pMaara);
1168
1169
1170        Label label = new Label("Masa majava: Siitäs sait, tyhmä loota.");
1171        label.TextColor = Color.Black;
1172        label.Color = Color.White;
1173       // Add(label);
1174        Timer.SingleShot(3, delegate()
1175        {
1176            label.Destroy();
1177        });
1178
1179
1180        kohde.Destroy();
1181    }
1182
1183
1184    void osuJetpakiin(PhysicsObject hahmo, PhysicsObject kohde)
1185    {
1186        if (kohde.Tag.ToString() == "jetpak")
1187        {
1188            onkoJetPak = true;
1189
1190            Label label = new Label("Masa majava: Voi pojat, jetpack! Tällähän voi lentää painamalla 'Ylös'!");
1191            label.TextColor = Color.Black;
1192            label.Color = Color.White;
1193            lisaaESmittari(0);
1194
1195            Label label2 = new Label("Masa majava: Siihen tarvitaan vain hieman ES polttoaineeksi!");
1196            label2.TextColor = Color.Black;
1197            label2.Color = Color.White;
1198            //Add(label);
1199            Timer.SingleShot(3, delegate()
1200            {
1201                label.Destroy();
1202                //Add(label2);
1203            }
1204            );
1205
1206            Timer.SingleShot(3, label2.Destroy);
1207            Label jetpak = new Label("Energiajuoma");
1208            jetpak.X = 300;
1209            jetpak.Y = 380;
1210            jetpak.TextColor = Color.LightGreen;
1211            jetpak.BorderColor = Color.Blue;
1212            jetpak.Color = Color.DarkBlue;
1213            Add(jetpak);
1214
1215            kohde.Destroy();
1216            AddCollisionHandler(pelaaja1, osuES);
1217            Keyboard.Listen(Key.Up, ButtonState.Down, kaytajetpak, "Käyttää Jetpakiä", pelaaja1, lentonopeus);
1218            Keyboard.Listen(Key.Up, ButtonState.Released, PelaajanAnimaatiot, "Lopettaa lennon");
1219            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, kaytajetpak, "Käyttää Jetpakiä", pelaaja1, lentonopeus);
1220            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, PelaajanAnimaatiot, "Lopettaa lennon");
1221        }
1222    }
1223
1224    void osuES(PhysicsObject hahmo, PhysicsObject kohde)
1225    {
1226        if (kohde.Tag.ToString() == "ES")
1227        {
1228
1229           
1230            kohde.Destroy();
1231            ESmittari.Value += 5;
1232        }
1233    }
1234
1235    void osuMaaliin(PhysicsObject hahmo, PhysicsObject kohde)
1236    {
1237        if (kohde.Tag.ToString() == "Maali")
1238        {
1239            kenttatilanne += 1;
1240           
1241            //Timer zoomaaja = new Timer();
1242          //  zoomaaja.Interval = 0.00000001;
1243       //     zoomaaja.Timeout += teeSiirtyma;
1244     //       zoomaaja.Start();
1245            //teeSiirtyma();
1246            aloitapeli(kenttatilanne);
1247        }
1248
1249    }
1250
1251    //double zoom = 1.005;
1252
1253    //private void teeSiirtyma()
1254    //{
1255   //     Camera.Zoom (zoom);
1256
1257
1258
1259    //}
1260    void osuToiseenMaaliin(PhysicsObject hahmo, PhysicsObject kohde)
1261    {
1262        if (kohde.Tag.ToString() == "Maali2")
1263        {
1264            kenttatilanne += 2;
1265            aloitapeli(kenttatilanne);
1266        }
1267    }
1268    void osuKylttiin(PhysicsObject hahmo, PhysicsObject kohde)
1269    {
1270        if (kohde.Tag.ToString() == "Kyltti")
1271        {
1272            Label label = new Label("Lehmät sanoo muu.");
1273            label.TextColor = Color.Black;
1274            label.Color = Color.White;
1275            Add(label);
1276            Label label2 = new Label("Masa majava: Mistä minä jetpakin tähän hätään saisin?");
1277            label2.TextColor = Color.Black;
1278            label2.Color = Color.White;
1279           Timer.SingleShot(3, delegate()
1280            {
1281                label.Destroy();
1282               // Add(label2);
1283                Timer.SingleShot(3, delegate()
1284                {
1285                    label2.Destroy();
1286                });
1287            });
1288        }
1289    }
1290}
1291
Note: See TracBrowser for help on using the repository browser.