source: 2012/10-20/NicoA-K/MunPeli/MunPeli/MunPeli/MunPeli.cs @ 3952

Revision 3952, 16.4 KB checked in by jypeleht, 7 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 MunPeli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    IntMeter pisteLaskuri;
16
17    PlatformCharacter pelaaja1;
18    //PhysicsObject pelaaja1;
19
20    List<Label> valikonKohdat;
21
22    Image pelaajanKuva = LoadImage("pelaaja1");
23    Image tahtiKuva = LoadImage("karrkki");
24    Image TasoKuva = LoadImage("maa");
25    Image pahisKuva = LoadImage("pahapiza");
26    Image mitäKuva = LoadImage("mitä");
27    Image salaKuva = LoadImage("maa");
28    Image trollikuva = LoadImage("trollface");
29    Image trollikarkki = LoadImage("arkku");
30    Image lippu = LoadImage("nuoli1");
31    Image ammuus = LoadImage("ammus");
32    Image OhjeKuva = LoadImage("OhjeKuva");
33    Image KylttiKuva = LoadImage("Kyltti");
34    Image PalikkaKuva = LoadImage("palikka");
35    Image Paakkka = LoadImage("pääkkä");
36    Image Tele1 = LoadImage("Teleportti1");
37
38    Vector TeleporttiPaikka;
39    Vector TelePaikka;
40
41    SoundEffect maaliAani = LoadSoundEffect("maali");
42
43    PhysicsObject viimeksiOsuttuTrolliseina;
44
45    public override void Begin()
46    {
47        IsMouseVisible = true;
48
49        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
50"Aloita peli", "Ohjeet", "Lopeta");
51
52        Add(alkuValikko);
53
54        alkuValikko.AddItemHandler(0, AloitaPeli);
55        alkuValikko.AddItemHandler(1, Ohjeet);
56        alkuValikko.AddItemHandler(2, Exit);
57    }
58
59    void Ohjeet()
60    {
61        MessageWindow ohjeet = new MessageWindow("");
62        ohjeet.Size = Screen.Size;
63        ohjeet.Image = OhjeKuva;
64        ohjeet.SizingByLayout = false;
65
66
67        Add(ohjeet);
68        ohjeet.Closed += delegate { Begin(); };
69    }
70
71    void Valikko()
72    {
73        ClearAll();
74
75        valikonKohdat = new List<Label>();
76
77        Label kohta1 = new Label("Aloita peli");
78        kohta1.Position = new Vector(0, 40);
79        valikonKohdat.Add(kohta1);
80
81        Label kohta2 = new Label("Ohjeet");
82        kohta2.Position = new Vector(0, 0);
83        valikonKohdat.Add(kohta2);
84
85        Label kohta3 = new Label("Lopeta peli");
86        kohta3.Position = new Vector(0, -40);
87        valikonKohdat.Add(kohta3);
88
89        foreach (Label valikonKohta in valikonKohdat)
90        {
91            Add(valikonKohta);
92        }
93
94        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
95        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Ohjeet, null);
96        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
97        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
98
99    }
100
101    void AloitaPeli()
102    {
103        IsMouseVisible = false;
104
105        Gravity = new Vector(0, -1000);
106
107        LuoKentta();
108        LisaaNappaimet();
109        LuoPistelaskuri();
110
111        Camera.Follow(pelaaja1);
112        Camera.ZoomFactor = 1.2;
113        Camera.StayInLevel = true;
114    }
115
116    void LuoKentta()
117    {
118        TileMap kentta = TileMap.FromLevelAsset("kentta1");
119        kentta.SetTileMethod('#', LisaaTaso);
120        kentta.SetTileMethod('*', LisaaTahti);
121        kentta.SetTileMethod('N', LisaaPelaaja);
122        kentta.SetTileMethod('P', LisaaPahis);
123        kentta.SetTileMethod('?', LisaaMitä);
124        kentta.SetTileMethod('S', LisaaSala);
125        kentta.SetTileMethod('T', LisaaTrolliseina);
126        kentta.SetTileMethod('K', LisaaTrollikarkki);
127        kentta.SetTileMethod('M', LisaaTrolleri);
128        kentta.SetTileMethod('L', LisaaLippu);
129        kentta.SetTileMethod('k', LisaaKyltti);
130        kentta.SetTileMethod('p', LisaaPalikka);
131        kentta.SetTileMethod('A', LisaaPaakka);
132        kentta.SetTileMethod('X', LisaaPoint);
133        kentta.SetTileMethod('O', LisaaTele);
134
135        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
136        Level.CreateBorders();
137        Level.Background.CreateGradient(Color.Gray, Color.White);
138    }
139
140    void LisaaTaso(Vector paikka, double leveys, double korkeus)
141    {
142        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
143        taso.Position = paikka;
144        //taso.Color = Color.Orange;
145        taso.Image = TasoKuva;
146        Add(taso);
147    }
148
149    void LisaaTahti(Vector paikka, double leveys, double korkeus)
150    {
151        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
152        tahti.IgnoresCollisionResponse = true;
153        tahti.Position = paikka;
154        tahti.Image = tahtiKuva;
155        tahti.Tag = "tahti";
156        Add(tahti);
157    }
158
159    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
160    {
161        pelaaja1 = new PlatformCharacter(38, 38);
162        pelaaja1.Position = paikka;
163        pelaaja1.Mass = 4.0;
164        pelaaja1.Image = pelaajanKuva;
165
166        pelaaja1.Weapon = new AssaultRifle(30, 10);
167        pelaaja1.Weapon.Ammo.Value = 1000;
168        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
169        pelaaja1.Weapon.IsVisible = false;
170
171        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
172        AddCollisionHandler(pelaaja1, "pahis", TormaaPahikseen);
173        AddCollisionHandler(pelaaja1, "mitä", TormaaMitaan);
174        AddCollisionHandler(pelaaja1, "trolliseina", TormaaTrolliseinaan);
175        AddCollisionHandler(pelaaja1, "karkki", Tormaatrollikarkkiin);
176        AddCollisionHandler(pelaaja1, "trolleri", TormaaTrolleriin);
177        AddCollisionHandler(pelaaja1, "Kyltti", TormaaKylttiin);
178        AddCollisionHandler(pelaaja1, "Paakka", TormaaPaakkaan);
179        AddCollisionHandler(pelaaja1, "tele", TormaaTeleen);
180        AddCollisionHandler(pelaaja1, "tele1", TormaaTeleen1);
181
182        Add(pelaaja1);
183    }
184
185    void LisaaNappaimet()
186    {
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
189
190        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
191        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
192        Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Pelaaja lentää", pelaaja1, hyppyNopeus);
193
194        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
195        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
196        Keyboard.Listen(Key.W, ButtonState.Down, Hyppaa, "Pelaaja lentää", pelaaja1, hyppyNopeus);
197
198        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
199
200        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
201
202        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
203        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
204        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja lentää", pelaaja1, hyppyNopeus);
205
206
207        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
208    }
209
210    void Liikuta(PlatformCharacter hahmo, double nopeus)
211    {
212        hahmo.Walk(nopeus);
213    }
214
215    void Hyppaa(PlatformCharacter hahmo, double nopeus)
216    {
217        //hahmo.Velocity = new Vector(hahmo.Velocity.X, hahmo.Velocity.Y + 30);
218        hahmo.Jump(nopeus);
219    }
220
221    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
222    {
223        maaliAani.Play();
224        MessageDisplay.Add("NAM!");
225        tahti.Destroy();
226        pisteLaskuri.Value += 1;
227    }
228
229
230
231    void LuoPistelaskuri()
232    {
233        pisteLaskuri = new IntMeter(0);
234
235
236        Label pisteNaytto = new Label();
237        pisteNaytto.Title = "pisteet";
238        pisteNaytto.X = Screen.Left + 100;
239        pisteNaytto.Y = Screen.Top - 100;
240        pisteNaytto.TextColor = Color.Black;
241        pisteNaytto.Color = Color.White;
242
243        pisteNaytto.BindTo(pisteLaskuri);
244        Add(pisteNaytto);
245    }
246
247
248    void LisaaPahis(Vector paikka, double leveys, double korkeus)
249    {
250        PhysicsObject pahis = PhysicsObject.CreateStaticObject(leveys, korkeus);
251        pahis.IgnoresCollisionResponse = false;
252        pahis.Position = paikka;
253        pahis.Image = pahisKuva;
254        pahis.Tag = "pahis";
255        Add(pahis);
256
257    }
258
259
260    void TormaaPahikseen(PhysicsObject hahmo, PhysicsObject pahis)
261    {
262        MessageDisplay.Add("AU!");
263        pisteLaskuri.Value -= 1;
264    }
265
266
267    void LisaaMitä(Vector paikka, double leveys, double korkeus)
268    {
269        PhysicsObject mitä = PhysicsObject.CreateStaticObject(leveys, korkeus);
270        mitä.IgnoresCollisionResponse = true;
271        mitä.Position = paikka;
272        mitä.Image = mitäKuva;
273        mitä.Tag = "mitä";
274        Add(mitä);
275
276    }
277
278
279    void TormaaMitaan(PhysicsObject hahmo, PhysicsObject mitä)
280    {
281        MessageDisplay.Add(" varo punaisia palikoita!");
282    }
283
284
285    void LisaaSala(Vector paikka, double leveys, double korkeus)
286    {
287        PhysicsObject sala = PhysicsObject.CreateStaticObject(leveys, korkeus);
288        sala.IgnoresCollisionResponse = true;
289        sala.Position = paikka;
290        sala.Image = salaKuva;
291        sala.Tag = "sala";
292        Add(sala);
293    }
294
295
296    void LisaaTrolliseina(Vector paikka, double leveys, double korkeus)
297    {
298        PhysicsObject trolliseina = PhysicsObject.CreateStaticObject(leveys, korkeus);
299        trolliseina.IgnoresCollisionResponse = false;
300        trolliseina.Position = paikka;
301        trolliseina.Color = Color.Transparent;
302        trolliseina.Tag = "trolliseina";
303        Add(trolliseina);
304    }
305
306    void TormaaTrolliseinaan(PhysicsObject hahmo, PhysicsObject trolliseina)
307    {
308        trolliseina.Image = trollikuva;
309        if (viimeksiOsuttuTrolliseina != null) PiilotaTrolliseina();
310        viimeksiOsuttuTrolliseina = trolliseina;
311        Timer.SingleShot(2.0, PiilotaTrolliseina);
312
313
314    }
315
316    void PiilotaTrolliseina()
317    {
318        viimeksiOsuttuTrolliseina.Image = null;
319
320    }
321
322    void LisaaTrollikarkki(Vector paikka, double leveys, double korkeus)
323    {
324        PhysicsObject karkki = PhysicsObject.CreateStaticObject(leveys, korkeus);
325        //karkki.IgnoresCollisionResponse = true;
326        karkki.Position = paikka;
327        karkki.Image = trollikarkki;
328        karkki.Tag = "karkki";
329        Add(karkki);
330    }
331
332
333
334    void Tormaatrollikarkkiin(PhysicsObject hahmo, PhysicsObject karkki)
335    {
336        MessageDisplay.Add("O.O");
337        pisteLaskuri.Value += 1000;
338        karkki.Destroy();
339
340    }
341
342
343    void LisaaTrolleri(Vector paikka, double leveys, double korkeus)
344    {
345        Trolleri trolleri = new Trolleri(200, 200);
346        trolleri.IgnoresCollisionResponse = false;
347        trolleri.IgnoresGravity = true;
348        trolleri.Position = paikka;
349        trolleri.Image = trollikuva;
350        trolleri.Tag = "trolleri";
351        Add(trolleri);
352
353
354        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(100);
355        satunnaisAivot.Active = true;
356        satunnaisAivot.ChangeMovementSeconds = 3;
357        trolleri.Brain = satunnaisAivot;
358    }
359
360
361    void TormaaTrolleriin(PhysicsObject hahmo, PhysicsObject trolleri)
362    {
363        MessageDisplay.Add("AU!!");
364        pisteLaskuri.Value -= 100;
365    }
366
367    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
368    {
369        if (kohde.Tag.Equals("tahti")) return;
370        if (kohde.Tag.Equals("trolleri")) AmmusOsuiTrolleriin(ammus, (Trolleri)kohde);
371        ammus.Destroy();
372    }
373
374    void AmmusOsuiTrolleriin(PhysicsObject ammus, Trolleri kohde)
375    {
376        kohde.elamaLaskuri.Value--;
377    }
378
379    void AmmuAseella(PlatformCharacter pelaaja)
380    {
381        PhysicsObject ammus = pelaaja.Weapon.Shoot();
382
383
384        if (ammus != null)
385        {
386            ammus.Size *= 3;
387            ammus.Image = ammuus;
388            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.0);
389            ammus.Velocity = ammus.Velocity.Normalize() * 110;
390        }
391
392    }
393
394    class Trolleri : PhysicsObject
395    {
396        public IntMeter elamaLaskuri = new IntMeter(10, 0, 100);
397        //public int Elamat = 5;
398
399        public Trolleri(double leveys, double korkeus)
400            : base(leveys, korkeus)
401        {
402            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
403        }
404
405    }
406
407    void ValikossaLiikkuminen(AnalogState hiirenTila)
408    {
409        foreach (Label kohta in valikonKohdat)
410        {
411            if (Mouse.IsCursorOn(kohta))
412            {
413                kohta.TextColor = Color.Red;
414            }
415            else
416            {
417                kohta.TextColor = Color.Black;
418            }
419
420        }
421
422    }
423
424    void LisaaLippu(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject Lippu = PhysicsObject.CreateStaticObject(leveys, korkeus);
427        Lippu.IgnoresCollisionResponse = true;
428        Lippu.Position = paikka;
429        Lippu.Image = lippu;
430        Lippu.Tag = "lippu";
431        Add(Lippu);
432    }
433
434    void LisaaKyltti(Vector paikka, double leveys, double korkeus)
435    {
436        PhysicsObject Kyltti = PhysicsObject.CreateStaticObject(leveys, korkeus);
437        Kyltti.IgnoresCollisionResponse = true;
438        Kyltti.Position = paikka;
439        Kyltti.Image = KylttiKuva;
440        Kyltti.Tag = "Kyltti";
441        Add(Kyltti);
442    }
443
444    void TormaaKylttiin(PhysicsObject hahmo, PhysicsObject Kyltti)
445    {
446        MessageDisplay.Add("Menit väärää reittiä. Pääset pois vain samaa tietä");
447    }
448
449    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
450    {
451        PhysicsObject Palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
452        //Palikka.IgnoresCollisionResponse = true;
453        Palikka.Position = paikka;
454        Palikka.Image = PalikkaKuva;
455        Palikka.Tag = "Palikka";
456        Add(Palikka);
457    }
458
459    void LisaaPaakka(Vector paikka, double leveys, double korkeus)
460    {
461        Paakka Paakka = new Paakka(150, 150);
462        Paakka.IgnoresCollisionResponse = false;
463        Paakka.IgnoresGravity = true;
464        Paakka.Position = paikka;
465        Paakka.Image = Paakkka;
466        Paakka.Tag = "Paakka";
467        Add(Paakka);
468
469
470        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(100);
471        satunnaisAivot.Active = true;
472        satunnaisAivot.ChangeMovementSeconds = 2;
473        Paakka.Brain = satunnaisAivot;
474    }
475
476    class Paakka : PhysicsObject
477    {
478        public IntMeter elamaLaskuri = new IntMeter(20, 0, 100);
479        //public int Elamat = 5;
480
481        public Paakka(double leveys, double korkeus)
482            : base(leveys, korkeus)
483        {
484            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
485        }
486
487    }
488
489    void TormaaPaakkaan(PhysicsObject hahmo, PhysicsObject Paakka)
490    {
491        MessageDisplay.Add("GAME OVER!");
492        pisteLaskuri.Value -= 1000;
493        hahmo.Position = TeleporttiPaikka;
494    }
495
496    void LisaaPoint(Vector paikka, double leveys, double korkeus)
497    {
498        TeleporttiPaikka = paikka;
499        PhysicsObject Tele = PhysicsObject.CreateStaticObject(leveys, korkeus);
500        Tele.IgnoresCollisionResponse = true;
501        Tele.Position = paikka;
502        Tele.Image = Tele1;
503        Tele.Tag = "tele1";
504        //TelePaikka = paikka;
505        Add(Tele);
506    }
507
508    void LisaaTele(Vector paikka, double leveys, double korkeus)
509    {
510
511        TelePaikka = paikka;
512        PhysicsObject Tele = PhysicsObject.CreateStaticObject(leveys, korkeus);
513        Tele.IgnoresCollisionResponse = true;
514        Tele.Position = paikka;
515        Tele.Image = Tele1;
516        Tele.Tag = "tele";
517       
518        Add(Tele);
519    }
520
521    void TormaaTeleen(PhysicsObject hahmo, PhysicsObject tahti)
522    {
523        //maaliAani.Play();
524        MessageDisplay.Add("huii!");
525        if (hahmo.Velocity.X < 0)
526            hahmo.Position = TeleporttiPaikka + new Vector(-(RUUDUN_KOKO + 1), 0);
527        else
528            hahmo.Position = TeleporttiPaikka + new Vector((RUUDUN_KOKO + 1), 0);
529    }
530    void TormaaTeleen1(PhysicsObject hahmo, PhysicsObject tahti)
531    {
532        //maaliAani.Play();
533        MessageDisplay.Add("huii!");
534        if (hahmo.Velocity.X < 0)
535            hahmo.Position = TelePaikka + new Vector (-(RUUDUN_KOKO+1), 0);
536        else
537            hahmo.Position = TelePaikka + new Vector((RUUDUN_KOKO+1), 0);
538    }
539
540}
541
Note: See TracBrowser for help on using the repository browser.