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

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