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

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