source: 2011/23/ookantol/Haamuongelma/Haamuongelma/Peli.cs @ 1903

Revision 1903, 17.4 KB checked in by ookantol, 10 years ago (diff)

Valmis!

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    /* Credits:
12     * Pelin tekijä: Oona Kantola
13     * Musiikki: Nimetön lataaja sivustolta Royalty-Free Music
14     * Haamujen, kukan ja kellon kuvat: Public Domain Clip Art & Open Clip Art Library
15     * Ruoho by Don Havey
16     * Nuorten peliohjelmointikurssi 2011
17     */
18
19    const double nopeus = 300;
20    const double hyppyNopeus = 1000;
21    const int RUUDUN_KOKO = 40;
22
23    PlatformCharacter pelaaja1;
24
25    IntMeter laskuri;
26    IntMeter laskuri2;
27
28
29    Label naytto;
30    Label naytto2;
31
32
33    List<Label> Valikonkohdat;
34
35    Image pelaajanKuva = LoadImage("Buddy");
36    Image kelloKuva = LoadImage("kello");
37    Image kukkaKuva = LoadImage("kukka");
38    Image haamu1Kuva = LoadImage("haamu3");
39    Image haamu2Kuva = LoadImage("haamu4");
40
41
42
43    public override void Begin()
44    {
45        aloitusvalikko();
46        MediaPlayer.Play("MTA");
47        MediaPlayer.IsRepeating = true;
48    }
49
50
51
52    void luoKentta()
53    {
54        TileMap kentta = TileMap.FromFile("kentta1.txt");
55        kentta['-'] = lisaaTaso;
56        kentta['_'] = lisaaTaso2;
57        kentta['+'] = lisaaKello;
58        kentta['Y'] = lisaaKukka;
59        kentta['B'] = lisaaPelaaja;
60        kentta['1'] = lisaaHaamu1;
61        kentta['2'] = lisaaHaamu2;
62        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
63        Level.CreateBorders(1.0, true);
64        Level.Background.CreateStars();
65    }
66    void luoKentta2()
67    {
68        TileMap kentta = TileMap.FromFile("kentta2.txt");
69        kentta['-'] = lisaaTaso;
70        kentta['_'] = lisaaTaso2;
71        kentta['+'] = lisaaKello;
72        kentta['Y'] = lisaaKukka;
73        kentta['B'] = lisaaPelaaja;
74        kentta['1'] = lisaaHaamu1;
75        kentta['2'] = lisaaHaamu2;
76        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
77        Level.CreateBorders(1.0, true);
78        Level.Background.CreateStars();
79    }
80    void luoKentta3()
81    {
82        TileMap kentta = TileMap.FromFile("kentta3.txt");
83        kentta['-'] = lisaaTaso;
84        kentta['_'] = lisaaTaso2;
85        kentta['+'] = lisaaKello;
86        kentta['Y'] = lisaaKukka;
87        kentta['B'] = lisaaPelaaja;
88        kentta['1'] = lisaaHaamu1;
89        kentta['2'] = lisaaHaamu2;
90        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
91        Level.CreateBorders(1.0, true);
92        Level.Background.CreateStars();
93    }
94
95
96
97    PhysicsObject lisaaTaso()
98    {
99        PhysicsObject taso = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
100        taso.Image = LoadImage("pilvi");
101        return taso;
102    }
103    PhysicsObject lisaaTaso2()
104    {
105        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO);
106        taso2.Image = LoadImage("ruoho");
107        return taso2;
108    }
109    PhysicsObject lisaaKello()
110    {
111        PhysicsObject kello = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
112        kello.Image = kelloKuva;
113        kello.CollisionIgnoreGroup = 1;
114        kello.Angle = RandomGen.NextAngle();
115        kello.Tag = "kello";
116        return kello;
117    }
118    PhysicsObject lisaaKukka()
119    {
120        PhysicsObject kukka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
121        kukka.Image = kukkaKuva;
122        kukka.IgnoresCollisionResponse = true;
123        kukka.Tag = "kukka";
124        return kukka;
125    }
126    PlatformCharacter lisaaPelaaja()
127    {
128        pelaaja1 = new PlatformCharacter(27, 40);
129        pelaaja1.Mass = 6.0;
130        pelaaja1.Image = pelaajanKuva;
131        AddCollisionHandler(pelaaja1, osuKelloon);
132        AddCollisionHandler(pelaaja1, osuHaamuun);
133        AddCollisionHandler(pelaaja1, osuKukkaan);
134
135        return pelaaja1;
136    }
137    PhysicsObject lisaaHaamu1()
138    {
139        PhysicsObject haamu1 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
140        haamu1.Image = LoadImage("haamu3");
141        haamu1.Tag = "haamu";
142        haamu1.CanRotate = false;
143        haamu1.CollisionIgnoreGroup = 1;
144        haamu1.IgnoresGravity = true;
145        Timer asetaAivot = new Timer();
146        asetaAivot.Tag = haamu1;
147        asetaAivot.Trigger += asetaHaamulleAivot;
148        asetaAivot.Interval = 1.5;
149        asetaAivot.Start();
150        return haamu1;
151    }
152    PhysicsObject lisaaHaamu2()
153    {
154        PhysicsObject haamu2 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO);
155        haamu2.Image = LoadImage("haamu4");
156        haamu2.Tag = "haamu";
157        haamu2.CanRotate = false;
158        haamu2.CollisionIgnoreGroup = 1;
159        haamu2.IgnoresGravity = true;
160        Timer asetaAivot = new Timer();
161        asetaAivot.Tag = haamu2;
162        asetaAivot.Trigger += asetaHaamulleAivot;
163        asetaAivot.Interval = 2.0;
164        asetaAivot.Start();
165        return haamu2;
166    }
167
168
169    void lisaaNappaimet()
170    {
171        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
172        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, "Päävalikkoon");
173
174        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
175        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
176        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
177        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
178        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
179        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
180
181        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
182    }
183    void liikuta(PlatformCharacter hahmo, double nopeus)
184    {
185        hahmo.Walk(nopeus);
186    }
187    void hyppaa(PlatformCharacter hahmo, double nopeus)
188    {
189        hahmo.Jump(nopeus);
190    }
191
192
193
194    IntMeter elamat()
195    {
196        laskuri = new IntMeter(5);
197        naytto = new Label(140, 70);
198        naytto.Title = "Lives left ";
199        naytto.Size = new Vector(140, 60);
200        naytto.X = Screen.Left + 90;
201        naytto.Y = Screen.Top - 80;
202        naytto.TextColor = Color.White;       
203        naytto.BindTo(laskuri);
204        Add(naytto);
205        return laskuri;
206
207    }
208    IntMeter kerattavat(int maxmaara)
209    {
210        laskuri2 = new IntMeter(0);
211        laskuri2.MaxValue = maxmaara;
212        laskuri2.Changed += new Meter<int>.OnChangeHandler(laskuri2_Changed);
213        laskuri2.UpperLimit += laskuriYlarajassa;
214        naytto2 = new Label(400, 70);
215        naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString();
216        naytto2.Size = new Vector(400, 70);
217        naytto2.X = Screen.Left + 190;
218        naytto2.Y = Screen.Top - 50;
219        naytto2.TextColor = Color.White;
220        Add(naytto2);
221        return laskuri2;
222
223    }
224    void laskuri2_Changed(int oldValue, int newValue)
225    {
226        naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString();
227    }
228    void laskuriYlarajassa(int arvo)
229    {
230        if (arvo == 38)
231        { 
232        Label Win = new Label ("Field 1 done!");
233        Win.Position = new Vector(10, 0);
234        Win.TextColor = RandomGen.NextColor();
235        Add(Win);
236        Timer.SingleShot(3.0, Aloita2);
237        }
238        else if (arvo == 40)
239        {
240            Label Win = new Label("Field 2 done!");
241            Win.Position = new Vector(10, 0);
242            Win.TextColor = RandomGen.NextColor();
243            Add(Win);
244            Timer.SingleShot(3.0, Aloita3);
245        }
246        else if (arvo == 46)
247        {
248            Label Win = new Label("Field 3 done! YOU WIN! YOU SAVED THE FLOWERS!");
249            Win.Position = new Vector(10, 0);
250            Win.TextColor = RandomGen.NextColor();
251            Add(Win);
252            Timer.SingleShot(3.0, aloitusvalikko);
253        }   
254    }
255
256
257
258    void osuKelloon(PhysicsObject hahmo, PhysicsObject kohde)
259    {
260        if (kohde.Tag.ToString() == "kello")
261        {
262            kohde.Destroy();
263            laskuri2.Value += 1;
264        }
265
266    }
267    void osuHaamuun(PhysicsObject hahmo, PhysicsObject kohde)
268    {
269        if (kohde.Tag.ToString() == "haamu")
270        {
271            if (kohde.Top < pelaaja1.Position.Y)
272            {
273                kohde.Destroy();
274                laskuri2.Value += 1;
275            }
276            else
277            {
278                laskuri.Value--;
279                Vector lento = hahmo.Position - kohde.Position;
280                hahmo.Hit(1000*lento);
281            }
282
283               if ( laskuri.Value == 0)
284            {
285                hahmo.Destroy();
286                Label naytto = new Label(700, - 600);
287                naytto.TextColor = RandomGen.NextColor();
288                naytto.Text = "Game Over";
289
290                Add(naytto);
291
292            }
293        }
294       
295    }
296    void osuKukkaan (PhysicsObject pelaaja1, PhysicsObject kohde)
297    {
298        if (kohde.Tag.ToString() == "kukka")
299        {
300            Label apua = new Label(600, - 800);
301            apua.X = Screen.Left + 500;
302            apua.Y = Screen.Top - 600;
303            apua.TextColor = Color.White;
304            apua.Text = "Help us! Collect the clocks and destroy evil ghosts!";
305            Timer.SingleShot(1.0, apua.Destroy);
306            Add(apua);
307        }
308    }
309
310
311
312    void aloitusvalikko()
313    {
314        ClearAll();
315        IsFullScreen = true;
316        Valikonkohdat = new List<Label>();
317        Level.Background.CreateGradient (Color.Orange, Color.White);
318
319        Label kohta = new Label("Ghost Troubles");
320        kohta.Position = new Vector(0, 140);
321        kohta.Font = Font.DefaultLargeBold;
322        kohta.TextColor = Color.Orange;
323        Add(kohta);
324
325        Label kohta1 = new Label("Start Game");
326        kohta1.Position = new Vector(0, 80);
327        Valikonkohdat.Add(kohta1);
328
329        Label kohta2 = new Label("Exit");
330        kohta2.Position = new Vector(0, -80);
331        Valikonkohdat.Add(kohta2);
332
333        Label kohta3 = new Label("Fields");
334        kohta3.Position = new Vector(0, 30);
335        Valikonkohdat.Add(kohta3);
336
337        Label kohta4 = new Label("Instructions");
338        kohta4.Position = new Vector(0, - 20);
339        Valikonkohdat.Add(kohta4);
340
341
342        foreach (Label Valikonkohta in Valikonkohdat)
343        {
344            Valikonkohta.TextColor = Color.White;
345            Add(Valikonkohta);
346        }
347
348        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Start, null);
349        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
350        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, kentat, null);
351        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, ohjeet, null);
352
353        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Start, null);
354
355        Mouse.IsCursorVisible = true;
356        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
357
358        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null);
359
360    }
361    void Start()
362    {
363        ClearAll();
364        IsFullScreen = true;
365        Valikonkohdat = new List<Label>();
366        Level.Background.CreateGradient(Color.Orange, Color.White);
367
368        Label kohta3 = new Label(" Just a normal day. Buddy is on his way home, when he sees mean ghosts. Lots of them. He tries to avoid them,       but then he meets dying flowers, which are dying     because the ghosts took all the good energy out of the air. To help them, Buddy must destroy all the ghosts and                     collect clocks, that reverse time...");
369        kohta3.Size = new Vector(600, 130);
370        kohta3.SizeMode = TextSizeMode.Wrapped;
371        kohta3.Position = new Vector(0, 100);
372        kohta3.TextColor = Color.Orange;
373        Add(kohta3);
374
375        Label kohta4 = new Label("Start");
376        kohta4.Position = new Vector(0, -40);
377        kohta4.TextColor = Color.White;
378        Valikonkohdat.Add(kohta4);
379
380        foreach (Label Valikonkohta in Valikonkohdat)
381        {
382            Valikonkohta.TextColor = Color.White;
383            Add(Valikonkohta);
384        }
385
386        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Aloita, null);
387        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, null);
388        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Aloita, null);
389
390        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
391
392        Mouse.IsCursorVisible = true;
393    }   
394
395    void kentat()
396    {
397        ClearAll();
398        IsFullScreen = true;
399        Valikonkohdat = new List<Label>();
400        Level.Background.CreateGradient(Color.Orange, Color.White);
401
402        Label kohta1 = new Label("Field 1");
403        kohta1.Position = new Vector(0, 80);
404        Valikonkohdat.Add(kohta1);
405
406        Label kohta2 = new Label("Field 2");
407        kohta2.Position = new Vector(0, 20);
408        Valikonkohdat.Add(kohta2);
409
410        Label kohta3 = new Label("Field 3");
411        kohta3.Position = new Vector(0, - 40);
412        Valikonkohdat.Add(kohta3);
413
414
415
416        foreach (Label Valikonkohta in Valikonkohdat)
417        {
418            Valikonkohta.TextColor = Color.White;
419            Add(Valikonkohta);
420        }
421
422        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloita, null);
423        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Aloita2, null);
424        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Aloita3, null);
425
426        Mouse.IsCursorVisible = true;
427        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
428
429        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, null);
430
431    }
432
433    void ohjeet()
434    {
435        ClearAll();
436        IsFullScreen = true;
437        Valikonkohdat = new List<Label>();
438        Level.Background.CreateGradient(Color.Orange, Color.White);
439
440        Label kohta1 = new Label("    Move Buddy with the arrow keys or with A, D and W         keys. Collect clocks, and destroy all the ghosts by                                    jumping on them.");
441        kohta1.Size = new Vector(600, 130); 
442        kohta1.SizeMode = TextSizeMode.Wrapped;
443        kohta1.Position = new Vector(0, 100);
444        kohta1.TextColor = Color.Orange;
445        Add(kohta1);
446
447        Label kohta2 = new Label("Back");
448        kohta2.Position = new Vector(0, -20);
449        kohta2.TextColor = Color.White;
450        Valikonkohdat.Add(kohta2);
451
452        foreach (Label Valikonkohta in Valikonkohdat)
453        {
454            Valikonkohta.TextColor = Color.White;
455            Add(Valikonkohta);
456        }
457
458        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, aloitusvalikko, null);
459        Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, null);
460
461        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
462
463        Mouse.IsCursorVisible = true;
464    }   
465    void Lopeta()
466    {
467        Exit();
468    }
469
470
471    void Aloita()
472    {
473
474        ClearAll();
475        IsFullScreen = true;
476        Gravity = new Vector(0, -1000);
477
478        luoKentta();
479        lisaaNappaimet();
480        elamat();
481        kerattavat(38);
482
483        Camera.Follow(pelaaja1);
484        Camera.ZoomFactor = 1.8;
485        Camera.StayInLevel = true;
486   
487   
488    }
489    void Aloita2()
490    {
491
492        ClearAll();
493        IsFullScreen = true;
494        Gravity = new Vector(0, -1000);
495
496        luoKentta2();
497        lisaaNappaimet();
498        elamat();
499        kerattavat(40);
500
501        Camera.Follow(pelaaja1);
502        Camera.ZoomFactor = 1.8;
503        Camera.StayInLevel = true;
504
505
506    }
507    void Aloita3()
508    {
509
510        ClearAll();
511        IsFullScreen = true;
512        Gravity = new Vector(0, -1000);
513
514        luoKentta3();
515        lisaaNappaimet();
516        elamat();
517        kerattavat(46);
518
519        Camera.Follow(pelaaja1);
520        Camera.ZoomFactor = 1.8;
521        Camera.StayInLevel = true;
522
523
524    }
525
526
527
528    void ValikossaLiikkuminen(AnalogState hiirenTila)
529    {
530        foreach (Label kohta in Valikonkohdat)
531        {
532            if (Mouse.IsCursorOn(kohta))
533            {
534                kohta.TextColor = Color.Orange;
535            }
536            else
537            {
538                kohta.TextColor = Color.White;
539            }
540        }
541
542    }
543    void ValikossaLiikkuminen2(AnalogState hiirenTila)
544    {
545        foreach (Label kohta in Valikonkohdat)
546        {
547            if (Mouse.IsCursorOn(kohta))
548            {
549                if (kohta.TextColor == Color.White)
550                kohta.TextColor = Color.Orange;
551            }
552            else if(kohta.TextColor == Color.Orange)
553            {
554                kohta.TextColor = Color.White;
555            }
556        }
557
558    }
559
560
561    void asetaHaamulleAivot(Timer sender)
562    {
563        PathFollowerBrain aivot = new PathFollowerBrain(150);
564        aivot.Path = new List<Vector>() { 
565            new Vector((sender.Tag as PhysicsObject).Position.X - 100, (sender.Tag as PhysicsObject).Position.Y),
566            new Vector((sender.Tag as PhysicsObject).Position.X, (sender.Tag as PhysicsObject).Position.Y)};
567        aivot.Owner = (sender.Tag as PhysicsObject);
568        aivot.Loop = true;
569        aivot.Speed = 150;
570        aivot.Active = true;
571        sender.Stop();
572    }
573
574
575}
Note: See TracBrowser for help on using the repository browser.