source: 2011/26/OssiV/sotapeli/sotapeli/sotapeli/tasohyppely.cs @ 2434

Revision 2434, 13.8 KB checked in by osmavanh, 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    List<Label> valikonKohdat;
12    ScoreList topLista = new ScoreList(10, false, 0);
13
14
15    const double nopeus = 200;
16    const double hyppyNopeus = 1000;
17    const int RUUDUN_KOKO = 40;
18    IntMeter pisteLaskuri;
19
20    PlatformCharacter pelaaja1;
21    PlatformCharacter pelaaja2;
22    // pelaajien kuvat
23    Image pelaajanKuva = LoadImage("peliukko1");
24    Image pelaajan2Kuva = LoadImage("peliukko2parempi");
25    Image tahtiKuva = LoadImage("raha");
26    Image tahtiKuva2 = LoadImage("musta neliö");
27    Image pahiksenKuva = LoadImage("pahis");
28    Image pelaaja2kaannetty = LoadImage("peliukko2parempiKäännetty");
29    Image pelaaja1kaannettu = LoadImage("peliukko1Käännetty");
30    Image taustakuva = LoadImage("taustakuva");
31    Image ampuvapahisKuva = LoadImage("pahis2");
32
33
34
35    List<Pahis> pahikset;
36
37    SoundEffect maaliAani = LoadSoundEffect("maali");
38
39    public override void Begin()
40    {
41
42        // Gravity = new Vector(0, -1000);
43        Valikko();
44        if (DataStorage.Exists("pisteet.xml"))
45            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
46
47
48    }
49
50    void luoKentta()
51    {
52        TileMap kentta = TileMap.FromFile("kentta1.txt");
53        kentta['='] = lisaaHaivePalikka;
54        kentta['#'] = lisaaTaso;
55        kentta['*'] = lisaaTahti;
56        kentta['N'] = lisaaPelaaja;
57        kentta['M'] = lisaaPelaaja2;
58        kentta['V'] = lisaaPahis;
59        kentta['A'] = lisaaAmpuvaPahis;
60        kentta['H'] = lisaaMaali;
61        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
62        Level.CreateBorders();
63        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
64    }
65
66    PhysicsObject lisaaTaso()
67    {
68        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
69        taso.Color = Color.Black;
70        return taso;
71    }
72
73    PhysicsObject lisaaTahti()
74    {
75        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
76        tahti.Image = tahtiKuva;
77        tahti.Tag = "tahti";
78        return tahti;
79    }
80
81    PlatformCharacter lisaaPelaaja()
82    {
83        pelaaja1 = new PlatformCharacter(40, 40);
84        pelaaja1.Mass = 4.0;
85        pelaaja1.Tag = "pelaaja";
86        pelaaja1.Shape = Shape.Circle;
87        //pelaaja1.Image = pelaajanKuva;
88        pelaaja1.RightWalkingAnimation = new Animation(pelaajanKuva);
89        pelaaja1.LeftWalkingAnimation = new Animation(pelaaja1kaannettu);
90
91        AddCollisionHandler(pelaaja1, osuTahteen);
92        AddCollisionHandler(pelaaja1, osuHaivePalikkaan);
93        AddCollisionHandler(pelaaja1, osuPelaajaan);
94        pelaaja1.Weapon = new AssaultRifle(70, 20);
95        pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
96        pelaaja1.Weapon.InfiniteAmmo = true;
97
98
99
100        return pelaaja1;
101    }
102
103    void lisaaNappaimet()
104    {
105        // Komennot
106        Keyboard.Listen(Key.R, ButtonState.Released, naytaPisteet, "aloita alusta");
107
108
109        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
110        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
111        // pelaaja1 ohjaimet
112        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
113        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
114        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
115        Keyboard.Listen(Key.NumPad0, ButtonState.Down, AmmuAseella1, "Ammu");
116        Keyboard.Listen(Key.NumPad1, ButtonState.Down, tähtää, "tähtää", pelaaja1, 3.0);
117        Keyboard.Listen(Key.NumPad2, ButtonState.Down, tähtää, "tähtää", pelaaja1, -3.0);
118
119        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
120
121        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
122        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
123        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
124        // Pelaaja2 ohjaimet
125        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
126        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
127        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja2 hyppää", pelaaja2, hyppyNopeus);
128        Keyboard.Listen(Key.O, ButtonState.Down, painottomuus, null);
129        Keyboard.Listen(Key.O, ButtonState.Up, painottomuusLoppuu, null);
130        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella2, "Ammu");
131        Keyboard.Listen(Key.B, ButtonState.Down, tähtää, "tähtää", pelaaja2, 4.0);
132        Keyboard.Listen(Key.H, ButtonState.Down, tähtää, "tähtää", pelaaja2, -4.0);
133        Keyboard.Listen(Key.D2, ButtonState.Pressed, vaihdaPlasmaCannoniin, "plasmatykki");
134        Keyboard.Listen(Key.D1, ButtonState.Pressed, vaihdaRynkkyyn, "rynnäkkökivääri");
135        Keyboard.Listen(Key.D3, ButtonState.Pressed, vaihdaLaserPyssyyn, "laser pyssy");
136    }
137    void tähtää(PlatformCharacter hahmo, double muutos)
138    {
139        hahmo.Weapon.Angle += Angle.FromDegrees(muutos);
140    }
141
142
143    void painottomuus()
144    {
145        Gravity = new Vector(0.0, 150.0);
146
147
148    }
149    void liikuta(PlatformCharacter hahmo, double nopeus)
150    {
151        hahmo.Walk(nopeus);
152    }
153
154    void hyppaa(PlatformCharacter hahmo, double nopeus)
155    {
156        hahmo.Jump(nopeus);
157    }
158
159    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
160    {
161        if (kohde.Tag.ToString() == "tahti")
162        {
163            maaliAani.Play();
164            MessageDisplay.Add("Sait pisteen!");
165            kohde.Destroy();
166            pisteLaskuri.Value++;
167            //pisteLaskuri.Value += 1;
168            //pisteLaskuri.Value = pisteLaskuri.Value + 1;
169
170
171
172
173        }
174    }
175
176    PlatformCharacter lisaaPelaaja2()
177    {
178        pelaaja2 = new PlatformCharacter(40, 40);
179        pelaaja2.Shape = Shape.Circle;
180        pelaaja2.Mass = 4.0;
181        pelaaja2.Tag = "pelaaja";
182        pelaaja2.Image = pelaajan2Kuva;
183
184
185        AddCollisionHandler(pelaaja2, osuTahteen);
186       
187        AddCollisionHandler(pelaaja2, osuPelaajaan);
188        AddCollisionHandler(pelaaja2, osuHaivePalikkaan);
189        AddCollisionHandler(pelaaja2, osumaaliin);
190
191        pelaaja2.RightWalkingAnimation = new Animation(pelaajan2Kuva);
192        pelaaja2.LeftWalkingAnimation = new Animation(pelaaja2kaannetty);
193
194
195
196        return pelaaja2;
197    }
198
199    void AloitaAlusta()
200    {
201        ClearAll();
202        pahikset = new List<Pahis>();
203        luoKentta();
204        lisaaNappaimet();
205        LuoLaskuri();
206        Camera.Follow(pelaaja1);
207        Camera.ZoomFactor = 1.2;
208        Camera.StayInLevel = true;
209    }
210
211    IntMeter LuoPisteLaskuri(double x, double y)
212    {
213        IntMeter laskuri = new IntMeter(0);
214        laskuri.MaxValue = 10;
215        Label naytto = new Label();
216        naytto.BindTo(laskuri);
217        naytto.X = x;
218        naytto.Y = y;
219        naytto.TextColor = Color.White;
220        naytto.BorderColor = Level.BackgroundColor;
221        naytto.Color = Level.BackgroundColor;
222        Add(naytto);
223        return laskuri;
224    }
225
226    PhysicsObject lisaaHaivePalikka()
227    {
228
229        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
230        tahti.Image = tahtiKuva2;
231        tahti.Tag = "musta neliö";
232        return tahti;
233
234
235    }
236    void osuHaivePalikkaan(PhysicsObject hahmo, PhysicsObject haivePalikka)
237    {
238        if (haivePalikka.Tag.ToString() == "musta neliö")
239        {
240
241
242            haivePalikka.Destroy();
243
244
245        }
246    }
247    PhysicsObject lisaaPahis()
248    {
249        Pahis pahis = new Pahis(40, 40);
250        pahis.Mass = 10.0;
251        pahis.Shape = Shape.Circle;
252        pahis.Image = pahiksenKuva;
253        pahis.Tag = "vihu";
254        pahis.Elamat = 5;
255
256        pahikset.Add(pahis);
257
258
259
260        TagFollowerBrain pahiksenAivot = new TagFollowerBrain("pelaaja", 50);
261
262        pahiksenAivot.Active = true;
263        pahiksenAivot.TargetFollowDistance = 600;
264        pahiksenAivot.Speed = 4000;
265        //pahiksenAivot.TargetCloseDistance = 20;
266
267
268
269
270        //pahiksenAivot.StopWhenTargetClose = true;
271        pahis.Brain = pahiksenAivot;
272
273
274        Add(pahis);
275        return (pahis);
276
277
278
279    }
280    void osuPelaajaan(PhysicsObject hahmo, PhysicsObject pahis)
281    {
282        if (pahis.Tag.ToString() == "vihu")
283        {
284            if (hahmo == pelaaja1)
285            {
286                Camera.Follow(pelaaja2);
287            }
288            hahmo.Destroy();
289
290        }
291    }
292    void painottomuusLoppuu()
293    {
294        Gravity = new Vector(0, -1000);
295
296    }
297    void AmmuAseella2()
298    {
299        PhysicsObject ammus = pelaaja2.Weapon.Shoot();
300
301        if (ammus != null)
302        {
303            ammus.Size *= 1;
304
305        }
306    }
307    void AmmuAseella1()
308    {
309        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
310
311        if (ammus != null)
312        {
313            ammus.Size *= 1;
314        }
315    }
316    void AmmusOsui(PhysicsObject ammus, PhysicsObject pahis)
317    {
318
319        ammus.Destroy();
320
321        foreach (Pahis p in pahikset)
322        {
323            if (p == pahis)
324            {
325                p.Elamat--;
326                if (p.Elamat <= 0)
327                    p.Destroy();
328            }
329        }
330
331
332
333    }
334
335    void LuoLaskuri()
336    {
337        pisteLaskuri = new IntMeter(0);
338
339        Label pisteNaytto = new Label();
340        pisteNaytto.X = Screen.Left + 100;
341        pisteNaytto.Y = Screen.Top - 100;
342        pisteNaytto.TextColor = Color.Red;
343
344        pisteNaytto.BindTo(pisteLaskuri);
345        Add(pisteNaytto);
346
347        Label pisteTeksti = new Label("Pisteitä: ");
348        pisteTeksti.X = Screen.Left + 50;
349        pisteTeksti.Y = Screen.Top - 100;
350        pisteTeksti.TextColor = Color.Red;
351        Add(pisteTeksti);
352    }
353
354    void Valikko()
355    {
356        ClearAll();
357        Level.BackgroundColor = Color.Blue;
358        Level.Background.Image = taustakuva;
359        valikonKohdat = new List<Label>();
360
361        Label kohta1 = new Label("Aloita uusi peli");
362        kohta1.Position = new Vector(0, 40);
363        valikonKohdat.Add(kohta1);
364
365        Label kohta2 = new Label("Lopeta");
366        kohta2.Position = new Vector(0, -40);
367        valikonKohdat.Add(kohta2);
368
369        foreach (Label valikonKohta in valikonKohdat)
370        {
371            Add(valikonKohta);
372        }
373
374        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaAlusta, null);
375        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
376
377        Mouse.IsCursorVisible = true;
378        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
379        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
380
381    }
382
383    void ValikossaLiikkuminen(AnalogState hiirenTila)
384    {
385        foreach (Label kohta in valikonKohdat)
386        {
387            if (Mouse.IsCursorOn(kohta))
388            {
389                kohta.TextColor = Color.Red;
390            }
391            else
392            {
393
394                kohta.TextColor = Color.Black;
395            }
396        }
397    }
398    void naytaPisteet()
399    {
400        HighScoreWindow topIkkuna = new HighScoreWindow("Dall of Dude 2D",
401                     "Parhaat pisteet",
402                     "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
403                     topLista, pisteLaskuri.Value);
404        topIkkuna.Closed += TallennaPisteet;
405        Add(topIkkuna);
406
407    }
408    void TallennaPisteet(Window sender)
409    {
410        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
411        AloitaAlusta();
412    }
413    PhysicsObject lisaaMaali()
414    {
415        PhysicsObject maali = new PhysicsObject(40, 40);
416        maali.Shape = Shape.Circle;
417        Add(maali);
418        maali.Tag = "maali";
419        return maali;
420    }
421    void osumaaliin(PhysicsObject hahmo, PhysicsObject maali)
422    {
423        if (maali.Tag.ToString() == "maali")
424        {
425            ClearAll();
426            MessageDisplay.Add("Pääsit pelin läpi!");
427            lisaaNappaimet();
428
429
430
431        }
432    }
433
434
435    PhysicsObject lisaaAmpuvaPahis()
436    {
437        Pahis pahis = new Pahis(40, 40);
438        pahis.Mass = 10.0;
439        pahis.Shape = Shape.Circle;
440        pahis.Image = ampuvapahisKuva;
441        pahis.Tag = "vihu";
442        pahis.Elamat = 5;
443
444        pahikset.Add(pahis);
445
446
447
448        TagFollowerBrain pahiksenAivot2 = new TagFollowerBrain("pelaaja", 50);
449
450        pahiksenAivot2.Active = true;
451        pahiksenAivot2.TargetFollowDistance = 600;
452        pahiksenAivot2.Speed = 4000;
453
454        pahis.Brain = pahiksenAivot2;
455
456
457        Add(pahis);
458        return (pahis);
459
460    }
461    void vaihdaRynkkyyn()
462    {
463         
464
465        pelaaja2.Weapon = new AssaultRifle(60, 20);
466        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
467        pelaaja2.Weapon.InfiniteAmmo = true;
468    }
469    void vaihdaPlasmaCannoniin()
470    {
471
472
473        pelaaja2.Weapon = new PlasmaCannon(60, 20);
474        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
475        pelaaja2.Weapon.InfiniteAmmo = true;
476    }
477    void vaihdaLaserPyssyyn()
478    {
479
480
481        pelaaja2.Weapon = new LaserGun(60, 20);
482        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
483        pelaaja2.Weapon.InfiniteAmmo = true;
484    }
485
486
487
488
489
490    public class Pahis : PhysicsObject
491    {
492        public int Elamat { get; set; }
493
494        public Pahis(double width, double height)
495            : base(width, height)
496        {
497
498        }
499
500
501    }
502}
503
Note: See TracBrowser for help on using the repository browser.