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

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