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

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