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

Revision 1830, 13.7 KB checked in by joaamaka, 9 years ago (diff)

musiikki, ääniä ja kenttä

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