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

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