source: 2011/31/JereK/Serades/Serades/Serades/Peli.cs @ 2581

Revision 2581, 13.3 KB checked in by jekuukka, 8 years ago (diff)

Talletus.

RevLine 
[2498]1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : TopDownPhysicsGame
10{
[2549]11    ExplosionSystem rajahdys =
12        new ExplosionSystem(LoadImage("rajahdys"), 100);
13    bool kaksinpeli = false;
14
[2498]15    Vector[] vihollistenAloitukset = { new Vector(450,350),
16                                     new Vector(-450,350),
17                                     new Vector(450,-350),
18                                     new Vector(-450,-350)};
[2549]19    Image olionkuva = LoadImage("alukset");
[2531]20    Image karttakuva = LoadImage("kartta");
[2498]21    Image vihokuva = LoadImage("vihollinen");
[2531]22    Image taustakuva = LoadImage("taustakuva");
[2549]23    Image oliokuva = LoadImage("alukset2");
[2531]24    Image pomonkuva = LoadImage("boss");
[2549]25    Image taustaKuva = LoadImage("kartta7");
[2576]26    Image plasmakuva = LoadImage("plasma33");
[2549]27
28
[2531]29    PhysicsObject pelaaja1;
30    PhysicsObject pelaaja2;
31    LaserGun pelaaja1Pyssy;
32    LaserGun pelaaja2Pyssy;
33    List<Label> valikonKohdat;
[2549]34    PlasmaCannon pelaaja1Pyssy2;
35    PlasmaCannon pelaaja2Pyssy2;
[2498]36
[2531]37
[2549]38    Timer aaltoajastin;
39
40
[2531]41    List<PhysicsObject> viholliset = new List<PhysicsObject>();
42
43    int taso = 1;
44
[2498]45    PhysicsObject beam = new PhysicsObject(new RaySegment(Vector.Zero, Vector.UnitX, 10));
46
47
48    public override void Begin()
[2531]49    {
50        Valikko();
51    }
[2498]52
[2576]53
[2531]54    void Valikko()
[2498]55    {
[2531]56        ClearAll();
[2498]57        Camera.ZoomToLevel();
[2531]58        Level.Background.Image = taustakuva;
59        Level.Background.FitToLevel();
60        valikonKohdat = new List<Label>();
61
62        Label kohta1 = new Label("Aloita peli yhdellä pelaajalla.");
63        kohta1.Position = new Vector(0, 40);
64        valikonKohdat.Add(kohta1);
65
66        Label kohta2 = new Label("Aloita peli kahdella pelaajalla.");
67        kohta2.Position = new Vector(0, 0);
68        valikonKohdat.Add(kohta2);
69
70        Label kohta3 = new Label("Lopeta ja poistu pelistä.");
[2549]71        kohta3.Position = new Vector(0, -60);
[2531]72        valikonKohdat.Add(kohta3);
73
[2549]74        Label kohta4 = new Label("Ohjeet.");
75        kohta4.Position = new Vector(0, -30);
76        valikonKohdat.Add(kohta4);
77
[2531]78        foreach (Label valikonKohta in valikonKohdat)
79        {
80            Add(valikonKohta);
81        }
82
83        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
84        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AloitaKaksinpeli, null);
85        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
[2549]86        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, NäytäOhjeet, null);
[2531]87
88        Mouse.IsCursorVisible = true;
89        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
90        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
[2498]91    }
92
[2531]93    void ValikossaLiikkuminen(AnalogState a)
94    {
95        foreach (Label kohta in valikonKohdat)
96        {
97            if (Mouse.IsCursorOn(kohta))
98            {
99                kohta.TextColor = Color.White;
100            }
101            else
102            {
103                kohta.TextColor = Color.OrangeRed;
104            }
105
106        }
107
108    }
109
[2549]110    void NäytäOhjeet()
111    {
112        ClearAll();
113        Level.Background.Image = taustaKuva;
114        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
115        Level.Background.FitToLevel();
[2531]116
[2549]117    }
[2531]118
[2549]119
[2498]120    void LuoAlus()
121    {
[2576]122        MediaPlayer.Play("musiikki1");
[2549]123        pelaaja1 = new PhysicsObject(50, 80);
124        pelaaja1.Tag = "pelaaja";
[2531]125        Add(pelaaja1);
126        pelaaja1.LinearDamping = 0.96;
127        pelaaja1.Image = olionkuva;
128        pelaaja1Pyssy = new LaserGun(20, 5);
[2576]129        pelaaja1Pyssy.AttackSound = null;
[2581]130        pelaaja1.Restitution = -10;
[2531]131        pelaaja1Pyssy.ProjectileCollision = LaserSadeOsuu;
132        pelaaja1Pyssy.InfiniteAmmo = true;
133        pelaaja1.Add(pelaaja1Pyssy);
134        pelaaja1.IgnoresExplosions = true;
135        pelaaja1Pyssy.Angle = pelaaja1Pyssy.Angle + Angle.FromDegrees(90);
136        beam.Color = Color.Blue;
[2549]137        pelaaja1Pyssy.IsVisible = false;
138        pelaaja1Pyssy2 = new PlasmaCannon(20, 5);
[2576]139        pelaaja1Pyssy2.AttackSound = null;
[2549]140        pelaaja1.Add(pelaaja1Pyssy2);
141        pelaaja1Pyssy2.IsVisible = false;
142
[2498]143    }
144
[2531]145    void AsetaPelaaja2()
146    {
[2549]147        pelaaja2 = new PhysicsObject(50, 80);
148        pelaaja2.Tag = "pelaaja";
[2531]149        Add(pelaaja2);
150        pelaaja2.LinearDamping = 0.96;
151        pelaaja2.Image = oliokuva;
[2581]152        pelaaja2.Restitution = -10;
[2531]153        pelaaja2Pyssy = new LaserGun(20, 5);
[2576]154        pelaaja2Pyssy.AttackSound = null;
[2531]155        pelaaja2Pyssy.ProjectileCollision = LaserSadeOsuu;
156        pelaaja2Pyssy.InfiniteAmmo = true;
157        pelaaja2.IgnoresExplosions = true;
158        pelaaja2.Add(pelaaja2Pyssy);
159        pelaaja2Pyssy.Angle = pelaaja2Pyssy.Angle + Angle.FromDegrees(90);
160        beam.Color = Color.Blue;
161        pelaaja2.X = 30;
[2549]162        pelaaja2Pyssy.IsVisible = false;
163        pelaaja2Pyssy2 = new PlasmaCannon(20, 5);
[2576]164        pelaaja2Pyssy2.AttackSound = null;
[2549]165        pelaaja2.Add(pelaaja2Pyssy2);
166        pelaaja2Pyssy2.IsVisible = false;
167
[2531]168    }
[2498]169
[2531]170    void SeuraavaTaso() 
171    {
172        taso++;
[2498]173
[2576]174        if (taso < 2)
[2531]175        {
[2549]176            MessageDisplay.Add("~Seuraava aalto alkaa!!");
[2531]177            Timer.SingleShot(3, AloitaAalto);
178        }
179        else 
180        {
[2580]181            MessageDisplay.Add("~Hoitele nyt pomo-alus!! Ohje: Koita päästä ihan sen eteen ja tuhoa se!");
[2531]182            Timer.SingleShot(3, AloitaPomotaistelu);
183        }
184    }
185
186    void AloitaPomotaistelu() 
187    {
[2549]188        Alus Pomo = new Alus(100, 200);
[2581]189        if (kaksinpeli) Pomo.HP = 5000;
190        else Pomo.HP = 2000;
[2549]191
[2531]192        Pomo.Image = pomonkuva;
193        Add(Pomo);
[2549]194        Pomo.IgnoresExplosions = true;
195        Pomo.X = 400;
196        Pomo.Y = 300;
197        Pomo.Tag = "vihollinen";
[2576]198        Pomo.Destroyed += new Action(Pomo_Destroyed);
[2549]199
200        TagFollowerBrain seuraajanAivot = new TagFollowerBrain("pelaaja", 2000);
201        seuraajanAivot.TargetFollowDistance = 9999999;
202        seuraajanAivot.TargetCloseDistance = 1;
203        Pomo.Brain = seuraajanAivot;
204        seuraajanAivot.Active = true;
205        Add(Pomo);
206
207        //viholliset.Add(Pomo);
208
[2531]209       
210        PlasmaCannon plasmaTykki = new PlasmaCannon(20, 5);
211        Pomo.Add(plasmaTykki);
[2549]212        plasmaTykki.Angle = plasmaTykki.Angle - Angle.FromDegrees(90);
[2531]213        plasmaTykki.PlasmaParticleCollision = PlasmaPalloOsuu;
214
[2549]215        Timer pomonkaantoajastin = new Timer();
216        pomonkaantoajastin.Interval = 0.1;
217        pomonkaantoajastin.Timeout += delegate { PomoKaantyy(Pomo); };
218        pomonkaantoajastin.Start();
219
220        Timer ajastin = new Timer();
221        ajastin.Interval = 2;
222        ajastin.Timeout += delegate { PomoAmpuu(plasmaTykki); };
223        ajastin.Start();
[2531]224    }
225
[2576]226    void Pomo_Destroyed()
227    {
[2580]228        Label m = new Label("Voitit pelin!! Paina ESC ja pääset takaisin");
[2576]229        Add(m);
[2580]230        MessageDisplay.Color= Color.OrangeRed;
[2576]231    }
232
[2549]233    void PomoKaantyy(PhysicsObject pomo)
234    {
235        pomo.Angle = pomo.Velocity.Angle + Angle.FromDegrees(90);
236    }
237
238    void PomoAmpuu(Weapon ase)
239    {
[2576]240        PhysicsObject ammus = ase.Shoot();
241        if (ammus != null) 
242        {
243            ammus.Image = plasmakuva;
244            ammus.Size *= 5; 
245        }
[2549]246    }
247
[2498]248    void AloitaAalto()
249    {
[2549]250        aaltoajastin = new Timer();
251        aaltoajastin.Interval = 3.0 - (taso / 10.0);
252        aaltoajastin.Timeout += LuoVihollinen;
253
254        aaltoajastin.Start(10);
[2498]255    }
256
[2531]257    void Aloitakaksin()
258    {
[2549]259        aaltoajastin = new Timer();
260        aaltoajastin.Interval = 1.0 - (taso / 10.0);
261        aaltoajastin.Timeout += LuoVihollinen;
262        aaltoajastin.Start(20);
[2531]263    }
264
[2498]265    void AsetaOhjaimet()
266    {
267        Keyboard.Listen(Key.Left, ButtonState.Down,
[2531]268          Kaanna, null, 10.0, pelaaja1);
[2498]269        Keyboard.Listen(Key.Right, ButtonState.Down,
[2531]270          Kaanna, null, -10.0, pelaaja1);
[2498]271        Keyboard.Listen(Key.Up, ButtonState.Down,
[2531]272          Kaasu, null, pelaaja1);
[2498]273        Keyboard.Listen(Key.Down, ButtonState.Down,
[2531]274          Kaasu, null, pelaaja1);
[2549]275        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, null, pelaaja1Pyssy);
[2531]276        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
[2549]277        Keyboard.Listen(Key.NumPad0 , ButtonState.Down, Ammu2, null, pelaaja1Pyssy2);
[2498]278    }
279
[2531]280    void AsetaKakkosohjaimet()
[2498]281    {
[2531]282        Keyboard.Listen(Key.A, ButtonState.Down,
283    Kaanna, null, 10.0, pelaaja2);
284        Keyboard.Listen(Key.D, ButtonState.Down,
285          Kaanna, null, -10.0, pelaaja2);
286        Keyboard.Listen(Key.W, ButtonState.Down,
287          Kaasu, null, pelaaja2);
288        Keyboard.Listen(Key.S, ButtonState.Down,
289          Kaasu, null, pelaaja2);
[2549]290        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, null, pelaaja2Pyssy);
291        Keyboard.Listen(Key.Tab , ButtonState.Down, Ammu2, null, pelaaja2Pyssy2);
[2498]292    }
293
[2531]294    void Ammu(Weapon pyssy)
295    {
296        PhysicsObject ammus = pyssy.Shoot();
297        if (ammus != null) AddCollisionHandler(ammus, LaserSadeOsuu);
298    }
[2498]299
[2549]300    void Ammu2(Weapon ase)
301    {
302        PhysicsObject ammus2 = ase.Shoot();
303        if (ammus2 != null) AddCollisionHandler(ammus2, ammus2Osuu);
304    }
[2531]305
[2549]306    void ammus2Osuu(PhysicsObject ammus, PhysicsObject kohde)
307    {
308            ammus.Destroy();
309
310            if (kohde.Tag.ToString() == "vihollinen")
[2576]311
[2549]312            {
313                Alus alus = (Alus)kohde;
314                alus.HP--;
315
316                if (alus.HP < 1)
317                {
318                    rajahdys.AddEffect(kohde.X, kohde.Y, 500);
319                    kohde.Destroy();
320                    if (viholliset.Contains(kohde))
321                    {
322                        viholliset.Remove(kohde);
323                        if (viholliset.Count == 0 && aaltoajastin.Enabled == false) { SeuraavaTaso(); }
324                    }
325                }
[2576]326
327
[2549]328            }
[2576]329
[2549]330    }
331
[2576]332
333
[2531]334    void Kaasu(PhysicsObject alus)
335    {
336        alus.Push(Vector.FromLengthAndAngle(400, alus.Angle + Angle.FromDegrees(90)));
[2498]337    }
338
[2531]339    void Kaanna(double nopeus, PhysicsObject alus)
[2498]340    {
341        alus.AngularAcceleration = nopeus;
342    }
343
344    void LuoVihollinen()
345    {
346        for (int i = 0; i < 4; i++)
347        {
[2549]348            Alus vihollinen = new Alus(40, 40);
349            vihollinen.HP = 1;
350            if (kaksinpeli) vihollinen.HP = 5;
351            else vihollinen.HP = 1;
[2531]352            vihollinen.X = 450;
353            vihollinen.Y = 350;
354            vihollinen.Position = vihollistenAloitukset[i];
355            vihollinen.Image = vihokuva;
356            //AddCollisionHandler(vihollinen, LaserSadeOsuu);
357            vihollinen.Tag = "vihollinen";
[2498]358
[2549]359            TagFollowerBrain seuraajanAivot = new TagFollowerBrain("pelaaja",5000);
360            seuraajanAivot.TargetFollowDistance = 9999999;
[2531]361            seuraajanAivot.TargetCloseDistance = 1;
[2549]362            //seuraajanAivot. += mitaTapahtuuKunOllaanLahella;
[2531]363            vihollinen.Brain = seuraajanAivot;
364            seuraajanAivot.Active = true;
365            Add(vihollinen);
[2498]366
[2531]367            viholliset.Add(vihollinen);
[2498]368        }
369    }
370
371    void LaserSadeOsuu(PhysicsObject ammus, PhysicsObject kohde)
372    {
373        ammus.Destroy();
[2531]374
[2549]375
[2531]376        if (kohde.Tag.ToString() == "vihollinen")
377        {
[2549]378            Alus alus = (Alus)kohde;
379            alus.HP--;
380
381            if (alus.HP < 1) 
382            {
383                rajahdys.AddEffect(kohde.X, kohde.Y, 500);
384                kohde.Destroy();
385                if (viholliset.Contains(kohde))
386                {
387                    viholliset.Remove(kohde);
388                    if (viholliset.Count == 0 && aaltoajastin.Enabled == false) { SeuraavaTaso(); }
389                }
[2531]390            }
[2549]391
[2531]392        }
[2498]393    }
394
[2531]395    void PlasmaPalloOsuu(PhysicsObject pallo, PhysicsObject kohde)
396    {
397        if (kohde.Tag.ToString() == "pelaaja") 
398        {
[2549]399            rajahdys.AddEffect(kohde.X, kohde.Y, 200);
[2531]400            kohde.Destroy();
401        }
402    }
[2498]403
[2531]404    void AloitaPeli()
405    {
406        ClearAll();
[2549]407        kaksinpeli = false;
408        Add(rajahdys);
[2531]409        MessageDisplay.TextColor = Color.OrangeRed;
[2498]410
[2531]411        LuoAlus();
412        Level.CreateBorders();
413        Camera.ZoomToLevel();
414        Level.Background.CreateStars(2000);
415        AsetaOhjaimet();
416       // MessageDisplay.Add("Test");
[2498]417
[2531]418        MessageDisplay.MessageTime = new TimeSpan(0, 0, 10);
419        //tekstikentta.X = Screen.Left + 100;
420        //tekstikentta.Y = Screen.Top - 100;
421        AloitaAalto();
422        beam.Color = Color.Red;
423
424        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
425    }
426
427    void AloitaKaksinpeli()
428    {
429        ClearAll();
[2549]430        kaksinpeli = true;
431        Add(rajahdys);
[2531]432        MessageDisplay.TextColor = Color.OrangeRed;
433        LuoAlus();
434        AsetaPelaaja2();
435        AsetaOhjaimet();
436        AsetaKakkosohjaimet();
437        Level.CreateBorders();
438        Camera.ZoomToLevel();
439        Level.Background.Image = taustakuva;
440        Level.Background.CreateStars(2000);
441        Aloitakaksin();
[2549]442        //AloitaPomotaistelu();
[2531]443    }
[2549]444}
445
446public class Alus : PhysicsObject
447{
[2581]448    public int HP = 2000;
[2549]449
450    public Alus(int width, int height)
451        : base(width, height)
452    { 
453   
454    }
[2531]455}
Note: See TracBrowser for help on using the repository browser.