source: 2011/26/OssiV/dall of dude 2d.cs @ 2451

Revision 2451, 18.5 KB checked in by osmavanh, 8 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    Image maalinkuva = LoadImage("maali2");
33    Image kaupankuva = LoadImage("kauppa");
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
51    void luoKentta()
52    {
53        TileMap kentta = TileMap.FromFile("kentta1.txt");
54        kentta['='] = lisaaHaivePalikka;
55        kentta['#'] = lisaaTaso;
56        kentta['*'] = lisaaTahti;
57        kentta['N'] = lisaaPelaaja;
58        kentta['M'] = lisaaPelaaja2;
59        //kentta['V'] = lisaaPahis;
60        kentta['A'] = lisaaAmpuvaPahis;
61        kentta['H'] = lisaaMaali;
62        kentta['K'] = luoKauppa;
63
64
65        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
66        Level.CreateBorders();
67        Level.Background.CreateGradient(Color.White, Color.Blue);
68
69
70
71
72
73
74
75    }
76
77    PhysicsObject lisaaTaso()
78    {
79        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
80        taso.Color = Color.Black;
81        return taso;
82    }
83
84    PhysicsObject lisaaTahti()
85    {
86        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
87        tahti.Image = tahtiKuva;
88        tahti.Tag = "tahti";
89        return tahti;
90    }
91
92    PlatformCharacter lisaaPelaaja()
93    {
94        pelaaja1 = new PlatformCharacter(40, 40);
95        pelaaja1.Mass = 4.0;
96        pelaaja1.Tag = "pelaaja";
97        pelaaja1.Shape = Shape.Circle;
98        pelaaja1.Image = pelaajanKuva;
99        pelaaja1.RightWalkingAnimation = new Animation(pelaajanKuva);
100        pelaaja1.LeftWalkingAnimation = new Animation(pelaaja1kaannettu);
101        AddCollisionHandler(pelaaja1, osuKauppaan);
102        AddCollisionHandler(pelaaja1, osuTahteen);
103        AddCollisionHandler(pelaaja1, osuHaivePalikkaan);
104        AddCollisionHandler(pelaaja1, osuPelaajaan);
105        AddCollisionHandler(pelaaja1, osumaaliin);
106        AddCollisionHandler(pelaaja1, osumaaliin2);
107
108        pelaaja1.Weapon = new AssaultRifle(50, 20);
109        pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
110        pelaaja1.Weapon.InfiniteAmmo = false;
111
112
113        return pelaaja1;
114    }
115
116    void lisaaNappaimet()
117    {
118        // Komennot
119        Keyboard.Listen(Key.R, ButtonState.Released, naytaPisteet, "Huippu tulokset");
120        Keyboard.Listen(Key.Home, ButtonState.Pressed, kooditPaalle, null);
121        Keyboard.Listen(Key.T, ButtonState.Pressed, AloitaAlusta, "aloita alusta");
122        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
123        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
124        // pelaaja1 ohjaimet
125        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
126        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
127        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
128        Keyboard.Listen(Key.NumPad0, ButtonState.Down, AmmuAseella1, "Ammu");
129        Keyboard.Listen(Key.NumPad1, ButtonState.Down, tähtää, "tähtää", pelaaja1, 3.0);
130        Keyboard.Listen(Key.NumPad2, ButtonState.Down, tähtää, "tähtää", pelaaja1, -3.0);
131
132        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
133
134        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
135        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
136        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
137
138        Keyboard.Listen(Key.NumPad4, ButtonState.Pressed, vaihdaPlasmaCannoniin2, "plasmatykki");
139        Keyboard.Listen(Key.NumPad5, ButtonState.Pressed, vaihdaRynkkyyn2, "rynnäkkökivääri");
140
141
142        // Pelaaja2 ohjaimet
143        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
144        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
145        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja2 hyppää", pelaaja2, hyppyNopeus);
146        Keyboard.Listen(Key.O, ButtonState.Up, painottomuusLoppuu, null);
147        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella2, "Ammu");
148        Keyboard.Listen(Key.B, ButtonState.Down, tähtää, "tähtää", pelaaja2, 4.0);
149        Keyboard.Listen(Key.H, ButtonState.Down, tähtää, "tähtää", pelaaja2, -4.0);
150
151
152
153    }
154    void tähtää(PlatformCharacter hahmo, double muutos)
155    {
156        hahmo.Weapon.Angle += Angle.FromDegrees(muutos);
157    }
158
159
160    void painottomuus()
161    {
162        Gravity = new Vector(0.0, 150.0);
163
164
165    }
166    void liikuta(PlatformCharacter hahmo, double nopeus)
167    {
168        hahmo.Walk(nopeus);
169    }
170
171    void hyppaa(PlatformCharacter hahmo, double nopeus)
172    {
173        hahmo.Jump(nopeus);
174    }
175
176    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
177    {
178        if (kohde.Tag.ToString() == "tahti")
179        {
180            maaliAani.Play();
181            MessageDisplay.Add("Sait pisteen!");
182            kohde.Destroy();
183            pisteLaskuri.Value++;
184
185
186
187
188        }
189    }
190
191    PlatformCharacter lisaaPelaaja2()
192    {
193        pelaaja2 = new PlatformCharacter(40, 40);
194        pelaaja2.Shape = Shape.Circle;
195        pelaaja2.Mass = 4.0;
196        pelaaja2.Tag = "pelaaja";
197        pelaaja2.Image = pelaajan2Kuva;
198        //törmäyksen käsittelijät
199        AddCollisionHandler(pelaaja2, osuTahteen);
200
201        AddCollisionHandler(pelaaja2, osuKauppaan);
202        AddCollisionHandler(pelaaja2, osuPelaajaan);
203        AddCollisionHandler(pelaaja2, osuHaivePalikkaan);
204        AddCollisionHandler(pelaaja2, osumaaliin);
205        AddCollisionHandler(pelaaja2, osumaaliin2);
206
207        pelaaja2.RightWalkingAnimation = new Animation(pelaajan2Kuva);
208        pelaaja2.LeftWalkingAnimation = new Animation(pelaaja2kaannetty);
209
210        pelaaja2.Weapon = new AssaultRifle(50, 20);
211        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
212        pelaaja2.Weapon.InfiniteAmmo = false;
213
214
215
216        return pelaaja2;
217    }
218
219    void AloitaAlusta()
220    {
221        ClearAll();
222        pahikset = new List<Pahis>();
223        luoKentta();
224        lisaaNappaimet();
225        LuoLaskuri();
226        Camera.Follow(pelaaja1);
227        Camera.ZoomFactor = 1.2;
228        Camera.StayInLevel = true;
229    }
230
231    IntMeter LuoPisteLaskuri(double x, double y)
232    {
233        IntMeter laskuri = new IntMeter(0);
234        laskuri.MaxValue = 10;
235        Label naytto = new Label();
236        naytto.BindTo(laskuri);
237        naytto.X = x;
238        naytto.Y = y;
239        naytto.TextColor = Color.White;
240        naytto.BorderColor = Level.BackgroundColor;
241        naytto.Color = Level.BackgroundColor;
242        Add(naytto);
243        return laskuri;
244    }
245
246    PhysicsObject lisaaHaivePalikka()
247    {
248
249        PhysicsObject tahti = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
250        tahti.Image = tahtiKuva2;
251        tahti.Tag = "musta neliö";
252        return tahti;
253
254
255    }
256    void osuHaivePalikkaan(PhysicsObject hahmo, PhysicsObject haivePalikka)
257    {
258        if (haivePalikka.Tag.ToString() == "musta neliö")
259        {
260
261
262            haivePalikka.Destroy();
263
264
265        }
266    }
267    PhysicsObject lisaaPahis()
268    {
269        Pahis pahis = new Pahis(40, 40);
270        pahis.Mass = 10.0;
271        pahis.Shape = Shape.Circle;
272        pahis.Image = pahiksenKuva;
273        pahis.Tag = "vihu";
274        pahis.Elamat = 5;
275
276        pahikset.Add(pahis);
277
278
279
280        TagFollowerBrain pahiksenAivot = new TagFollowerBrain("pelaaja", 50);
281
282        pahiksenAivot.Active = true;
283        pahiksenAivot.TargetFollowDistance = 600;
284        pahiksenAivot.Speed = 4000;
285        //pahiksenAivot.TargetCloseDistance = 20;
286
287
288
289
290        //pahiksenAivot.StopWhenTargetClose = true;
291        pahis.Brain = pahiksenAivot;
292
293
294        Add(pahis);
295        return (pahis);
296
297
298
299    }
300    void osuPelaajaan(PhysicsObject hahmo, PhysicsObject pahis)
301    {
302        if (pahis.Tag.ToString() == "vihu")
303        {
304            if (hahmo == pelaaja1)
305            {
306                Camera.Follow(pelaaja2);
307            }
308            hahmo.Destroy();
309
310        }
311    }
312    void painottomuusLoppuu()
313    {
314        Gravity = new Vector(0, -1000);
315
316    }
317    void AmmuAseella2()
318    {
319        PhysicsObject ammus = pelaaja2.Weapon.Shoot();
320
321        if (ammus != null)
322        {
323            ammus.Size *= 1;
324
325        }
326    }
327    void AmmuAseella1()
328    {
329        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
330
331        if (ammus != null)
332        {
333            ammus.Size *= 1;
334        }
335    }
336    void AmmusOsui(PhysicsObject ammus, PhysicsObject pahis)
337    {
338
339        ammus.Destroy();
340
341        foreach (Pahis p in pahikset)
342        {
343            if (p == pahis)
344            {
345                p.Elamat--;
346                if (p.Elamat <= 0)
347                    p.Destroy();
348                pisteLaskuri.Value = pisteLaskuri.Value + 10;
349            }
350        }
351
352
353
354    }
355
356    void LuoLaskuri()
357    {
358        pisteLaskuri = new IntMeter(0);
359     
360        Label pisteNaytto = new Label();
361        pisteNaytto.X = Screen.Left + 100;
362        pisteNaytto.Y = Screen.Top - 100;
363        pisteNaytto.TextColor = Color.Red;
364
365        pisteNaytto.BindTo(pisteLaskuri);
366        Add(pisteNaytto);
367
368        Label pisteTeksti = new Label("Pisteitä: ");
369        pisteTeksti.X = Screen.Left + 50;
370        pisteTeksti.Y = Screen.Top - 100;
371        pisteTeksti.TextColor = Color.Red;
372        Add(pisteTeksti);
373    }
374
375    void Valikko()
376    {
377        ClearAll();
378        Level.BackgroundColor = Color.Blue;
379        Level.Background.Image = taustakuva;
380        valikonKohdat = new List<Label>();
381
382        Label kohta1 = new Label("Aloita uusi peli");
383        kohta1.Position = new Vector(0, 40);
384        valikonKohdat.Add(kohta1);
385
386        Label kohta2 = new Label("Lopeta");
387        kohta2.Position = new Vector(0, -80);
388        valikonKohdat.Add(kohta2);
389
390
391        foreach (Label valikonKohta in valikonKohdat)
392        {
393            Add(valikonKohta);
394        }
395
396        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaAlusta, null);
397        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
398
399
400        Mouse.IsCursorVisible = true;
401        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
402        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
403
404    }
405
406    void ValikossaLiikkuminen(AnalogState hiirenTila)
407    {
408        foreach (Label kohta in valikonKohdat)
409        {
410            if (Mouse.IsCursorOn(kohta))
411            {
412                kohta.TextColor = Color.Red;
413            }
414            else
415            {
416
417                kohta.TextColor = Color.Black;
418            }
419        }
420    }
421    void naytaPisteet()
422    {
423        HighScoreWindow topIkkuna = new HighScoreWindow("Dall of Dude 2D",
424                     "Parhaat pisteet",
425                     "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
426                     topLista, pisteLaskuri.Value);
427        topIkkuna.Closed += TallennaPisteet;
428        Add(topIkkuna);
429
430    }
431    void TallennaPisteet(Window sender)
432    {
433        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
434
435    }
436    PhysicsObject lisaaMaali()
437    {
438        PhysicsObject maali = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
439        maali.Shape = Shape.Circle;
440        maali.Image = maalinkuva;
441        Add(maali);
442        maali.Tag = "maali";
443        return maali;
444    }
445    void osumaaliin(PhysicsObject hahmo, PhysicsObject maali)
446    {
447        if (maali.Tag.ToString() == "maali")
448        {
449
450            ClearAll();
451            MessageDisplay.Add("Pääsit pelin läpi!");
452            naytaPisteet();
453            Kentta2();
454            pisteLaskuri.Value += 200;
455
456
457        }
458    }
459
460
461    PhysicsObject lisaaAmpuvaPahis()
462    {
463        Pahis pahis = new Pahis(40, 40);
464        pahis.Mass = 10.0;
465        pahis.Shape = Shape.Circle;
466        pahis.Image = ampuvapahisKuva;
467        pahis.Tag = "vihu";
468        pahis.Elamat = 5;
469
470        pahikset.Add(pahis);
471
472
473
474        TagFollowerBrain pahiksenAivot2 = new TagFollowerBrain("pelaaja", 50);
475
476        pahiksenAivot2.Active = true;
477        pahiksenAivot2.TargetFollowDistance = 600;
478        pahiksenAivot2.Speed = 4000;
479
480        pahis.Brain = pahiksenAivot2;
481
482
483        Add(pahis);
484        return (pahis);
485
486    }
487    void vaihdaRynkkyyn()
488    {
489        if (pisteLaskuri.Value > 100)
490        {
491            pisteLaskuri.Value = pisteLaskuri.Value -= 100;
492            pelaaja2.Weapon = new AssaultRifle(60, 20);
493            pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
494        }
495
496    }
497    void vaihdaPlasmaCannoniin()
498    {
499        if (pisteLaskuri.Value > 200)
500        {
501            pisteLaskuri.Value = pisteLaskuri.Value -= 200;
502            pelaaja2.Weapon = new PlasmaCannon(60, 20);
503            pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
504        }
505
506    }
507    void vaihdaLaserPyssyyn()
508    {
509
510        pisteLaskuri.Value = pisteLaskuri.Value -= 10000;
511        pelaaja2.Weapon = new LaserGun(60, 20);
512        pelaaja2.Weapon.ProjectileCollision += AmmusOsui;
513       
514
515    }
516    void vaihdaRynkkyyn2()
517    {
518
519        if (pisteLaskuri.Value > 100)
520        {
521            pisteLaskuri.Value = pisteLaskuri.Value -= 100;
522            pelaaja1.Weapon = new AssaultRifle(60, 20);
523            pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
524        }
525    }
526    void vaihdaPlasmaCannoniin2()
527    {
528        if (pisteLaskuri.Value > 200)
529        {
530            pisteLaskuri.Value = pisteLaskuri.Value -= 200;
531            pelaaja1.Weapon = new PlasmaCannon(60, 20);
532            pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
533        }
534    }
535    void vaihdaLaserPyssyyn2()
536    {
537
538        pisteLaskuri.Value = pisteLaskuri.Value -= 10000;
539        pelaaja1.Weapon = new LaserGun(60, 20);
540        pelaaja1.Weapon.ProjectileCollision += AmmusOsui;
541        pelaaja1.Weapon.InfiniteAmmo = true;
542    }
543    void Kentta2()
544    {
545        ClearAll();
546        pahikset = new List<Pahis>();
547        luoKentta2();
548        lisaaNappaimet();
549        LuoLaskuri();
550        Camera.Follow(pelaaja1);
551        Camera.ZoomFactor = 1.2;
552        Camera.StayInLevel = true;
553    }
554    void luoKentta2()
555    {
556        TileMap kentta = TileMap.FromFile("Copy of kentta1.txt");
557        kentta['='] = lisaaHaivePalikka;
558        kentta['#'] = lisaaTaso;
559        kentta['*'] = lisaaTahti;
560        kentta['N'] = lisaaPelaaja;
561        kentta['M'] = lisaaPelaaja2;
562        kentta['V'] = lisaaPahis;
563        kentta['A'] = lisaaAmpuvaPahis;
564        kentta['W'] = lisaaMaali2;
565
566        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
567        Level.CreateBorders();
568        Level.Background.CreateGradient(Color.White, Color.Blue);
569    }
570    void kooditPaalle()
571    {
572        Keyboard.Listen(Key.F, ButtonState.Pressed, Kentta2, null);
573        Keyboard.Listen(Key.D3, ButtonState.Pressed, vaihdaLaserPyssyyn, null);
574        Keyboard.Listen(Key.O, ButtonState.Down, painottomuus, null);
575        Keyboard.Listen(Key.NumPad6, ButtonState.Pressed, vaihdaLaserPyssyyn2, null);
576        Keyboard.Listen(Key.P, ButtonState.Down, lisaaPisteita, null);
577    }
578    PhysicsObject lisaaMaali2()
579    {
580        PhysicsObject maali2 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
581        maali2.Shape = Shape.Circle;
582        maali2.Image = maalinkuva;
583        Add(maali2);
584        maali2.Tag = "maali2";
585        return maali2;
586    }
587    void osumaaliin2(PhysicsObject hahmo, PhysicsObject maali2)
588    {
589        if (maali2.Tag.ToString() == "maali2")
590        {
591            naytaPisteet();
592            ClearAll();
593            MessageDisplay.Add("Pääsit pelin läpi!");
594            lisaaNappaimet();
595            pisteLaskuri.Value += 200;
596
597
598
599        }
600    }
601    PhysicsObject luoKauppa()
602    {
603        PhysicsObject kauppa = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
604        kauppa.Color = Color.ForestGreen;
605        kauppa.Tag = "kauppa";
606        kauppa.Image = kaupankuva;
607        return (kauppa);
608
609    }
610    void osuKauppaan(PhysicsObject hahmo, PhysicsObject kohde)
611    {
612        if (kohde.Tag.ToString() == "kauppa")
613        {
614
615            MessageDisplay.Add("rynnäkkökivääri 100 p osta painamalla J ja plasmatykki 200p osta painamalla K ");
616            MessageDisplay.MaxMessageCount = 0;
617
618            Keyboard.Listen(Key.J, ButtonState.Pressed, vaihdaRynkkyyn, "osta rynkky");
619            Keyboard.Listen(Key.K, ButtonState.Pressed, vaihdaPlasmaCannoniin, " osta plasmatykki");
620            Keyboard.Listen(Key.D2, ButtonState.Pressed, vaihdaPlasmaCannoniin, "plasmatykki");
621            Keyboard.Listen(Key.D1, ButtonState.Pressed, vaihdaRynkkyyn, "rynnäkkökivääri");
622            Keyboard.Listen(Key.H, ButtonState.Pressed, vaihdaLaserPyssyyn, null);
623        }
624    }
625        void lisaaPisteita()
626        {
627            pisteLaskuri.Value = pisteLaskuri.Value += 1000000;
628        }
629    }
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645    public class Pahis : PhysicsObject
646    {
647        public int Elamat { get; set; }
648
649        public Pahis(double width, double height)
650            : base(width, height)
651        {
652
653        }
654
655
656    }
657
658
659
660
661
662
Note: See TracBrowser for help on using the repository browser.