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

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