source: 2017/31/LeoM/_/_/_/_.cs @ 9390

Revision 9390, 18.1 KB checked in by npo17_89, 4 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
9
10class Vihu : PlatformCharacter
11{
12    private IntMeter elamaLaskuri = new IntMeter(16, 0, 16);
13    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
14
15    public Vihu(double leveys, double korkeus)
16        : base(leveys, korkeus)
17    {
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19
20    }
21}
22
23class Pelaaja : PlatformCharacter
24{
25    private DoubleMeter elamaLaskuri = new DoubleMeter(10, 0, 10);
26    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
27
28    public Pelaaja(double leveys, double korkeus)
29        : base(leveys, korkeus)
30    {
31        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
32
33    }
34}
35
36//class Pelaaja2 : PlatformCharacter
37//{
38//    private DoubleMeter elamaLaskuri = new DoubleMeter(8, 0, 8);
39//    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
40
41//    public pelaaja2(double leveys, double korkeus)
42//        : base(leveys, korkeus)
43//    {
44//        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
45
46//    }
47//}
48public class _ : PhysicsGame
49{
50    AssaultRifle pelaajan1Ase;
51    AssaultRifle pelaajan2Ase;
52
53    //AssaultRifle VihunAse;
54    const double nopeus = 200;
55    const double hyppyNopeus = 750;
56    const int RUUDUN_KOKO = 20;
57
58    Pelaaja pelaaja1;
59    Pelaaja pelaaja2;
60    Image loppukuva = LoadImage("gate");
61    Image palikankuva = LoadImage("palikka");
62    Image ammuksenkuva = LoadImage("ammus");
63    Image pelaajanKuva = LoadImage("kissa");
64    Image tahtiKuva = LoadImage("tahti");
65    Image pizzaKuva = LoadImage("pizza");
66    Image vihukuva = LoadImage("auto");
67    Image paavihukuva = LoadImage("orkki");
68    SoundEffect maaliAani = LoadSoundEffect("maali");
69    Image maalikuva = LoadImage("ovi");
70    //private PlatformCharacter vihu;
71    //private Vihu paavihu;
72    Image taustaKuva = LoadImage("putin");
73    Image taustaKuva2 = LoadImage("putin2");
74
75    int kenttaNro = 1;
76
77
78    public override void Begin()
79    {
80       
81        MediaPlayer.Play("esa");
82        MediaPlayer.IsRepeating = true;
83        AlkuValikko();
84    }
85
86    void AlkuValikko()
87    {
88        Level.Background.Image = taustaKuva2;
89        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
90"Aloita peli", "Lopeta");
91
92        alkuValikko.AddItemHandler(0, AloitaPeli);
93
94        alkuValikko.AddItemHandler(1, Exit);
95        Add(alkuValikko);
96
97
98    }
99
100
101    void AloitaPeli()
102    {
103        ClearAll();
104        Gravity = new Vector(0, -1000);
105
106        if (kenttaNro == 1) LuoKentta("kentta1");
107        else if (kenttaNro == 2) LuoKentta("kentta2");
108        else if (kenttaNro == 3) LuoKentta("kentta3");
109        else if (kenttaNro > 3) Exit();
110
111        LisaaNappaimet();
112
113        Camera.Follow(pelaaja1);
114        Camera.ZoomFactor = 3.5;
115        Camera.StayInLevel = true;
116    }
117    void LuoKentta(string kentanNimi)
118    {
119        TileMap kentta = TileMap.FromLevelAsset(kentanNimi);
120        kentta.SetTileMethod('#', LisaaTaso);
121        kentta.SetTileMethod('l', LisaaLoppu);
122        kentta.SetTileMethod('M', LisaaMaali);
123        kentta.SetTileMethod('*', LisaaTahti);
124        kentta.SetTileMethod('n', LisaaPelaaja);
125        kentta.SetTileMethod('N', LisaaPelaaja2);
126        kentta.SetTileMethod('p', LisaaPizza);
127        kentta.SetTileMethod('v', LisaaVihu);
128        kentta.SetTileMethod('V', LisaaPaaVihu);
129        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
130        Level.CreateBorders();
131        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
132        Level.Background.Image = taustaKuva;
133       
134    }
135
136    void LisaaTaso(Vector paikka, double leveys, double korkeus)
137    {
138        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
139        taso.Position = paikka;
140        taso.Image = palikankuva;
141        taso.Tag = "taso";
142        Add(taso);
143    }
144
145    void LisaaTahti(Vector paikka, double leveys, double korkeus)
146    {
147        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
148        tahti.IgnoresCollisionResponse = true;
149        tahti.Position = paikka;
150        tahti.Image = tahtiKuva;
151        tahti.Tag = "tahti";
152        Add(tahti);
153    }
154    void LisaaPizza(Vector paikka, double leveys, double korkeus)
155    {
156        PhysicsObject pizza = PhysicsObject.CreateStaticObject(leveys, korkeus);
157        pizza.IgnoresCollisionResponse = true;
158        pizza.Position = paikka;
159        pizza.Image = pizzaKuva;
160        pizza.Tag = "pizza";
161        Add(pizza);
162
163
164    }
165
166    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
167    {
168        PhysicsObject ovi = PhysicsObject.CreateStaticObject(leveys, korkeus);
169        ovi.Position = paikka;
170        ovi.Image = maalikuva;
171        ovi.Tag = "loppu";
172        Add(ovi);
173        ovi.IgnoresCollisionResponse = true;
174
175    }
176    void LisaaMaali(Vector paikka, double leveys, double korkeus)
177    {
178        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
179        maali.Position = paikka;
180        maali.Image = loppukuva;
181        maali.Tag = "maali";
182        Add(maali);
183        maali.IgnoresCollisionResponse = true;
184
185    }
186    void TormaaMaaliin(PhysicsObject hahmo, PhysicsObject maali)
187    {
188        Pause();
189        maaliAani.Play();
190        //MessagDisplay.Add("Onnittelut!!! Voitit pelin!!!");
191        MessageWindow ikkuna = new MessageWindow("Onnittelut!\n \nVoitit pelin!");
192        ikkuna.Closed += (w) => AlkuValikko();
193        Add(ikkuna);
194       
195    }
196   
197        void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
198    {
199        pelaaja1 = new Pelaaja(leveys, korkeus);
200        pelaaja1.Position = paikka;
201        pelaaja1.Mass = 4.0;
202        pelaaja1.Image = pelaajanKuva;
203        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
204        AddCollisionHandler(pelaaja1, "pizza", TormaaPizzaan);
205        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
206        AddCollisionHandler(pelaaja1, "loppu", TormaaLoppuun);
207        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
208        pelaaja1.Tag = "pelaaja";
209        Add(pelaaja1);
210        pelaajan1Ase = new AssaultRifle(10, 10);
211        pelaaja1.Weapon = pelaajan1Ase;
212
213        //pelaaja1.Weapon.FireRate = 2.0;
214        pelaaja1.Weapon.CanHitOwner = false;
215        pelaajan1Ase.Ammo.Value = 200;
216        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
217        pelaaja1.ElamaLaskuri.LowerLimit += delegate
218        {
219
220            Explosion rajahdys = new Explosion(100);
221            rajahdys.Position = pelaaja1.Position;
222            Add(rajahdys);
223            Timer.SingleShot(2, AloitaAlusta);
224        };
225        pelaajan1Ase.IsVisible = false;
226        ProgressBar elamaPalkki = new ProgressBar(150, 20);
227        elamaPalkki.X = Screen.Right - 150;
228        elamaPalkki.Y = Screen.Top - 200;
229        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
230        Add(elamaPalkki);
231
232    }
233
234    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
235    {
236        pelaaja2 = new Pelaaja(leveys, korkeus);
237        pelaaja2.Position = paikka;
238        pelaaja2.Mass = 4.0;
239        pelaaja2.Image = pelaajanKuva;
240        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
241        AddCollisionHandler(pelaaja2, "pizza", TormaaPizzaan);
242        AddCollisionHandler(pelaaja2, "vihu", TormaaVihuun);
243        AddCollisionHandler(pelaaja2, "loppu", TormaaLoppuun);
244        AddCollisionHandler(pelaaja2, "maali", TormaaMaaliin);
245        pelaaja2.Tag = "pelaaja2";
246        Add(pelaaja2);
247        pelaajan2Ase = new AssaultRifle(10, 10);
248        pelaaja2.Weapon = pelaajan2Ase;
249
250        //pelaaja1.Weapon.FireRate = 2.0;
251        pelaaja2.Weapon.CanHitOwner = false;
252        pelaajan2Ase.Ammo.Value = 200;
253        pelaaja2.Weapon.ProjectileCollision = AmmusOsui;
254        pelaaja2.ElamaLaskuri.LowerLimit += delegate
255        {
256
257            Explosion rajahdys = new Explosion(100);
258            rajahdys.Position = pelaaja2.Position;
259            Add(rajahdys);
260            Timer.SingleShot(2, AloitaAlusta);
261        };
262        pelaajan2Ase.IsVisible = false;
263
264        ProgressBar elamaPalkki = new ProgressBar(150, 20);
265        elamaPalkki.X = Screen.Right - 150;
266        elamaPalkki.Y = Screen.Top - 150;
267        elamaPalkki.BindTo(pelaaja2.ElamaLaskuri);
268        Add(elamaPalkki);
269
270    }
271    void LisaaVihu(Vector paikka, double leveys, double korkeus)
272    {
273        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
274        vihu.Position = paikka;
275        vihu.Mass = 4.0;
276        vihu.Image = vihukuva;
277        AddCollisionHandler(vihu, pelaaja1);
278        vihu.Tag = "vihu";
279        vihu.IgnoresCollisionResponse = false;
280        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
281        tasoAivot.Speed = 100;
282        tasoAivot.JumpSpeed = 700;
283        tasoAivot.TriesToJump = true;
284        vihu.Brain = tasoAivot;
285        Add(vihu);
286
287    }
288    void LisaaPaaVihu(Vector paikka, double leveys, double korkeus)
289    {
290        Vihu paavihu = new Vihu(leveys, korkeus);
291        paavihu.Position = paikka;
292        paavihu.Mass = 4.0;
293        paavihu.Image = paavihukuva;
294        Add(paavihu);
295        paavihu.Tag = "päävihu";
296        paavihu.IgnoresCollisionResponse = false;
297        paavihu.ElamaLaskuri.LowerLimit += delegate
298        {
299
300            Explosion rajahdys = new Explosion(100);
301            rajahdys.Position = paavihu.Position;
302            Add(rajahdys);
303        };
304
305        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
306        tasoAivot.Speed = 50;
307        tasoAivot.JumpSpeed = 300;
308        tasoAivot.TriesToJump = true;
309        paavihu.Brain = tasoAivot;
310        tasoAivot.FallsOffPlatforms = true;
311
312        paavihu.Weapon = new AssaultRifle(30, 10);
313        paavihu.Weapon.CanHitOwner = false;
314        paavihu.Weapon.ProjectileCollision = VihunAmmusOsui;
315        paavihu.Weapon.IsVisible = false;
316
317
318        Timer ajastin = new Timer();
319        ajastin.Interval = 1;
320        ajastin.Timeout += delegate
321        {
322            PhysicsObject kohde = pelaaja1;
323            if (Vector.Distance(paavihu.Position, pelaaja2.Position) < Vector.Distance(paavihu.Position, pelaaja1.Position))
324            {
325                kohde = pelaaja2;
326            }
327
328            paavihu.Weapon.AbsoluteAngle = (kohde.Position - paavihu.Position).Angle;
329            PhysicsObject ammus = paavihu.Weapon.Shoot();
330
331            if (ammus != null)
332            {
333                ammus.IgnoresCollisionResponse = true;
334                ammus.Tag = "ammus";
335                ammus.Size *= 0.5;
336                ammus.Image = ammuksenkuva;
337                ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
338                ammus.Velocity *= 0.5;
339                ammus.CollisionIgnoreGroup = 3;
340            }
341
342            if (paavihu.IsDestroyed)
343                ajastin.Stop();
344
345        };
346        ajastin.Start();
347
348    }
349
350    void VihunAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
351    {
352        if (kohde.Tag == "taso")
353        {
354            ammus.Destroy();
355        }
356
357        if (kohde.Tag == "pelaaja")
358        {
359            pelaaja1.ElamaLaskuri.Value -= 0.5;
360            ammus.Destroy();
361        }
362
363        if (kohde.Tag == "pelaaja2")
364        {
365            pelaaja2.ElamaLaskuri.Value -= 0.5;
366            ammus.Destroy();
367        }
368    }
369
370
371    void TormaaVihuun(PhysicsObject Pelaaja, PhysicsObject vihu)
372    {
373        pelaaja1.ElamaLaskuri.Value -= 1;
374        MessageDisplay.Add("jäit auton alle!");
375    }
376
377    private void AddCollisionHandler(PlatformCharacter vihu, PlatformCharacter pelaaja1)
378    {
379
380    }
381
382    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
383    {
384        if (kohde.Tag != "pelaaja" && kohde.Tag != "ammus")
385        {
386            ammus.Destroy();
387        }
388
389        if (kohde.Tag == "vihu")
390        {
391            kohde.Destroy();
392            Explosion rajahdys = new Explosion(50);
393            rajahdys.Position = kohde.Position;
394            Add(rajahdys);
395        }
396        if (kohde.Tag == "päävihu")
397        {
398            (kohde as Vihu).ElamaLaskuri.Value -= 1;
399        }
400    }
401
402    void AmmuAseella(PlatformCharacter pelaaja)
403    {
404        PhysicsObject ammus = pelaaja.Weapon.Shoot();
405
406        if (ammus != null)
407        {
408            ammus.Tag = "ammus";
409            ammus.Size *= 0.5;
410            ammus.Image = ammuksenkuva;
411            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
412            ammus.Velocity *= 0.5;
413            ammus.CollisionIgnoreGroup = 3;
414        }
415    }
416    //void AmmuAseella2(PlatformCharacter pelaaja)
417    //{
418    //    PhysicsObject ammus = pelaaja2.Weapon.Shoot();
419
420    //    if (ammus != null)
421    //    {
422    //        ammus.Tag = "ammus";
423    //        ammus.Size *= 0.5;
424    //        ammus.Image = ammuksenkuva;
425    //        ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
426    //        ammus.Velocity *= 0.5;
427    //        ammus.CollisionIgnoreGroup = 3;
428    //    }
429    //}
430    void LisaaNappaimet()
431    {
432        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
433        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
434
435        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
436        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
437        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
438
439        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
440
441        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
442        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
443        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
444        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja1);
445        ControllerOne.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella, "", pelaaja1);
446
447        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
448
449
450        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
451        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
452        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
453        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", pelaaja2);
454        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Pressed, AmmuAseella, "", pelaaja2);
455
456        //Keyboard.Listen(Key.r, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
457
458        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmuAseella, "Ammu", pelaaja1);
459
460        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
461        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
462        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
463        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, AmmuAseella, "Ammu", pelaaja2);
464    }
465
466    void LiikutaPelaajaa(AnalogState tatinTila, PlatformCharacter pelaaja)
467    {
468        Vector tatinAsento = tatinTila.StateVector;
469        Liikuta(pelaaja, tatinAsento.X * nopeus);
470    }
471
472    void Liikuta(PlatformCharacter hahmo, double nopeus)
473    {
474        hahmo.Walk(nopeus);
475    }
476
477    void Hyppaa(PlatformCharacter hahmo, double nopeus)
478    {
479        hahmo.Jump(nopeus);
480    }
481
482    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
483    {
484        maaliAani.Play();
485        MessageDisplay.Add("Keräsit tähden!");
486        tahti.Destroy();
487    }
488    void TormaaLoppuun(PhysicsObject hahmo, PhysicsObject ovi)
489    {
490        maaliAani.Play();
491        MessageDisplay.Add("");
492        kenttaNro++;
493        AloitaPeli();
494
495    }
496
497    void TormaaPizzaan(PhysicsObject hahmo, PhysicsObject pizza)
498    {
499
500        MessageDisplay.Add("söit pizzan!");
501
502        OtaVAhinkoa(hahmo, 0.3);
503
504
505
506    }
507
508
509    void OtaVAhinkoa(PhysicsObject pelaaja, double maara)
510    {
511        if (pelaaja == pelaaja1)
512            pelaaja1.ElamaLaskuri.Value -= maara;
513        if (pelaaja == pelaaja2)
514            pelaaja2.ElamaLaskuri.Value -= maara;
515    }
516
517    void AloitaAlusta()
518    {
519        Mouse.IsCursorVisible = true;
520        ClearAll(); // Tyhjennetään kenttä kaikista peliolioista
521        List<Label> valikonKohdat;
522        valikonKohdat = new List<Label>(); // Alustetaan lista, johon valikon kohdat tulevat
523
524        Label kohta1 = new Label("Jatka peliä");  // Luodaan uusi Label-olio, joka toimii uuden pelin aloituskohtana
525        kohta1.Position = new Vector(0, 40);  // Asetetaan valikon ensimmäinen kohta hieman kentän keskikohdan yläpuolelle
526        valikonKohdat.Add(kohta1);  // Lisätään luotu valikon kohta listaan jossa kohtia säilytetään
527
528        Label kohta3 = new Label("Lopeta peli");
529        kohta3.Position = new Vector(0, -40);
530        valikonKohdat.Add(kohta3);
531        // Lisätään kaikki luodut kohdat peliin foreach-silmukalla
532        foreach (Label valikonKohta in valikonKohdat)
533
534            Add(valikonKohta);
535        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
536        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
537
538
539        foreach (Label kohta in valikonKohdat)
540        {
541            if (Mouse.IsCursorOn(kohta))
542            {
543                kohta.TextColor = Color.Red;
544            }
545            else
546            {
547                kohta.TextColor = Color.Black;
548            }
549
550
551        }
552
553
554
555
556    }
557}
Note: See TracBrowser for help on using the repository browser.