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

Revision 2558, 14.1 KB checked in by patammi, 10 years ago (diff)

Talletus.

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
24
25
26    public override void Begin()
27    {
28        Valikko();
29
30    }
31    void Valikko()
32    {
33        Level.BackgroundColor = Color.Black;
34        ClearAll();
35        valikonKohdat = new List<Label>();
36
37        Label kohta1 = new Label("Kaksipelaajaa");
38        kohta1.Position = new Vector(0, 40);
39        valikonKohdat.Add(kohta1);
40
41        Label kohta2 = new Label("Lopeta");
42        kohta2.Position = new Vector(0, -40);
43        valikonKohdat.Add(kohta2);
44
45        Label kohta3 = new Label("DeadLand");
46        kohta3.Position = new Vector(0, 250);
47        kohta3.TextColor = Color.Red;
48        kohta3.TextScale = new Vector(10,10);
49        Add(kohta3);
50
51        Label kohta4 = new Label("The rise of zombies");
52        kohta4.Position = new Vector(0, -250);
53        kohta4.TextColor = Color.Red;
54        kohta4.TextScale = new Vector(5,5);
55        Add(kohta4);
56
57        Label kohta5 = new Label("Kolmepelaajaa");
58        kohta5.Position = new Vector(0, 1);
59        valikonKohdat.Add(kohta5);
60
61
62        foreach (Label valikonKohta in valikonKohdat)
63        {
64            Add(valikonKohta);
65        }
66
67        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Kaksipelaajaa, null);
68        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
69        ControllerOne.Listen(Button.B, ButtonState.Down, Exit, "");
70        ControllerOne.Listen(Button.A, ButtonState.Down, Kaksipelaajaa, "");
71        ControllerOne.Listen(Button.X, ButtonState.Down, Kolmepelaajaa, "");
72        Mouse.IsCursorVisible = true;
73        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
74        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
75    }
76
77    void ValikossaLiikkuminen(AnalogState hiirenTila)
78    {
79        foreach (Label kohta in valikonKohdat)
80        {
81            if (Mouse.IsCursorOn(kohta))
82            {
83                kohta.TextColor = Color.Red;
84            }
85            else
86            {
87                kohta.TextColor = Color.Red;
88            }
89
90        }
91    }
92
93
94
95
96
97    void AloitaPeli(int pelaajienmäärä)
98    {
99        ClearAll();
100        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
101        Timer ajastin = new Timer();
102        ajastin.Interval = 1.0;
103        ajastin.Timeout += lisaavihu;
104        ajastin.Start();
105
106        MediaPlayer.Play("Darkness of the Unknown");
107
108        olio = luokari();
109        olio.X = 20;
110        olio.Y = 10;
111        Add(olio);
112        sampodiego = luosampodiego();
113        sampodiego.X = 200;
114        sampodiego.Y = -60;
115        Add(sampodiego);
116
117        if (pelaajienmäärä ==3)
118        {
119            niko = luoniko();
120            niko.X = 400;
121            niko.Y = -100;
122            Add(niko);
123
124            LuoLaskuri3();
125
126
127        }
128
129
130        // TODO: Kirjoita ohjelmakoodisi tähän
131
132        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
133        Level.BackgroundColor = new Color(150, 150, 150);
134        Camera.Follow(olio);
135        TileMap ruudut = TileMap.FromLevelAsset("kenttä");
136        ruudut.SetTileMethod('=', LuoPalikka);
137        ruudut.Execute(150, 200);
138
139        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
140        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
141        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
142        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
143        Keyboard.Listen(Key.A, ButtonState.Down, käännäpelaajaa, null, -10.0);
144        Keyboard.Listen(Key.A, ButtonState.Released, käännäpelaajaa, null, 0.0);
145        Keyboard.Listen(Key.D, ButtonState.Down, käännäpelaajaa, null, 10.0);
146        Keyboard.Listen(Key.D, ButtonState.Released, käännäpelaajaa, null, 0.0);
147        Keyboard.Listen(Key.Space, ButtonState.Down, ammu, null);
148        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1,
149  LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
150        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1,
151  Käännäpelaajaa, "Käännä pelaajaa tattia pyörittämällä.");
152        ControllerOne.Listen(Button.B, ButtonState.Down, ammu, null);
153        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
154        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
155        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1,
156LiikutaPelaajaa2, "Liikuta pelaajaa tattia pyörittämällä.");
157        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1,
158  Käännäpelaajaa2, "Käännä pelaajaa tattia pyörittämällä.");
159        ControllerTwo.Listen(Button.B, ButtonState.Down, ammu2, null);
160        ControllerThree.ListenAnalog(AnalogControl.LeftStick, 0.1,
161LiikutaPelaajaa3, "Liikuta pelaajaa tattia pyörittämällä.");
162        ControllerThree.ListenAnalog(AnalogControl.RightStick, 0.1,
163  Käännäpelaajaa3, "Käännä pelaajaa tattia pyörittämällä.");
164        ControllerThree.Listen(Button.B, ButtonState.Down, ammu3, null);
165
166        Camera.ZoomFactor = (0.4);
167        olio.AngularVelocity = 5.0;
168        int savujenmaara = 0;
169        LuoLaskuri();
170        LuoLaskuri2();
171        while (savujenmaara < 150)
172        {
173            Smoke savu = new Smoke();
174            savu.Position = new Vector(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
175            Add(savu);
176            savujenmaara++;
177            Wind = new Vector(100, 20);
178           
179
180        }
181       
182
183
184        //   lisäävihollinen(Vector.Zero, 200, 100);
185
186
187    }
188
189    void LiikutaPelaajaa(AnalogState tatinTila)
190    {
191        Vector tatinAsento = tatinTila.StateVector;
192        olio.Push(tatinAsento * 1000);
193
194
195    }
196    void Kaksipelaajaa()
197    {
198        AloitaPeli(2);
199    }
200    void Kolmepelaajaa()
201    {
202        AloitaPeli(3);
203    }
204    void Käännäpelaajaa(AnalogState tatinTila)
205    {
206        Vector tatinAsento = tatinTila.StateVector;
207        olio.AngularVelocity = tatinAsento.X * 15;
208    }
209    void LiikutaPelaajaa2(AnalogState tatinTila)
210    {
211        Vector tatinAsento = tatinTila.StateVector;
212        sampodiego.Push(tatinAsento * 1000);
213    }
214    void Käännäpelaajaa2(AnalogState tatinTila)
215    {
216        Vector tatinAsento = tatinTila.StateVector;
217        sampodiego.AngularVelocity = tatinAsento.X * 15;
218    }
219    void LiikutaPelaajaa3(AnalogState tatinTila)
220    {
221        Vector tatinAsento = tatinTila.StateVector;
222        niko.Push(tatinAsento * 1000);
223    }
224    void Käännäpelaajaa3(AnalogState tatinTila)
225    {
226        Vector tatinAsento = tatinTila.StateVector;
227        niko.AngularVelocity = tatinAsento.X * 15;
228    }
229
230
231
232
233
234
235    void ammu()
236    {
237        PhysicsObject ammus = pyssy.Shoot();
238        if (ammus != null) 
239        {
240            ammus.Tag = "pelaaja1";
241        }
242
243    }
244    void ammu2()
245    {
246        PhysicsObject ammus = pyssy2.Shoot();
247        if (ammus != null)
248        {
249            ammus.Tag = "pelaaja2";
250        }
251    }
252    void ammu3()
253    {
254        PhysicsObject ammus = pyssy3.Shoot();
255        if (ammus != null)
256        {
257            ammus.Tag = "pelaaja3";
258        }
259
260    }
261
262
263    void käännäpelaajaa(double kulmanopeus)
264    {
265        olio.AngularVelocity = kulmanopeus;
266
267    }
268
269    void LiikutaPelaajaa(Vector vektori)
270    {
271        olio.Push(vektori);
272    }
273    IntMeter pisteLaskuri;
274
275    void LuoLaskuri()
276    {
277        pisteLaskuri = new IntMeter(0);
278
279        Label pisteNaytto = new Label();
280        pisteNaytto.X = Screen.Left + 200;
281        pisteNaytto.Y = Screen.Top - 100;
282        pisteNaytto.TextColor = Color.Red;
283
284        pisteNaytto.BindTo(pisteLaskuri);
285        Add(pisteNaytto);
286
287        Label pisteTeksti = new Label("Zombies killed: ");
288        pisteTeksti.X = Screen.Left + 100;
289        pisteTeksti.Y = Screen.Top - 100;
290        pisteTeksti.TextColor = Color.Red;
291        Add(pisteTeksti);
292
293    }
294    IntMeter pisteLaskuri2;
295    void LuoLaskuri2()
296    {
297        pisteLaskuri2 = new IntMeter(0);
298
299        Label pisteNaytto2 = new Label();
300        pisteNaytto2.X = Screen.Right - 200;
301        pisteNaytto2.Y = Screen.Top - 100;
302        pisteNaytto2.TextColor = Color.Red;
303
304        pisteNaytto2.BindTo(pisteLaskuri2);
305        Add(pisteNaytto2);
306
307        Label pisteTeksti2 = new Label("Zombies killed: ");
308        pisteTeksti2.X = Screen.Right -100;
309        pisteTeksti2.Y = Screen.Top -20;
310        pisteTeksti2.TextColor = Color.Red;
311        Add(pisteTeksti2);
312
313    }
314    void pistelaskuri2()
315    {
316    }
317    IntMeter pisteLaskuri3;
318    void LuoLaskuri3()
319    {
320        pisteLaskuri3 = new IntMeter(0);
321
322        Label pisteNaytto3 = new Label();
323        pisteNaytto3.X = Screen.Right - 200;
324        pisteNaytto3.Y = Screen.Bottom + 100;
325       
326        pisteNaytto3.TextColor = Color.Red;
327
328        pisteNaytto3.BindTo(pisteLaskuri3);
329        Add(pisteNaytto3);
330
331        Label pisteTeksti3 = new Label("Zombies killed: ");
332        pisteTeksti3.X = Screen.Right -100;
333        pisteTeksti3.Y = Screen.Bottom + 100;
334        pisteTeksti3.TextColor = Color.Red;
335        Add(pisteTeksti3);
336    }
337    void pistelaskuri3()
338    {
339    }
340
341    void LuoPalikka(Vector paikka, double leveys, double korkeus)
342    {
343        PhysicsObject taso = PhysicsObject.CreateStaticObject(
344          leveys, korkeus, Shape.Rectangle);
345        taso.Position = paikka;
346        //taso.Image = groundImage;
347        Add(taso);
348    }
349
350    PhysicsObject luokari()
351    {
352        PhysicsObject olio = new PhysicsObject(100, 50);
353        olio.Image = olionKuva;
354        olio.Size = new Vector(100.0, 150.0);
355        olio.LinearDamping = 0.950;
356        olio.AngularDamping = 0.8;
357        pyssy = new AssaultRifle(60, 20);
358        olio.Add(pyssy);
359        pyssy.Angle += Angle.FromDegrees(5);
360        pyssy.InfiniteAmmo = true;
361        pyssy.ProjectileCollision = LuotiOsuu;
362
363
364
365        return olio;
366
367    }
368    void LuotiOsuu(PhysicsObject luoti, PhysicsObject kohde)
369    {
370        luoti.Destroy();
371        if (kohde is PeliHahmo)
372        {
373            PeliHahmo p = (PeliHahmo)kohde;
374            p.Elamat--;
375            if (p.Elamat < 0) { 
376                p.Destroy();
377               
378                if (luoti.Tag == "pelaaja1")
379
380
381                {
382                    pisteLaskuri.Value++;
383                   
384                }
385                if (luoti.Tag == "pelaaja2")
386                {
387                    pisteLaskuri2.Value++;
388                }
389                if (luoti.Tag == "pelaaja3")
390                {
391                    pisteLaskuri3.Value++;
392                }
393            }
394        }
395
396    }
397
398    PhysicsObject luosampodiego()
399    {
400        PhysicsObject sampodiego = new PhysicsObject(100, 50);
401        sampodiego.Image = olionKuva;
402        sampodiego.Size = new Vector(100.0, 150);
403        sampodiego.LinearDamping = 0.950;
404        sampodiego.AngularDamping = 0.8;
405        pyssy2 = new AssaultRifle(50, 50);
406        pyssy2.Angle += Angle.FromDegrees(5);
407        pyssy2.InfiniteAmmo = true;
408        pyssy2.ProjectileCollision = LuotiOsuu;
409        sampodiego.Add(pyssy2);
410
411
412
413        //Add (sampodiego);
414
415        return sampodiego;
416    }
417    void lisäävihollinen(Vector sijainti, double leveys, double korkeus)
418    {
419        PeliHahmo vihu = new PeliHahmo(100.0, 150);
420        vihu.Elamat = 3;
421        vihu.Image = vihunKuva;
422        vihu.LinearDamping = 0.950;
423        vihu.AngularDamping = 0.8;
424        FollowerBrain seuraajaAivot = new FollowerBrain(olio);
425        seuraajaAivot.Speed = 100;
426        seuraajaAivot.FollowAlways = true;
427        seuraajaAivot.TargetCloseDistance = -1;
428        seuraajaAivot.StopWhenTargetClose = false;
429        seuraajaAivot.Active = true;
430        int luku = RandomGen.NextInt(0, 2);
431        switch (luku)
432        {
433            case 0:
434                seuraajaAivot.Target = olio;
435                break;
436            case 1:
437                seuraajaAivot.Target = sampodiego;
438                break;
439            default:
440                break;
441        }
442        vihu.Brain = seuraajaAivot;
443
444
445        vihu.Position = sijainti;
446
447
448        Add(vihu);
449    }
450    void lahellaVihollista(object lahettajaAivot, EventArgs e)
451    {
452        //pallo.Color = Color.Red;
453    }
454    void lisaavihu()
455    {
456
457        double x = 0;
458        double y = 0;
459        bool lahellapelaajaa = true;
460        while (lahellapelaajaa)
461        {
462            x = RandomGen.NextDouble(Level.Left, Level.Right);
463            y = RandomGen.NextDouble(Level.Bottom, Level.Top);
464            if (Math.Abs(x - olio.X) > 500)
465            {
466                if (Math.Abs(y - olio.Y) > 500)
467                {
468                    lahellapelaajaa = false;
469                }
470            }
471        }
472
473        lisäävihollinen(new Vector(x, y), 0, 0);
474
475    }
476
477
478
479    PhysicsObject luoniko()
480    {
481        PhysicsObject kolmaspelaaja = new PhysicsObject(100, 50);
482        kolmaspelaaja.Image = olionKuva;
483        kolmaspelaaja.Size = new Vector(100.0, 150);
484        kolmaspelaaja.LinearDamping = 0.950;
485        kolmaspelaaja.AngularDamping = 0.8;
486        pyssy3 = new AssaultRifle(60, 30);
487        pyssy3.Angle += Angle.FromDegrees(5);
488        pyssy3.InfiniteAmmo = true;
489        pyssy3.ProjectileCollision = LuotiOsuu;
490        kolmaspelaaja.Add(pyssy3);
491        return kolmaspelaaja;
492    }
493
494
495}
496
497class PeliHahmo : PhysicsObject
498{
499    public int Elamat = 3;
500
501    public PeliHahmo(double leveys, double korkeus)
502        : base(leveys, korkeus)
503    {
504    }
505
506}
Note: See TracBrowser for help on using the repository browser.