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

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