source: 2011/31/PavelT/gee tee aa ssek/Peli.cs @ 2614

Revision 2614, 19.1 KB checked in by anlakane, 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    PhysicsObject olio;
12    Image olionKuva = LoadImage("Kari");
13
14    PhysicsObject sampodiego;
15    PhysicsObject niko;
16    AssaultRifle pyssy;
17    AssaultRifle pyssy2;
18    AssaultRifle pyssy3;
19    PhysicsObject vihu;
20    Image vihunKuva = LoadImage("vihu");
21    List<Label> valikonKohdat;
22
23    DoubleMeter olion_energia_mittari = new DoubleMeter(10);
24    int sampo_diegon_energia = 10;
25    DoubleMeter sampo_diegon_energia_mittari = new DoubleMeter(10);
26
27    DoubleMeter niko_energia_mittari = new DoubleMeter(10);
28
29    ExplosionSystem rajahdys;
30    ScoreList topLista = new ScoreList(10, false, 0);
31
32
33    public override void Begin()
34    {
35        if (DataStorage.Exists("pisteet.xml"))
36            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
37
38        Valikko();
39
40    }
41    void Valikko()
42    {
43        Level.BackgroundColor = Color.Black;
44        ClearAll();
45        valikonKohdat = new List<Label>();
46
47        Label kohta1 = new Label("Kaksipelaajaa");
48        kohta1.Position = new Vector(0, 40);
49        valikonKohdat.Add(kohta1);
50
51        Label kohta2 = new Label("Lopeta");
52        kohta2.Position = new Vector(0, -40);
53        valikonKohdat.Add(kohta2);
54
55        Label kohta3 = new Label("DeadLand");
56        kohta3.Position = new Vector(0, 250);
57        kohta3.TextColor = Color.Red;
58        kohta3.TextScale = new Vector(10,10);
59        Add(kohta3);
60
61        Label kohta4 = new Label("The rise of zombies");
62        kohta4.Position = new Vector(0, -250);
63        kohta4.TextColor = Color.Red;
64        kohta4.TextScale = new Vector(5,5);
65        Add(kohta4);
66
67        Label kohta5 = new Label("Kolmepelaajaa");
68        kohta5.Position = new Vector(0, 1);
69        valikonKohdat.Add(kohta5);
70
71
72        foreach (Label valikonKohta in valikonKohdat)
73        {
74            Add(valikonKohta);
75        }
76
77        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Kaksipelaajaa, null);
78        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
79        ControllerOne.Listen(Button.B, ButtonState.Down, Exit, "");
80        ControllerOne.Listen(Button.A, ButtonState.Down, Kaksipelaajaa, "");
81        ControllerOne.Listen(Button.X, ButtonState.Down, Kolmepelaajaa, "");
82        ControllerTwo.Listen(Button.B, ButtonState.Down, Exit, "");
83        ControllerTwo.Listen(Button.A, ButtonState.Down, Kaksipelaajaa, "");
84        ControllerTwo.Listen(Button.X, ButtonState.Down, Kolmepelaajaa, "");
85        ControllerThree.Listen(Button.B, ButtonState.Down, Exit, "");
86        ControllerThree.Listen(Button.A, ButtonState.Down, Kaksipelaajaa, "");
87        ControllerThree.Listen(Button.X, ButtonState.Down, Kolmepelaajaa, "");
88        Mouse.IsCursorVisible = true;
89        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
90        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
91    }
92
93    void ValikossaLiikkuminen(AnalogState hiirenTila)
94    {
95        foreach (Label kohta in valikonKohdat)
96        {
97            if (Mouse.IsCursorOn(kohta))
98            {
99                kohta.TextColor = Color.Red;
100            }
101            else
102            {
103                kohta.TextColor = Color.Red;
104            }
105
106        }
107    }
108
109
110
111
112
113    void AloitaPeli(int pelaajienmäärä)
114    {
115        ClearAll();
116        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
117        Timer ajastin = new Timer();
118        ajastin.Interval = 1.0;
119        ajastin.Trigger += delegate { lisaavihu(); };
120        ajastin.Start();
121
122        MediaPlayer.Play("Darkness of the Unknown");
123
124        olio = luokari();
125        olio.X = 20;
126        olio.Y = 10;
127        Add(olio);
128        sampodiego = luosampodiego();
129        sampodiego.X = 200;
130        sampodiego.Y = -60;
131        Add(sampodiego);
132
133         rajahdys = new ExplosionSystem(LoadImage("vertaaa"), 1000);
134         rajahdys.BlendMode = BlendMode.Additive;
135        Add(rajahdys);
136       
137        niko_energia_mittari.MaxValue = 10;
138        BarGauge nikonvoimaPalkki = new BarGauge(10, 150);
139        nikonvoimaPalkki.BindTo(olion_energia_mittari);
140        nikonvoimaPalkki.X = Screen.Left + 950;
141        nikonvoimaPalkki.Y = Screen.Bottom + 150;
142       
143
144        if (pelaajienmäärä ==3)
145        {
146            niko = luoniko();
147            niko.X = 400;
148            niko.Y = -100;
149            Add(niko);
150
151            LuoLaskuri3();
152            //int niko_energia = 10;
153            Add(nikonvoimaPalkki);
154           
155   
156
157        }
158       
159        olion_energia_mittari.MaxValue = 10;
160        BarGauge olionvoimaPalkki = new BarGauge(10, 150);
161        olionvoimaPalkki.BindTo(olion_energia_mittari);
162        olionvoimaPalkki.X = Screen.Left + 50;
163        olionvoimaPalkki.Y = Screen.Top - 200;
164        Add(olionvoimaPalkki);
165
166        sampo_diegon_energia_mittari.MaxValue = 10;
167        BarGauge sampodiegonvoimaPalkki = new BarGauge(10, 150);
168        sampodiegonvoimaPalkki.BindTo(sampo_diegon_energia_mittari);
169        sampodiegonvoimaPalkki.X = Screen.Right - 50;
170        sampodiegonvoimaPalkki.Y = Screen.Top - 200;
171        Add(sampodiegonvoimaPalkki);
172
173
174
175        // TODO: Kirjoita ohjelmakoodisi tähän
176
177        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
178        Level.BackgroundColor = new Color(150, 150, 150);
179        Camera.Follow(olio);
180        TileMap ruudut = TileMap.FromLevelAsset("kenttä");
181        ruudut.SetTileMethod('=', LuoPalikka);
182        ruudut.Execute(150, 200);
183
184        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
185        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
186        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
187        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
188        Keyboard.Listen(Key.A, ButtonState.Down, käännäpelaajaa, null, -10.0);
189        Keyboard.Listen(Key.A, ButtonState.Released, käännäpelaajaa, null, 0.0);
190        Keyboard.Listen(Key.D, ButtonState.Down, käännäpelaajaa, null, 10.0);
191        Keyboard.Listen(Key.D, ButtonState.Released, käännäpelaajaa, null, 0.0);
192        Keyboard.Listen(Key.Space, ButtonState.Down, ammu, null);
193        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1,
194  LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
195        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1,
196  Käännäpelaajaa, "Käännä pelaajaa tattia pyörittämällä.");
197        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, ammu, null);
198        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Valikko, "Palaa valikkoon");
199        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
200        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1,
201LiikutaPelaajaa2, "Liikuta pelaajaa tattia pyörittämällä.");
202        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1,
203  Käännäpelaajaa2, "Käännä pelaajaa tattia pyörittämällä.");
204        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, ammu2, null);
205        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1,
206LiikutaPelaajaa3, "Liikuta pelaajaa tattia pyörittämällä.");
207        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.1,
208  Käännäpelaajaa3, "Käännä pelaajaa tattia pyörittämällä.");
209        ControllerThree.Listen(Button.RightTrigger, ButtonState.Down, ammu3, null);
210        ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Valikko, "Palaa valikkoon");
211        ControllerTwo.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
212        ControllerThree.Listen(Button.Back, ButtonState.Pressed, Valikko, "Palaa valikkoon");
213        ControllerThree.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
214
215        Camera.ZoomFactor = (0.4);
216        olio.AngularVelocity = 5.0;
217        int savujenmaara = 0;
218        LuoLaskuri();
219        LuoLaskuri2();
220        while (savujenmaara < 150)
221        {
222            Smoke savu = new Smoke();
223            savu.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
224            Add(savu);
225            savujenmaara++;
226            Wind = new Vector(100, 20);
227           
228
229        }
230       
231
232
233        //   lisäävihollinen(Vector.Zero, 200, 100);
234
235
236    }
237
238    void LiikutaPelaajaa(AnalogState tatinTila)
239    {
240        Vector tatinAsento = tatinTila.StateVector;
241        olio.Push(tatinAsento * 1000);
242
243
244    }
245   
246
247
248
249    void Kaksipelaajaa()
250    {
251        AloitaPeli(2);
252    }
253    void Kolmepelaajaa()
254    {
255        AloitaPeli(3);
256    }
257    void Käännäpelaajaa(AnalogState tatinTila)
258    {
259        Vector tatinAsento = tatinTila.StateVector;
260        olio.AngularVelocity = tatinAsento.X * 15;
261    }
262    void LiikutaPelaajaa2(AnalogState tatinTila)
263    {
264        Vector tatinAsento = tatinTila.StateVector;
265        sampodiego.Push(tatinAsento * 1000);
266    }
267    void Käännäpelaajaa2(AnalogState tatinTila)
268    {
269        Vector tatinAsento = tatinTila.StateVector;
270        sampodiego.AngularVelocity = tatinAsento.X * 15;
271    }
272    void LiikutaPelaajaa3(AnalogState tatinTila)
273    {
274        Vector tatinAsento = tatinTila.StateVector;
275        niko.Push(tatinAsento * 1000);
276    }
277    void Käännäpelaajaa3(AnalogState tatinTila)
278    {
279        Vector tatinAsento = tatinTila.StateVector;
280        niko.AngularVelocity = tatinAsento.X * 15;
281    }
282    void ammu()
283    {
284        PhysicsObject ammus = pyssy.Shoot();
285        if (ammus != null) 
286        {
287            ammus.Tag = "pelaaja1";
288        }
289
290    }
291    void ammu2()
292    {
293        PhysicsObject ammus = pyssy2.Shoot();
294        if (ammus != null)
295        {
296            ammus.Tag = "pelaaja2";
297        }
298    }
299    void ammu3()
300    {
301        PhysicsObject ammus = pyssy3.Shoot();
302        if (ammus != null)
303        {
304            ammus.Tag = "pelaaja3";
305        }
306
307    }
308    void käännäpelaajaa(double kulmanopeus)
309    {
310        olio.AngularVelocity = kulmanopeus;
311
312    }
313    void LiikutaPelaajaa(Vector vektori)
314    {
315        olio.Push(vektori);
316    }
317    IntMeter pisteLaskuri;
318    void LuoLaskuri()
319    {
320        pisteLaskuri = new IntMeter(0);
321
322        Label pisteNaytto = new Label();
323        pisteNaytto.X = Screen.Left + 200;
324        pisteNaytto.Y = Screen.Top - 100;
325        pisteNaytto.TextColor = Color.Red;
326
327        pisteNaytto.BindTo(pisteLaskuri);
328        Add(pisteNaytto);
329
330        Label pisteTeksti = new Label("Zombies killed: ");
331        pisteTeksti.X = Screen.Left + 100;
332        pisteTeksti.Y = Screen.Top - 100;
333        pisteTeksti.TextColor = Color.Red;
334        Add(pisteTeksti);
335
336    }
337    IntMeter pisteLaskuri2;
338    void LuoLaskuri2()
339    {
340        pisteLaskuri2 = new IntMeter(0);
341
342        Label pisteNaytto2 = new Label();
343        pisteNaytto2.X = Screen.Right - 200;
344        pisteNaytto2.Y = Screen.Top - 100;
345        pisteNaytto2.TextColor = Color.Red;
346
347        pisteNaytto2.BindTo(pisteLaskuri2);
348        Add(pisteNaytto2);
349
350        Label pisteTeksti2 = new Label("Zombies killed: ");
351        pisteTeksti2.X = Screen.Right -100;
352        pisteTeksti2.Y = Screen.Top -20;
353        pisteTeksti2.TextColor = Color.Red;
354        Add(pisteTeksti2);
355
356    }
357    void pistelaskuri2()
358    {
359    }
360    IntMeter pisteLaskuri3;
361    void LuoLaskuri3()
362    {
363        pisteLaskuri3 = new IntMeter(0);
364
365        Label pisteNaytto3 = new Label();
366        pisteNaytto3.X = Screen.Right - 200;
367        pisteNaytto3.Y = Screen.Bottom + 100;
368       
369        pisteNaytto3.TextColor = Color.Red;
370
371        pisteNaytto3.BindTo(pisteLaskuri3);
372        Add(pisteNaytto3);
373
374        Label pisteTeksti3 = new Label("Zombies killed: ");
375        pisteTeksti3.X = Screen.Right -100;
376        pisteTeksti3.Y = Screen.Bottom + 100;
377        pisteTeksti3.TextColor = Color.Red;
378        Add(pisteTeksti3);
379    }
380    void pistelaskuri3()
381    {
382    }
383
384
385    void LuoPalikka(Vector paikka, double leveys, double korkeus)
386    {
387        PhysicsObject taso = PhysicsObject.CreateStaticObject(
388          leveys, korkeus, Shape.Rectangle);
389        taso.Position = paikka;
390        //taso.Image = groundImage;
391        Add(taso);
392    }
393
394    PhysicsObject luokari()
395    {
396        PhysicsObject olio = new PhysicsObject(100, 50);
397        olio.Tag = "olio";
398        olio.Image = olionKuva;
399        olio.Size = new Vector(100.0, 150.0);
400        olio.LinearDamping = 0.950;
401        olio.AngularDamping = 0.8;
402        pyssy = new AssaultRifle(60, 20);
403        olio.Add(pyssy);
404        pyssy.Angle += Angle.FromDegrees(5);
405        pyssy.InfiniteAmmo = true;
406        pyssy.ProjectileCollision = LuotiOsuu;
407
408
409
410        return olio;
411
412    }
413    void LuotiOsuu(PhysicsObject luoti, PhysicsObject kohde)
414    {
415        luoti.Destroy();
416        if (kohde is PeliHahmo)
417        {
418            PeliHahmo p = (PeliHahmo)kohde;
419            p.Elamat--;
420            if (p.Elamat < 0) { 
421                p.Destroy();
422                rajahdys.AddEffect(p.Position, 50);
423               
424                if (luoti.Tag == "pelaaja1")
425
426
427                {
428                    pisteLaskuri.Value++;
429                   
430                }
431                if (luoti.Tag == "pelaaja2")
432                {
433                    pisteLaskuri2.Value++;
434                }
435                if (luoti.Tag == "pelaaja3")
436                {
437                    pisteLaskuri3.Value++;
438                }
439            }
440        }
441
442    }
443
444    PhysicsObject luosampodiego()
445    {
446        PhysicsObject sampodiego = new PhysicsObject(100, 50);
447        sampodiego.Image = olionKuva;
448        sampodiego.Size = new Vector(100.0, 150);
449        sampodiego.LinearDamping = 0.950;
450        sampodiego.AngularDamping = 0.8;
451        sampodiego.Tag = "sampo";
452        pyssy2 = new AssaultRifle(50, 50);
453        pyssy2.Angle += Angle.FromDegrees(5);
454        pyssy2.InfiniteAmmo = true;
455        pyssy2.ProjectileCollision = LuotiOsuu;
456        sampodiego.Add(pyssy2);
457
458
459
460        //Add (sampodiego);
461
462        return sampodiego;
463    }
464    void lisäävihollinen(Vector sijainti, double leveys, double korkeus)
465    {
466        PeliHahmo vihu = new PeliHahmo(100.0, 150);
467        vihu.Elamat = 3;
468        vihu.Image = vihunKuva;
469        vihu.LinearDamping = 0.950;
470        vihu.AngularDamping = 0.8;
471        FollowerBrain seuraajaAivot = new FollowerBrain(olio);
472        seuraajaAivot.Speed = 100;
473        seuraajaAivot.FollowAlways = true;
474        seuraajaAivot.TargetCloseDistance = -1;
475        seuraajaAivot.StopWhenTargetClose = false;
476        seuraajaAivot.Active = true;
477        int luku = RandomGen.NextInt(0, 2);
478        switch (luku)
479        {
480            case 0:
481                seuraajaAivot.Target = olio;
482                break;
483            case 1:
484                seuraajaAivot.Target = sampodiego;
485                break;
486            default:
487                break;
488        }
489        vihu.Brain = seuraajaAivot;
490
491
492        vihu.Position = sijainti;
493        AddCollisionHandler(vihu, vihuosuu);
494
495        Add(vihu);
496    }
497    void vihuosuu(PhysicsObject vihollinen, PhysicsObject kohde)
498    {
499        if (kohde.Tag.ToString() == "olio")
500        {
501            olion_energia_mittari.Value = olion_energia_mittari.Value - 1;
502            if (olion_energia_mittari.Value < 1) 
503            {
504                olio.Destroy();
505                Label tekstikentta = new Label();
506                tekstikentta.Text = "Game Over somebody died";
507                tekstikentta.Color = Color.Red;
508                Add(tekstikentta);
509                kysyPisteet(pisteLaskuri.Value);
510               
511               
512               
513            }
514        }
515        if (kohde.Tag.ToString() == "sampo")
516        {
517            //sampo_diegon_energia--;
518            sampo_diegon_energia_mittari.Value = sampo_diegon_energia_mittari.Value - 1;
519            if (sampo_diegon_energia_mittari.Value < 1)
520            {
521                sampodiego.Destroy();
522               
523                sampodiego.Destroy();
524                Label tekstikentta = new Label();
525                tekstikentta.Text = "Game Over somebody died";
526                tekstikentta.Color = Color.Red;
527                Add(tekstikentta);
528                kysyPisteet(pisteLaskuri2.Value);
529            }
530        }
531        if (kohde.Tag.ToString() == "niko")
532        {
533           
534            if (niko_energia_mittari.Value < 1)
535            {
536                niko.Destroy();
537
538                niko.Destroy();
539                Label tekstikentta = new Label();
540                tekstikentta.Text = "Game Over somebody died";
541                tekstikentta.Color = Color.Red;
542                tekstikentta.Y = 1;
543                //tekstikentta.X =  ;
544                Add(tekstikentta);
545                kysyPisteet(pisteLaskuri3.Value);
546            }
547        }
548        }
549
550    void kysyPisteet(int luku)
551    {
552        HighScoreWindow topIkkuna = new HighScoreWindow("Pelin nimi tai jotain",
553                                 "Parhaat pisteet",
554                                 "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
555                                 topLista, luku);
556        topIkkuna.Closed += TallennaPisteet;
557        Add(topIkkuna);
558
559    }
560
561    void TallennaPisteet(Window sender)
562    {
563        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
564        Valikko();
565    }
566
567
568    void lahellaVihollista(object lahettajaAivot, EventArgs e)
569    {
570        //pallo.Color = Color.Red;
571    }
572    void lisaavihu()
573    {
574
575        double x = 0;
576        double y = 0;
577        bool lahellapelaajaa = true;
578        while (lahellapelaajaa)
579        {
580            x = RandomGen.NextDouble(Level.Left, Level.Right);
581            y = RandomGen.NextDouble(Level.Bottom, Level.Top);
582            if (Math.Abs(x - olio.X) > 500)
583            {
584                if (Math.Abs(y - olio.Y) > 500)
585                {
586                    lahellapelaajaa = false;
587                }
588            }
589        }
590
591        lisäävihollinen(new Vector(x, y), 0, 0);
592
593    }
594
595
596
597    PhysicsObject luoniko()
598    {
599        PhysicsObject kolmaspelaaja = new PhysicsObject(100, 50);
600        kolmaspelaaja.Image = olionKuva;
601        kolmaspelaaja.Size = new Vector(100.0, 150);
602        kolmaspelaaja.LinearDamping = 0.950;
603        kolmaspelaaja.AngularDamping = 0.8;
604        pyssy3 = new AssaultRifle(60, 30);
605        pyssy3.Angle += Angle.FromDegrees(5);
606        pyssy3.InfiniteAmmo = true;
607        pyssy3.ProjectileCollision = LuotiOsuu;
608        kolmaspelaaja.Add(pyssy3);
609        return kolmaspelaaja;
610    }
611
612
613}
614
615class PeliHahmo : PhysicsObject
616{
617    public int Elamat = 2;
618
619    public PeliHahmo(double leveys, double korkeus)
620        : base(leveys, korkeus)
621    {
622    }
623
624}
Note: See TracBrowser for help on using the repository browser.