source: 2011/31/AleksiK/WorkingTitle/WorkingTitle/Peli.cs @ 2503

Revision 2503, 17.8 KB checked in by alkivima, 8 years ago (diff)

Talletus.

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6using Physics2DDotNet.Ignorers;
7using System.Collections.Generic;
8
9
10public class Peli : TopDownPhysicsGame
11{
12    PhysicsObject vasenReuna;
13    PhysicsObject oikeaReuna;
14    DoubleMeter voimaMittari1;
15    DoubleMeter voimaMittari2;
16    Automobile auto1;
17    Automobile auto2;
18    IntMeter pelaajan1Pisteet;
19    IntMeter pelaajan2Pisteet;
20    Label aikaNaytto;
21
22    AssaultRifle pyssy1;
23    AssaultRifle pyssy2;
24
25    Image auto1Kuva = LoadImage("PunAuto");
26    Image auto2Kuva = LoadImage("SinAuto");
27    Image[] auto1Ampuu = LoadImages("PunAuto", "PunAutoAmpuu", "PunAuto", "PunAutoAmpuu", "PunAuto");
28    Image[] auto2Ampuu = LoadImages("SinAuto", "SinAutoAmpuu", "SinAuto", "SinAutoAmpuu", "SinAuto");
29    Image kiwi = LoadImage("RosoKiwi");
30
31    Image rapa = LoadImage("mud");
32
33    Image kentta = LoadImage("sand");
34
35    List<Label> valikonKohdat;
36    public override void Begin()
37    {
38        KineticFriction = 0.5;
39
40        Valikko();
41    }
42
43    void Autot()
44    {
45        auto1 = new Automobile(50, 27.5);
46        auto1.CollisionIgnorer = new ObjectIgnorer();
47        auto1.Mass = 100.0;
48        auto1.Color = new Color(1, 1, 1);
49        auto1.X = -300;
50        auto1.Y = 0;
51        auto1.LinearDamping = 0.975;
52        auto1.AngularDamping = 0.1;
53        auto1.CanRotate = false;
54        auto1.Acceleration = 625;
55        auto1.Image = auto1Kuva;
56        auto1.Animation = new Animation(auto1Ampuu);
57
58
59        auto2 = new Automobile(50, 27.5);
60        auto2.CollisionIgnorer = new ObjectIgnorer();
61        auto2.Mass = 50.0;
62        auto2.Color = new Color(255, 255, 255);
63        auto2.X = 300;
64        auto2.Y = 0;
65        auto2.LinearDamping = 0.975;
66        auto2.AngularDamping = 0.1;
67        auto2.Angle = Angle.FromDegrees(180.0);
68        auto2.CanRotate = false;
69        auto2.Acceleration = 625;
70        auto2.Image = auto2Kuva;
71        auto2.Animation = new Animation(auto2Ampuu);
72
73
74
75        pyssy1 = new AssaultRifle(20, 5);
76        pyssy1.Tag = "ase";
77        pyssy1.TimeBetweenUse = TimeSpan.FromMilliseconds(70);
78        pyssy1.IsVisible = false;
79        pyssy1.Ammo.Value = 9999;
80        auto1.Add(pyssy1);
81
82        pyssy2 = new AssaultRifle(20, 5);
83        pyssy2.Tag = "ase";
84        pyssy2.TimeBetweenUse = TimeSpan.FromMilliseconds(70);
85        pyssy2.IsVisible = false;
86        pyssy2.Ammo.Value = 9999;
87        auto2.Add(pyssy2);
88    }
89    void Valikko()
90    {
91        ClearAll();
92        valikonKohdat = new List<Label>();
93
94        //Remove(auto1);
95        //Remove(auto2);
96
97        Label kohta1 = new Label("Aloita uusi peli");
98        kohta1.Position = new Vector(0, 40);
99        valikonKohdat.Add(kohta1);
100
101        Label kohta2 = new Label("Lopeta");
102        kohta2.Position = new Vector(0, -40);
103        valikonKohdat.Add(kohta2);
104
105        foreach (Label valikonKohta in valikonKohdat)
106        {
107            Add(valikonKohta);
108        }
109
110        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
111        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
112
113        Mouse.IsCursorVisible = true;
114        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
115        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
116    }
117    void ValikossaLiikkuminen(AnalogState hiirenTila)
118    {
119        foreach (Label kohta in valikonKohdat)
120        {
121            if (Mouse.IsCursorOn(kohta))
122            {
123                kohta.TextColor = Color.Red;
124            }
125            else
126            {
127                kohta.TextColor = Color.Black;
128            }
129
130        }
131    }
132    void AloitaPeli()
133    {       
134        ClearAll();
135        Autot();
136        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
137
138        AddCollisionHandler(auto1, KasitteleAuto1Tormays);
139        AddCollisionHandler(auto2, KasitteleAuto2Tormays);
140
141        AsetaOhjaimet();
142
143        Add(auto1, 0);
144        Add(auto2, 0);
145
146        Kentta();
147
148        Pelaaja1HP();
149        Pelaaja2HP();
150
151        LisaaLaskurit();
152
153    }
154
155    void Lopeta()
156    {
157        Exit();
158    }
159
160
161    void AsetaOhjaimet()
162    {
163        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
164        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
165        Keyboard.Listen(Key.W, ButtonState.Down, kiihdyta, "Kiihdytä", auto1);
166        Keyboard.Listen(Key.S, ButtonState.Down, jarruta, "Jarruta", auto1);
167        Keyboard.Listen(Key.A, ButtonState.Down, kaanny, "Käänny vasemmalle", auto1, 2.0);
168        Keyboard.Listen(Key.D, ButtonState.Down, kaanny, "Käänny oikealle", auto1, -2.0);
169        Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, AloitaAmpuminen, null, auto1, pyssy1);
170        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, "Ammu", auto1, pyssy1);
171        Keyboard.Listen(Key.LeftControl, ButtonState.Released, LopetaAmpuminen, null, auto1, pyssy1);
172
173        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
174        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
175        Keyboard.Listen(Key.Up, ButtonState.Down, kiihdyta, "Kiihdytä", auto2);
176        Keyboard.Listen(Key.Down, ButtonState.Down, jarruta, "Jarruta", auto2);
177        Keyboard.Listen(Key.Left, ButtonState.Down, kaanny, "Käänny vasemmalle", auto2, 2.0);
178        Keyboard.Listen(Key.Right, ButtonState.Down, kaanny, "Käänny oikealle", auto2, -2.0);
179        Keyboard.Listen(Key.RightControl, ButtonState.Pressed, AloitaAmpuminen, null, auto2, pyssy2);
180        Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, "Ammu", auto2, pyssy2);
181        Keyboard.Listen(Key.RightControl, ButtonState.Released, LopetaAmpuminen, null, auto2, pyssy2);
182    }
183
184    void kiihdyta(Automobile auto)
185    {
186        auto.Accelerate(Time.SinceLastUpdate.TotalSeconds);
187    }
188
189    void jarruta(Automobile auto)
190    {
191        auto.Brake(Time.SinceLastUpdate.TotalSeconds);
192    }
193
194    void kaanny(Automobile auto, double kaannos)
195    {
196        auto.Angle = Angle.FromDegrees(auto.Angle.Degrees + kaannos * 1.75);
197    }
198
199    void Rapaa()
200    {
201        ButtonState rapa1 = Keyboard.GetKeyState(Key.W);
202        ButtonState rapa2 = Keyboard.GetKeyState(Key.Up);
203       
204        if (rapa1 == ButtonState.Down)
205        {
206            Smoke kura = new Smoke();
207            kura.ParticleImage = rapa;
208            kura.Position = auto1.Position;
209            kura.MaximumLifetime = new TimeSpan(0, 0, 0, 2, 0);
210            kura.Angle = auto1.Angle + Angle.FromDegrees(180);
211            kura.FadeOut(1.5);
212            //new TimeSpan(0,0,0,1,0);
213            Add(kura);
214        }
215       
216        if (rapa2 == ButtonState.Down)
217        {
218            Smoke kura1 = new Smoke();
219            kura1.ParticleImage = rapa;
220            kura1.Position = auto2.Position;
221            kura1.MaximumLifetime = new TimeSpan(0, 0, 0, 2, 0);
222            kura1.Angle = auto2.Angle + Angle.FromDegrees(180);
223            kura1.FadeOut(1.5);
224            //new TimeSpan(0,0,0,1,0);
225            Add(kura1);
226        }
227
228    }
229
230    void Kentta()
231    {
232        Mouse.IsCursorVisible = false;
233
234        Wind = new Vector(200, 30);
235
236        Timer ajastin = new Timer();
237        ajastin.Interval = 0.1;
238        ajastin.Timeout += Rapaa;
239        ajastin.Start();
240
241
242        PhysicsObject maata = PhysicsObject.CreateStaticObject(250.0, 150.0);
243        maata.Shape = Shape.Circle;
244        maata.Color = Color.DarkGray;
245        maata.X = 0;
246        maata.Y = 0;
247        maata.Restitution = 0.2;
248        maata.Tag = "pylvas"; Add(maata, -1);
249
250        PhysicsObject pylvas1 = PhysicsObject.CreateStaticObject(200.0, 125.0);
251        pylvas1.Shape = Shape.Circle;
252        pylvas1.X = -300;
253        pylvas1.Y = 270;
254        pylvas1.Restitution = 0.2;
255        pylvas1.Tag = "pylvas";
256        pylvas1.Color = Color.DarkGray;
257        Add(pylvas1, -1);
258       
259
260        PhysicsObject pylvas2 = PhysicsObject.CreateStaticObject(125.0, 180.0);
261        pylvas2.Shape = Shape.Circle;
262        pylvas2.X = -350;
263        pylvas2.Y = 230;
264        pylvas2.Restitution = 0.2;
265        pylvas2.Tag = "pylvas";
266        pylvas2.Color = Color.DarkGray;
267        Add(pylvas2, -1);
268
269        pylvas2.Angle = Angle.FromDegrees(330.0);
270
271        PhysicsObject pylvas3 = PhysicsObject.CreateStaticObject(200.0, 125.0);
272        pylvas3.Shape = Shape.Circle;
273        pylvas3.X = -200;
274        pylvas3.Y = -200;
275        pylvas3.Restitution = 0.2;
276        pylvas3.Tag = "pylvas";
277        pylvas3.Color = Color.DarkGray;
278        Add(pylvas3, -1);
279
280        PhysicsObject pylvas4 = PhysicsObject.CreateStaticObject(200.0, 125.0);
281        pylvas4.Shape = Shape.Circle;
282        pylvas4.X = 200;
283        pylvas4.Y = -200;
284        pylvas4.Restitution = 0.2;
285        pylvas4.Tag = "pylvas";
286        pylvas4.Color = Color.DarkGray;
287        Add(pylvas4, -1);
288
289        PhysicsObject pylvas5 = PhysicsObject.CreateStaticObject(200.0, 125.0);
290        pylvas5.Shape = Shape.Circle;
291        pylvas5.X = -75;
292        pylvas5.Y = -30;
293        pylvas5.Restitution = 0.2;
294        pylvas5.Tag = "pylvas";
295        pylvas5.Color = Color.DarkGray;
296        Add(pylvas5, -1);
297
298        PhysicsObject pylvas6 = PhysicsObject.CreateStaticObject(200.0, 125.0);
299        pylvas6.Shape = Shape.Circle;
300        pylvas6.X = 75;
301        pylvas6.Y = 20;
302        pylvas6.Restitution = 0.2;
303        pylvas6.Tag = "pylvas";
304        pylvas6.Color = Color.DarkGray;
305        Add(pylvas6, -1);
306
307        /*GameObject Reuna = new GameObject(70.0, 70.0);
308        Reuna.Shape = Shape.Circle;
309        Reuna.Color = Color.Black;
310        Add(Reuna, -1);
311
312        GameObject Boostipaikka = new GameObject(60.0, 60.0);
313        Boostipaikka.Shape = Shape.Circle;
314        Boostipaikka.Color = Color.Turquoise;
315        Add(Boostipaikka, -1);*/
316
317
318        vasenReuna = Level.CreateLeftBorder();
319        vasenReuna.Restitution = 0.3;
320        vasenReuna.IsVisible = true;
321        oikeaReuna = Level.CreateRightBorder();
322        oikeaReuna.Restitution = 0.3;
323        oikeaReuna.IsVisible = true;
324        PhysicsObject ylaReuna = Level.CreateTopBorder();
325        ylaReuna.Restitution = 0.3;
326        ylaReuna.IsVisible = true;
327        PhysicsObject alaReuna = Level.CreateBottomBorder();
328        alaReuna.Restitution = 0.3;
329        alaReuna.IsVisible = true;
330
331        Level.BackgroundColor = Color.ForestGreen;
332
333        Level.Background.Image = kentta;
334
335        Camera.X = 0.0;
336        Camera.Y = 0.0;
337        Camera.ZoomFactor = 1.1;
338
339        pylvas1.Image = kiwi;
340        pylvas2.Image = kiwi;
341        pylvas3.Image = kiwi;
342        pylvas4.Image = kiwi; 
343        pylvas5.Image = kiwi;
344        pylvas6.Image = kiwi;
345        maata.Image = kiwi;
346
347    }
348    void Pelaaja1Tuhoutuu()
349    {
350        int pMaxMaara = 200;
351        //ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("liekkiEsimerkki"), pMaxMaara);
352        ExplosionSystem rajahdys2 = new ExplosionSystem(LoadImage("rajahdysEsimerkki2"), pMaxMaara);
353        //Add(rajahdys);
354        Add(rajahdys2);
355
356        double x = auto1.X;
357        double y = auto1.Y;
358        //int pMaara = 100;
359        int pMaara2 = 200;
360        //rajahdys.AddEffect(x, y, pMaara);
361        rajahdys2.AddEffect(x, y, pMaara2);
362
363        pelaajan2Pisteet.Value += 1;
364
365        UusiEra();
366    }
367    void Pelaaja2Tuhoutuu()
368    {
369        int pMaxMaara = 200;
370        //ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("liekkiEsimerkki"), pMaxMaara);
371        ExplosionSystem rajahdys2 = new ExplosionSystem(LoadImage("rajahdysEsimerkki2"), pMaxMaara);
372        //Add(rajahdys);
373        Add(rajahdys2);
374
375        double x = auto2.X;
376        double y = auto2.Y;
377        //int pMaara = 100;
378        int pMaara2 = 200;
379        //rajahdys.AddEffect(x, y, pMaara);
380        rajahdys2.AddEffect(x, y, pMaara2);
381
382        pelaajan1Pisteet.Value += 1;
383
384        UusiEra();
385    }
386    void Voitto()
387    {
388        if (pelaajan1Pisteet.Value >= 5)
389        {
390            MessageDisplay.Add("Punainen Voitti!");
391            MessageDisplay.X = 560.0;
392            MessageDisplay.Y = 470.0;
393            Loppui();
394            Remove(auto1);
395            Remove(auto2);
396        }
397        if (pelaajan2Pisteet.Value >= 5)
398        {
399            MessageDisplay.Add("Sininen Voitti!");
400            MessageDisplay.X = 560.0;
401            MessageDisplay.Y = 520.0;
402            Loppui();
403            Remove(auto1);
404            Remove(auto2);
405        }
406    }
407    void Pelaaja1HP()
408    {
409        voimaMittari1 = new DoubleMeter(25);
410        voimaMittari1.MaxValue = 25;
411        BarGauge voimaPalkki = new BarGauge(10, 150);
412        voimaPalkki.BindTo(voimaMittari1);
413        voimaPalkki.X = (0.95 * Screen.LeftSafe);
414        voimaPalkki.Y = (0.05 * Screen.Height);
415        Add(voimaPalkki);
416    }
417    void Pelaaja2HP()
418    {
419        voimaMittari2 = new DoubleMeter(25);
420        voimaMittari2.MaxValue = 25;
421        BarGauge voimaPalkki2 = new BarGauge(10, 150);
422        voimaPalkki2.BindTo(voimaMittari2);
423        voimaPalkki2.X = (0.95 * Screen.RightSafe);
424        voimaPalkki2.Y = (0.05 * Screen.Height);
425        voimaPalkki2.BarColor = Color.Blue;
426        Add(voimaPalkki2);
427    }
428    void KasitteleAuto1Tormays(PhysicsObject auto1, PhysicsObject kohde)
429    {
430
431        if (auto1.Velocity.Magnitude > 500)
432        {
433            voimaMittari1.Value--;
434        }
435        if (voimaMittari1.Value == 0)
436        {
437            Pelaaja1Tuhoutuu();
438        }
439        if (auto2.Velocity.Magnitude > auto1.Velocity.Magnitude)
440        {
441            voimaMittari1.Value--;
442        }
443    }
444    void KasitteleAuto2Tormays(PhysicsObject auto2, PhysicsObject kohde)
445    {
446
447        if (auto2.Velocity.Magnitude > 500)
448        {
449            voimaMittari2.Value--;
450        }
451        if (voimaMittari2.Value == 0)
452        {
453            Pelaaja2Tuhoutuu();
454        }
455        if (auto1.Velocity.Magnitude > auto2.Velocity.Magnitude)
456        {
457            voimaMittari2.Value--;
458        }
459    }
460    void LisaaLaskurit()
461    {
462        pelaajan1Pisteet = LuoPisteLaskuri(-605.0, 150.0);
463        pelaajan2Pisteet = LuoPisteLaskuri(605.0, 150.0);
464    }
465    IntMeter LuoPisteLaskuri(double x, double y)
466    {
467        IntMeter laskuri = new IntMeter(0);
468        laskuri.MaxValue = 5;
469        Label naytto = new Label();
470        naytto.BindTo(laskuri);
471        naytto.X = x;
472        naytto.Y = y;
473        naytto.TextColor = Color.White;
474        Add(naytto);
475        return laskuri;
476    }
477    void UusiEra()
478    {
479        ClearControls();
480
481        voimaMittari1.Value = 25;
482        voimaMittari2.Value = 25;
483
484        auto1.X = -300;
485        auto1.Y = 0;
486        auto2.X = 300;
487        auto2.Y = 0;
488
489        auto1.Angle = new Angle();
490        auto2.Angle = Angle.FromDegrees(180.0);
491
492        auto1.Stop();
493        auto2.Stop();
494
495        EranAlku();
496
497    }
498
499    void AloitaAmpuminen(Automobile auto, Weapon ase)
500    {
501        if (auto == auto1)
502        {
503            auto1.Animation.Start();
504        }
505        else
506        {
507
508            auto2.Animation.Start();
509        }
510    }
511
512    void LopetaAmpuminen(Automobile auto, Weapon ase)
513    {
514        if (auto == auto1)
515        {
516            auto1.Animation.Stop();
517        }
518        else
519        {
520
521            auto2.Animation.Stop();
522        }
523
524    }
525
526    void AmmuAseella(Automobile auto, Weapon ase)
527    {
528        PhysicsObject ammus = ase.Shoot();
529
530        if (ammus != null)
531        {
532            ammus.CollisionIgnorer = auto.CollisionIgnorer;
533            ammus.Size *= 0.5;
534            AddCollisionHandler(ammus, AmmusOsui);
535        }
536    }
537
538    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
539    {
540        ammus.Destroy();
541
542        if (kohde == auto1)
543        {
544            voimaMittari1.Value--;
545            return;
546        }
547        if (kohde == auto2)
548        {
549            voimaMittari2.Value--;
550            return;
551        }
552    }
553
554    void EranAlku()
555    {
556        Remove(auto1);
557        Remove(auto2);
558
559       
560
561        MessageDisplay.Clear();
562
563        Timer aikaLaskuri = new Timer();
564        aikaLaskuri.Interval = 3;
565        aikaLaskuri.Trigger+= AikaLoppui;
566        aikaLaskuri.Start();
567
568        aikaNaytto = new Label();
569        aikaNaytto.TextColor = Color.White;
570        aikaNaytto.X = 0.0;
571        aikaNaytto.Y = 0.0;
572        aikaNaytto.DecimalPlaces = 1;
573        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
574        Add(aikaNaytto);
575
576        pyssy1.Ammo.Value = 9999;
577        pyssy2.Ammo.Value = 9999;
578
579        auto1.Angle = new Angle();
580        auto2.Angle = Angle.FromDegrees(180.0);
581
582        auto1.Stop();
583        auto2.Stop();
584
585        Voitto();
586    }
587
588    void AikaLoppui(Timer ajastin)
589    {
590        Add(auto1, 0);
591        Add(auto2, 0);
592
593        auto1.Animation.Stop();
594        auto2.Animation.Stop();
595
596        auto1.X = -300;
597        auto1.Y = 0;
598        auto2.X = 300;
599        auto2.Y = 0;
600
601        MessageDisplay.Add("Start!");
602        MessageDisplay.X = 125.0;
603        MessageDisplay.Y = 100.0;
604        ajastin.Stop();
605        ajastin.Reset();
606        ajastin.Stop();
607        aikaNaytto.Destroy();
608        AsetaOhjaimet();
609
610        pyssy1.Ammo.Value = 9999;
611        pyssy2.Ammo.Value = 9999;
612    }
613    void Loppui()
614    {
615        Remove(auto1);
616        Remove(auto2);
617        Timer lopunLaskuri = new Timer();
618        lopunLaskuri.Interval = 3;
619        lopunLaskuri.Trigger += PeliLoppui;
620        lopunLaskuri.Start();
621    }
622    void PeliLoppui(Timer ajastin)
623    {
624        Valikko();
625        Level.BackgroundColor = Color.LightBlue;
626        Remove(auto1);
627        Remove(auto2);
628    }
629}
Note: See TracBrowser for help on using the repository browser.