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

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