source: 2011/23/mikmatla/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Peli.cs @ 1904

Revision 1904, 17.0 KB checked in by joaamaka, 9 years ago (diff)

testikettä lagi pois ja ovet "rahasuihkuun"

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class Nappi : PhysicsObject
10{
11    public char Merkki;
12
13    public Nappi(double leveys, double korkeus)
14        : base(leveys, korkeus)
15    {
16        MakeStatic();
17    }
18}
19
20
21public class Peli : PhysicsGame
22{
23    const double nopeus = 200;
24    const double hyppyNopeus = 900;
25    const int RUUDUN_KOKO = 40;
26
27    IntMeter pisteLaskuri;
28    Timer pisteAikaLaskuri;
29
30    List<Label> ValikonKohdat;
31
32    PlatformCharacter pelaaja1;
33
34    Image pelaajanKuva = LoadImage("Ukkeli");
35    Image tahtiKuva = LoadImage("Kolikko");
36
37    SoundEffect maaliAani = LoadSoundEffect("Coin Sound Effect");
38
39    public override void Begin()
40    {
41        Valikko();
42        MediaPlayer.Play("Musiikki");
43        MediaPlayer.IsRepeating = true;
44        IsFullScreen = true;
45    }
46
47    void AikaLoppui(Timer ajastin)
48    {
49        ValikonKohdat = new List<Label>();
50 
51            if (pisteLaskuri.Value > 570)
52            {
53                ajastin.Stop();
54                return;
55            }
56
57        Label kohta4 = new Label("Rahnaa tuli justiin sopivasti!");
58        kohta4.Position = new Vector(0, 0);
59        kohta4.TextColor = RandomGen.NextColor();
60        ValikonKohdat.Add(kohta4);
61        ajastin.Stop();
62
63        Timer.SingleShot(3, Valikko);
64
65        foreach (Label Valikonkohta in ValikonKohdat)
66            Add(Valikonkohta);
67    }
68
69    void LuoLaskuri()
70    {
71        pisteLaskuri = new IntMeter(0);
72
73        Label pisteNaytto = new Label();
74        pisteNaytto.X = Screen.Left + 100;
75        pisteNaytto.Y = Screen.Top - 100;
76        pisteNaytto.TextColor = Color.Turquoise;
77
78        pisteNaytto.BindTo(pisteLaskuri);
79        Add(pisteNaytto);
80
81        Label pisteTeksti = new Label("Pojot: ");
82        pisteTeksti.X = Screen.Left + 50;
83        pisteTeksti.Y = Screen.Top - 100;
84        pisteTeksti.TextColor = Color.SkyBlue;
85        Add(pisteTeksti);
86    }
87
88    void laskuriYlarajassa(int arvo)
89    {
90        Label Jee = new Label("Et vaan osaa...");
91        Jee.Position = new Vector(10, 0);
92        Jee.TextColor = RandomGen.NextColor();
93        Add(Jee);
94        Timer.SingleShot(1.5, Jee.Destroy);
95        Timer.SingleShot(2.0, Aloota);
96        nappejaVastaavatAjastimet.Clear();
97    }
98
99    void Aloota()
100    {
101        ClearAll();
102        ValikonKohdat = new List<Label>();
103        Level.Background.CreateGradient(Color.DarkGreen, Color.Black);
104
105        Label kohta1 = new Label("Testi Kenttä");
106        kohta1.Position = new Vector(0, 50);
107        kohta1.TextColor = Color.Wheat;
108        ValikonKohdat.Add(kohta1);
109
110        Label kohta2 = new Label("Kenttä 1");
111        kohta2.Position = new Vector(0, 00);
112        kohta2.TextColor = Color.Wheat;
113        ValikonKohdat.Add(kohta2);
114
115        Label kohta3 = new Label("Takaisin Valikkoon");
116        kohta3.Position = new Vector(0, -150);
117        kohta3.TextColor = Color.Wheat;
118        ValikonKohdat.Add(kohta3);
119
120
121        foreach (Label Valikonkohta in ValikonKohdat)
122            Add(Valikonkohta);
123
124        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AlootaK1, null);
125        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AlootaK2, null);
126        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Valikko, null);
127
128        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, null);
129        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AlootaK1, null);
130
131        Mouse.IsCursorVisible = true;
132        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
133    }
134
135    void AlootaK1()
136    {
137        ClearAll();
138
139        Gravity = new Vector(0, -1000);
140        nappejaVastaavatOvet = new Dictionary<char, List<PhysicsObject>>();
141        luoKentta();
142        lisaaNappaimet();
143        LuoLaskuri();
144
145        pisteLaskuri.MaxValue = 2265;
146        pisteLaskuri.UpperLimit += laskuriYlarajassa;
147
148        Camera.Follow(pelaaja1);
149        Camera.ZoomFactor = 1.2;
150        Camera.StayInLevel = true;
151    }
152
153    void AlootaK2()
154    {
155        ClearAll();
156
157        Gravity = new Vector(0, -1000);
158        nappejaVastaavatOvet = new Dictionary<char, List<PhysicsObject>>();
159        luoKentta2();
160        lisaaNappaimet();
161        LuoLaskuri();
162
163        pisteLaskuri.MaxValue = 700;
164        pisteLaskuri.UpperLimit += laskuriYlarajassa;
165
166        Camera.Follow(pelaaja1);
167        Camera.ZoomFactor = 1.2;
168        Camera.StayInLevel = true;
169    }
170
171    void Lopeta()
172    {
173        Exit();
174    }
175
176    void Credits()
177    {
178        ClearAll();
179        ValikonKohdat = new List<Label>();
180        Level.Background.CreateGradient(Color.DarkGreen, Color.Black);
181
182        Label kohta4 = new Label("Pelin ohjelmoi: Hra. Ankka");
183        kohta4.Position = new Vector(0, 300);
184        kohta4.TextColor = Color.Turquoise;
185        ValikonKohdat.Add(kohta4);
186
187        Label kohta5 = new Label("Pelaajan tekstuurit: Hra. Ankka");
188        kohta5.Position = new Vector(0, 250);
189        kohta5.TextColor = Color.Turquoise;
190        ValikonKohdat.Add(kohta5);
191
192        Label kohta6 = new Label("Musiikki: Ropocalypse 2");
193        kohta6.Position = new Vector(0, 200);
194        kohta6.TextColor = Color.Turquoise;
195        ValikonKohdat.Add(kohta6);
196
197        Label kohta7 = new Label("Kaikki muu ihmeellinen: Jyväskylän Yliopisto");
198        kohta7.Position = new Vector(0, 150);
199        kohta7.TextColor = Color.Turquoise;
200        ValikonKohdat.Add(kohta7);
201
202        Label kohta8 = new Label("Paitsi kolikko ääni joka kuuluu Mariolle");
203        kohta8.Position = new Vector(0, 100);
204        kohta8.TextColor = Color.Turquoise;
205        ValikonKohdat.Add(kohta8);
206
207        Label kohta1 = new Label("Takaisin Valikkoon");
208        kohta1.Position = new Vector(0, -100);
209        kohta1.TextColor = Color.Wheat;
210        ValikonKohdat.Add(kohta1);
211
212        foreach (Label Valikonkohta in ValikonKohdat)
213            Add(Valikonkohta);
214
215        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Valikko, null);
216
217        Mouse.IsCursorVisible = true;
218        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
219
220        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, null);
221        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Valikko, null);
222    }
223
224    void Valikko()
225    {
226        ClearAll();
227        nappejaVastaavatAjastimet.Clear();
228        Level.Background.CreateGradient (Color.DarkGreen, Color.Black);
229        ValikonKohdat = new List<Label>();
230
231        Label kohta1 = new Label("Aloita uus peli");
232        kohta1.Position = new Vector(0, 50);
233        kohta1.TextColor = Color.Wheat;
234        ValikonKohdat.Add(kohta1);
235
236        Label kohta2 = new Label("Lopeta");
237        kohta2.Position = new Vector(0, -50);
238        kohta2.TextColor = Color.Wheat;
239        ValikonKohdat.Add(kohta2);
240
241        Label kohta3 = new Label("Credits");
242        kohta3.Position = new Vector(0, 0);
243        kohta3.TextColor = Color.Wheat;
244        ValikonKohdat.Add(kohta3);
245
246        Label kohta4 = new Label("Rahan tuloa ei voi estäää~");
247        kohta4.Angle = RandomGen.NextAngle();
248        kohta4.TextColor = Color.DarkCyan;
249        kohta4.Position = new Vector(0, 200);
250        kohta4.Font = Font.DefaultLargeBold;
251        ValikonKohdat.Add(kohta4);
252
253        foreach (Label Valikonkohta in ValikonKohdat)
254            Add(Valikonkohta);
255
256        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloota, null);
257        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
258        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Credits, null);
259
260        Mouse.IsCursorVisible = true;
261        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
262        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null);
263        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Aloota, null);
264    }
265
266    void ValikossaLiikkuminen(AnalogState hiirenTila)
267    {
268        foreach (Label kohta in ValikonKohdat)
269        {
270            if (Mouse.IsCursorOn(kohta))
271            {
272                if (kohta.TextColor == Color.Wheat)
273                    kohta.TextColor = Color.YellowGreen;
274            }
275
276            else if (kohta.TextColor == Color.YellowGreen)
277            {
278                kohta.TextColor = Color.Wheat;
279            }
280        }
281    }
282
283    void luoKentta()
284    {
285        AlustaNappilista();
286        TileMap kentta = TileMap.FromFile("kentta1.txt");
287        kentta['#'] = lisaaTaso;
288        kentta['*'] = lisaaTahti;
289        kentta['N'] = lisaaPelaaja;
290        kentta['^'] = lisaaIlkea;
291        kentta['l'] = lisaaNappi_l;
292        kentta['L'] = lisaaOviL;
293        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
294        Level.CreateBorders();
295        Level.Background.CreateGradient (Color.White, Color.DarkGreen);
296    }
297
298    void luoKentta2()
299    {
300        AlustaNappilista();
301
302        TileMap kentta2 = TileMap.FromFile("kenttä2.txt");
303        kentta2['#'] = lisaaTaso;
304        kentta2['*'] = lisaaTahti;
305        kentta2['N'] = lisaaPelaaja;
306        kentta2['i'] = lisaaNappi_i;
307        kentta2['I'] = lisaaOviI;
308        kentta2['k'] = lisaaNappi_k;
309        kentta2['K'] = lisaaOviK;
310        kentta2['l'] = lisaaNappi_l;
311        kentta2['L'] = lisaaOviL;
312        kentta2['q'] = lisaaNappi_q;
313        kentta2['Q'] = lisaaOviQ;
314        kentta2['e'] = lisaaNappi_e;
315        kentta2['E'] = lisaaOviE;
316        kentta2['r'] = lisaaNappi_r;
317        kentta2['R'] = lisaaOviR;
318        kentta2['t'] = lisaaNappi_t;
319        kentta2['T'] = lisaaOviT;
320        kentta2['^'] = lisaaIlkea;
321        kentta2.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
322        Level.CreateBorders();
323        Level.Background.CreateGradient(Color.White, Color.DarkGreen);
324    }
325
326    private void AlustaNappilista()
327    {
328        for (char c = 'a'; c < 'z'; c++)
329        {
330            nappejaVastaavatOvet.Add(c, new List<PhysicsObject>());
331        }
332
333        for (char c = 'a'; c < 'z'; c++)
334        {
335            Timer sulkemisAjastin = new Timer();
336            sulkemisAjastin.Interval = 3;
337            nappejaVastaavatAjastimet.Add(c, sulkemisAjastin);
338        }
339    }
340
341    PhysicsObject lisaaTaso()
342    {
343        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO + 20);
344        taso.Shape = Shape.Rectangle;
345        taso.Color = RandomGen.NextColor();
346        return taso;
347    }
348
349    PhysicsObject lisaaTahti()
350    {
351        PhysicsObject tahti = new PhysicsObject(20, 20);
352        tahti.Mass = 4.0;
353        tahti.Angle = RandomGen.NextAngle();
354        tahti.Shape = Shape.Circle;
355        tahti.Image = tahtiKuva;
356        tahti.Tag = "Kolikko";
357        return tahti;
358    }
359
360    PhysicsObject lisaaIlkea()
361    {
362        PhysicsObject ilkea = new PhysicsObject(20, 20);
363        ilkea.Mass = 4.0;
364        ilkea.Angle = RandomGen.NextAngle();
365        ilkea.Shape = Shape.Circle;
366        ilkea.Image = tahtiKuva;
367        ilkea.Tag = "Ilkeä";
368        return ilkea;
369    }
370
371    PhysicsObject lisaaNappi_k()
372    {
373        return lisaaNappi('k', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
374    }
375    PhysicsObject lisaaNappi_l()
376    {
377        return lisaaNappi('l', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
378    }
379    PhysicsObject lisaaNappi_i()
380    {
381        return lisaaNappi('i', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
382    }
383    PhysicsObject lisaaNappi_q()
384    {
385        return lisaaNappi('q', RandomGen.NextColor(), RUUDUN_KOKO, RUUDUN_KOKO + 20);
386    }
387    PhysicsObject lisaaNappi_e()
388    {
389        return lisaaNappi('e', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
390    }
391    PhysicsObject lisaaNappi_r()
392    {
393        return lisaaNappi('r', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
394    }
395    PhysicsObject lisaaNappi_t()
396    {
397        return lisaaNappi('t', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO);
398    }
399   
400    PhysicsObject lisaaNappi(char merkki, Color c, double x, double y)
401    {
402        Nappi nappi = new Nappi(x, y);
403        nappi.Color = c;
404        nappi.Merkki = merkki;
405        //ovetSaaAvata.Add(nappi, true);
406        return nappi;
407    }
408
409    Dictionary<char, List<PhysicsObject>> nappejaVastaavatOvet = new Dictionary<char, List<PhysicsObject>>();
410    Dictionary<char, Timer> nappejaVastaavatAjastimet = new Dictionary<char, Timer>();
411
412    PhysicsObject lisaaOviK()
413    {
414        return lisaaOvi('K', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
415    }
416    PhysicsObject lisaaOviL()
417    {
418        return lisaaOvi('L', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
419    }
420    PhysicsObject lisaaOviI()
421    {
422        return lisaaOvi('I', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
423    }
424    PhysicsObject lisaaOviQ()
425    {
426        return lisaaOvi('Q', RandomGen.NextColor(), RUUDUN_KOKO, RUUDUN_KOKO + 20);
427    }
428    PhysicsObject lisaaOviE()
429    {
430        return lisaaOvi('E', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
431    }
432    PhysicsObject lisaaOviR()
433    {
434        return lisaaOvi('R', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
435    }
436    PhysicsObject lisaaOviT()
437    {
438        return lisaaOvi('T', Color.Brown, RUUDUN_KOKO, RUUDUN_KOKO / 2 + 5);
439    }
440
441    PhysicsObject lisaaOvi(char merkki, Color c, double x, double y)
442    {
443        PhysicsObject ovi = PhysicsObject.CreateStaticObject(x, y);
444        ovi.Color = c;
445        ovi.Tag = "Ovi";
446        char napinMerkki = char.ToLower(merkki);
447        if (nappejaVastaavatOvet[napinMerkki] == null)
448        {
449            nappejaVastaavatOvet[napinMerkki] = new List<PhysicsObject>();
450        }
451        nappejaVastaavatOvet[napinMerkki].Add(ovi);
452        return ovi;
453    }
454
455    PlatformCharacter lisaaPelaaja()
456    {
457        pelaaja1 = new PlatformCharacter(30, 45);
458        pelaaja1.Mass = 4.0;
459        pelaaja1.Shape = Shape.FromImage(pelaajanKuva);
460        pelaaja1.Image = pelaajanKuva;
461        AddCollisionHandler(pelaaja1, osuTahteen);
462        return pelaaja1;
463    }
464
465    void lisaaNappaimet()
466    {
467        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
468        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Poistu valikkoon");
469
470        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
471        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
472        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
473
474        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
475
476        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
477        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
478        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
479    }
480
481    void liikuta(PlatformCharacter hahmo, double nopeus)
482    {
483        hahmo.Walk(nopeus);
484    }
485
486    void hyppaa(PlatformCharacter hahmo, double nopeus)
487    {
488        hahmo.Jump(nopeus);
489    }
490
491    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
492    {
493        if (kohde.Tag.ToString() == "Kolikko")
494        {
495            maaliAani.Play();
496            pisteLaskuri.Value += 5;
497            kohde.Destroy();
498
499            pisteAikaLaskuri = new Timer();
500
501            if (pisteLaskuri.Value == 550)
502            {
503                pisteAikaLaskuri.Interval = 1;
504                pisteAikaLaskuri.Trigger += AikaLoppui;
505                pisteAikaLaskuri.Start();
506            }
507        }
508
509        else if (kohde.Tag.ToString() == "Ilkeä")
510        {
511            pelaaja1.Destroy();
512        }
513
514        else if (kohde is Nappi)
515        {
516            Nappi nappi = (Nappi)kohde;
517
518            AvaaOvet(nappi);
519
520            Timer sulkemisAjastin = nappejaVastaavatAjastimet[nappi.Merkki];
521
522            if (! sulkemisAjastin.Enabled)
523            {
524                sulkemisAjastin.Tag = nappi;
525                sulkemisAjastin.Trigger += PalautaOvet;
526                sulkemisAjastin.Start(1);
527            }
528        }
529    }
530
531    void PalautaOvet(Timer ajastin)
532    {
533        ajastin.Trigger -= PalautaOvet;
534        Nappi nappi = (Nappi)ajastin.Tag;
535        PalautaOvet(nappi);
536    }
537
538    void AvaaOvet(Nappi nappi)
539    {
540        List<PhysicsObject> ovet = nappejaVastaavatOvet[nappi.Merkki];
541        foreach (var ovi in ovet)
542        {
543            TuhoaOvi(ovi);
544        }
545    }
546    void TuhoaOvi(PhysicsObject ovi)
547    {
548        ovi.IsVisible = false;
549        Remove(ovi);
550    }
551
552    void PalautaOvet(Nappi nappi)
553    {
554        List<PhysicsObject> ovet = nappejaVastaavatOvet[nappi.Merkki];
555        PalautaOvet(nappi, ovet);
556    }
557
558    void PalautaOvet(PhysicsObject nappi, List<PhysicsObject> ovet)
559    {
560        foreach (PhysicsObject ovi in ovet)
561        {
562            ovi.IsVisible = true;
563            Add(ovi);
564        }
565    }
566}
Note: See TracBrowser for help on using the repository browser.