source: 2012/09-22/SanteriH/Kynari/Kynari/Kynari/Kynari.cs @ 3841

Revision 3841, 17.2 KB checked in by anlakane, 8 years ago (diff)
Line 
1using System;
2
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6using Jypeli.Controls;
7
8// Yksinkertainen tasohyppely.
9public class Kynari : PhysicsGame
10{
11    #region Muuttujat
12
13    const double liikeVoima = 2000;
14    const double hyppyVoima = 2000;
15
16    PlatformCharacter pelaaja1;
17    PlatformCharacter pelaaja2;
18    DoubleMeter HitPoint1 = new DoubleMeter(100);
19    DoubleMeter HitPoint2 = new DoubleMeter(100);
20
21    Image kranaatinheittimenkuva = LoadImage("grenade");
22    Image magnumkuva = LoadImage("magnum");
23    Image norsu = LoadImage("norsu");
24
25    BarGauge hpNaytto;
26    BarGauge hpNaytto2;
27
28    bool pelaaja1asevaihto = true;
29    bool pelaaja2asevaihto = true;
30
31    Meter<int> pelaajan1Pisteet;
32    Meter<int> pelaajan2Pisteet;
33
34    #endregion
35
36    #region Alustukset
37    public override void Begin()
38    {
39        LisaaLaskurit();
40        DrawPerimeter = false; // ei haluta piirtää kentän reunoja
41
42        // Asetetaan painovoima
43        Gravity = new Vector(0, -1000);
44        // Zoomataan lähemmäksi
45        Camera.ZoomFactor = 0.7;
46        aloitaUusiPeli();
47    }
48
49    void aloitaUusiPeli()
50    {
51        MessageDisplay.Clear();
52        // ladataan kenttä
53        seuraavaKentta();
54        pelaaja1asevaihto = true;
55        pelaaja2asevaihto = true;
56        naytaTiedot();
57
58    }
59    #endregion
60
61
62    #region KentanLataus
63    void seuraavaKentta()
64    {
65        ClearAll();
66        lisaaNappaimet();
67        Camera.Position = new Vector(0, 0);
68    }
69
70    Level luoKentta()
71    {
72        Level.Width = 4000;
73        Level.Height = 1000;
74        Level.CreateBorders();
75        Level.Background.CreateGradient(Color.White, Color.Gray);
76
77        luoTasot();
78        lisaaPelaajat();
79        lisaaAsePelaajalle();
80        lisaaKerattavaAse();
81        lisaaHPNaytot();
82
83        return Level;
84    }
85
86    void luoTasot()
87    {
88        PhysicsObject alusta = new PhysicsObject(Level.Width, 300);
89        alusta.Color = Color.Gray;
90        alusta.X = 0;
91        alusta.Y = Level.Bottom - alusta.Height / 2;
92        Add(alusta);
93
94        lisaaPieniTaso(-200, -350);
95        lisaaPieniTaso(0, -400);
96        lisaaPieniTaso(100, -300);
97        lisaaPieniTaso(400, -350);
98        lisaaPieniTaso(450, -200);
99        lisaaPieniTaso(-500, -400);
100        lisaaPieniTaso(-550, -200);
101        lisaaPieniTaso(-400, -300);
102        lisaaPieniTaso(-150, -150);
103        lisaaPieniTaso(-870, -350);
104        lisaaPieniTaso(-700, -400);
105
106        lisaaPieniTaso(600, -300);
107        lisaaPieniTaso(850, -300);
108        lisaaPieniTaso(750, -400);
109        lisaaPieniTaso(200, -200);
110        lisaaPieniTaso(-200, -150);
111
112        lisaaPystyTaso(600, -450);
113        lisaaPystyTaso(-600, -500);
114        lisaaPystyTaso(0, -450);
115
116        lisaaReuna(-900, 0);
117        lisaaReuna(900, 0);
118    }
119
120    void lisaaHPNaytot()
121    {
122        // luodaan elämänäyttö
123        hpNaytto = new BarGauge(30, 250);
124        hpNaytto.Angle = Angle.FromDegrees(90);
125        hpNaytto.BarColor = Color.LightGreen;
126        hpNaytto.Color = Color.Red;
127        hpNaytto.BindTo(HitPoint1);
128        hpNaytto.Position = new Vector(Screen.RightSafe - 1000, Screen.TopSafe - 170);
129        Add(hpNaytto);
130
131        hpNaytto2 = new BarGauge(30, 250);
132        hpNaytto2.Angle = Angle.FromDegrees(90);
133        hpNaytto2.BarColor = Color.LightGreen;
134        hpNaytto2.Color = Color.Red;
135        hpNaytto2.BindTo(HitPoint2);
136        hpNaytto2.Position = new Vector(Screen.RightSafe - 300, Screen.TopSafe - 170);
137        Add(hpNaytto2);
138    }
139
140    void LisaaLaskurit()
141    {
142        pelaajan1Pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
143        pelaajan2Pisteet = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 100.0);
144        pelaajan1Pisteet.UpperLimit += (laskuri1_UpperLimit);
145        pelaajan2Pisteet.UpperLimit += (laskuri2_UpperLimit);
146    }
147
148    void NollaaLaskurit()
149    {
150        pelaajan1Pisteet.Reset();
151        pelaajan2Pisteet.Reset();
152    }
153
154    IntMeter LuoPisteLaskuri(double x, double y)
155    {
156        IntMeter laskuri = new IntMeter(0);
157        Label naytto = new Label();
158        naytto.BindTo(laskuri);
159        naytto.X = x;
160        naytto.Y = y;
161        Add(naytto);
162        return laskuri;
163    }
164
165    void laskuri1_UpperLimit()
166    {
167        MessageDisplay.Clear();
168        MessageDisplay.Add("Pelaaja 1 voittaa!");
169        MessageDisplay.X = -100;
170
171    }
172
173    void laskuri2_UpperLimit()
174    {
175        MessageDisplay.Clear();
176        MessageDisplay.Add("Pelaaja 2 voittaa!");
177        MessageDisplay.X = -100;
178
179    }
180
181    void lisaaPieniTaso(double x, double y)
182    {
183        PhysicsObject taso = new PhysicsObject(100, 30);
184        taso.Color = Color.Gray;
185        taso.X = x;
186        taso.Y = y;
187        Add(taso);
188    }
189
190    void lisaaReuna(double x, double y)
191    {
192        PhysicsObject taso = new PhysicsObject(50, 1000);
193        taso.Color = Color.Gray;
194        taso.X = x;
195        taso.Y = y;
196        Add(taso);
197    }
198
199    void lisaaPystyTaso(double x, double y)
200    {
201        PhysicsObject taso = new PhysicsObject(30, 100);
202        taso.Color = Color.Gray;
203        taso.X = x;
204        taso.Y = y;
205        Add(taso);
206    }
207
208    void lisaaPelaajat()
209    {
210        pelaaja1 = new PlatformCharacter(40, 40, Shape.Circle);
211        pelaaja1.Image = norsu;
212        pelaaja1.X = -700;
213        pelaaja1.Mass = 4;
214        pelaaja1.Y = Level.Bottom + 20;
215
216        pelaaja2 = new PlatformCharacter(40, 40, Shape.Circle);
217        pelaaja2.Image = norsu;
218        pelaaja2.X = 700;
219        pelaaja2.Y = Level.Bottom + 20;
220
221        HitPoint1.MaxValue = 100;
222        HitPoint1.Value = 100;
223        HitPoint1.LowerLimit += pelaaja1Kuoli;
224
225        HitPoint2.MaxValue = 100;
226        HitPoint2.Value = 100;
227        HitPoint2.LowerLimit += pelaaja2Kuoli;
228
229        Add(pelaaja1);
230        Add(pelaaja2);
231    }
232
233    void pelaaja1Kuoli()
234    {
235        PlatformCharacter pelaaja = (PlatformCharacter)sender;
236        /*
237        pelaaja.UnequipWeapon();
238        Weapon kuolinAse = pelaaja.Weapon;
239        kuolinAse.RemoveFromOwner();
240        kuolinAse.Unequip();
241        kuolinAse.Visible = true;
242        */
243        pelaaja.Destroy();
244        MessageDisplay.Clear();
245        MessageDisplay.X = -100;
246        MessageDisplay.Add("Pelaaja 2 voitti erän!");
247        pelaajan2Pisteet.Value += 1;
248
249        if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
250        {
251            return;
252        }
253
254        else
255        {
256            Timer ajastin2 = new Timer();
257            ajastin2.Interval = 3;
258            ajastin2.Trigger += new Timer.TriggerHandler(eraloppui);
259            ajastin2.Start();
260            AddTimer(ajastin2);
261        }
262
263    }
264    void pelaaja2Kuoli()
265    {
266        PlatformCharacter pelaaja = (PlatformCharacter)sender;
267        /*
268        pelaaja.UnequipWeapon();
269        Weapon kuolinAse = pelaaja.Weapon;
270        kuolinAse.RemoveFromOwner();
271        kuolinAse.Unequip();
272        kuolinAse.Visible = true;
273        */
274        pelaaja.Destroy();
275        MessageDisplay.Clear();
276        MessageDisplay.X = -100;
277        MessageDisplay.Add("Pelaaja 1 voitti erän!");
278        pelaajan1Pisteet.Value += 1;
279
280        if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
281        {
282            return;
283        }
284
285        else
286        {
287            Timer ajastin2 = new Timer();
288            ajastin2.Interval = 3;
289            ajastin2.Trigger += new Timer.TriggerHandler(eraloppui);
290            ajastin2.Start();
291            AddTimer(ajastin2);
292        }
293    }
294
295    void eraloppui(Timer sender)
296    {
297        aloitaUusiPeli();
298        sender.Stop();
299        RemoveTimer(sender);
300    }
301
302    void keraaAse(PhysicsObject pelaaja, PhysicsObject kohde)
303    {
304        if (kohde is PlatformCharacter)
305        {
306            if (kohde == pelaaja1)
307            {
308                if (pelaaja1asevaihto == false)
309                    return;
310
311                pelaaja1asevaihto = false;
312            }
313
314            if (kohde == pelaaja2)
315            {
316                if (pelaaja2asevaihto == false)
317                    return;
318
319                pelaaja2asevaihto = false;
320            }
321
322            Timer ajastin = new Timer();
323            ajastin.Interval = 1;
324            ajastin.Tag = collision.Other;
325            ajastin.Trigger += new Timer.TriggerHandler(salliAseenvaihto);
326            ajastin.Start();
327            AddTimer(ajastin);
328
329            // Pelaaja törmäsi aseeseen
330            ProjectileWeapon ase = (ProjectileWeapon)collision.Obj;
331            PlatformCharacter pelaaja = (PlatformCharacter)collision.Other;
332            if (ase.Owner != null)
333            {
334                return;
335            }
336            pelaaja.UnequipWeapon();
337            Weapon vanhaAse = pelaaja.Weapon;
338            vanhaAse.RemoveFromOwner();
339            vanhaAse.X = pelaaja.X + vanhaAse.Width;
340            vanhaAse.Y = pelaaja.Y;
341            vanhaAse.Visible = true;
342            vanhaAse.Hit(new Vector(100, 20));
343            pelaaja.Weapon = ase;
344            pelaaja.EquipWeapon();
345            pelaaja.Weapon.Texture = ase.Texture;
346            naytaTiedot();
347        }
348    }
349
350
351
352    void salliAseenvaihto(Timer sender)
353    {
354        if (sender.Tag == pelaaja1)
355        {
356            pelaaja1asevaihto = true;
357        }
358        else if (sender.Tag == pelaaja2)
359        {
360            pelaaja2asevaihto = true;
361        }
362
363        sender.Stop();
364        RemoveTimer(sender);
365    }
366
367    void OnkoPelaaja(PhysicsObject olio)
368    {
369        return (olio == pelaaja1 || olio == pelaaja2);
370    }
371
372    void lisaaKerattavaAse()
373    {
374        //Täällä lisätään ase kenttään
375        Bullet luoti = new Bullet();
376        Bullet luoti2 = new Bullet();
377        Bullet hauli = new Bullet();
378
379        Grenade kranaatti = new Grenade();
380        kranaatti.Explosion = new Explosion(50, 200, 20, new Damage(10000));
381        kranaatti.ExplodeCondition = OnkoPelaaja;
382
383        Texture2D shotgun = Content.Load<Texture2D>("shotgun");
384        Texture2D grenade = Content.Load<Texture2D>("grenade");
385        Texture2D magnumtexture = Content.Load<Texture2D>("magnum");
386
387        AssaultRifle kivaari = new AssaultRifle(luoti);
388        kivaari.X = 200;
389        kivaari.Y = -100;
390        kivaari.FireRate = 5;
391        kivaari.MomentOfInertia = double.PositiveInfinity;
392        kivaari.Mass = 0.1;
393        kivaari.Tag = "Kivääri";
394        Add(kivaari);
395
396        AssaultRifle magnum = new AssaultRifle(luoti2);
397        magnum.X = 0;
398        magnum.Y = -300;
399        magnum.FireRate = 1;
400        magnum.MomentOfInertia = double.PositiveInfinity;
401        magnum.Mass = 0.1;
402        magnum.Tag = "Magnum";
403        magnum.Shape = Shapes.CreateFromTexture(magnumtexture, new Vector(magnumtexture.Width, magnumtexture.Height), 100);
404        magnum.Size = new Vector(magnumtexture.Width, magnumtexture.Height);
405        magnum.UpdateShapeFromSize();
406        magnum.Texture = magnumtexture;
407        magnum.AmmoType.Damage = new Damage(20);
408        Add(magnum);
409
410        AssaultRifle haulikko = new AssaultRifle(hauli);
411        haulikko.X = -550;
412        haulikko.Y = 0;
413        haulikko.FireRate = 0.75;
414        haulikko.MomentOfInertia = double.PositiveInfinity;
415        haulikko.Mass = 0.1;
416        haulikko.Tag = "Haulikko";
417        haulikko.AmmoType.Damage = new Damage(35);
418        haulikko.AmmoType.ClusterArc = 3;
419        haulikko.Texture = shotgun;
420        Add(haulikko);
421
422        Cannon kranaatinheitin = new Cannon(kranaatti);
423        kranaatinheitin.X = -200;
424        kranaatinheitin.Y = -100;
425        kranaatinheitin.FireRate = 0.2;
426        kranaatinheitin.MomentOfInertia = double.PositiveInfinity;
427        kranaatinheitin.Mass = 0.1;
428        kranaatinheitin.Power = new Meter<double>(5000, 0, 5000);
429        kranaatinheitin.Tag = "Kranaatinheitin";
430        kranaatinheitin.Shape = Shapes.CreateFromTexture(grenade, new Vector(grenade.Width, grenade.Height), 100);
431        kranaatinheitin.Size = new Vector(grenade.Width, grenade.Height);
432        kranaatinheitin.UpdateShapeFromSize();
433        kranaatinheitin.Texture = grenade;
434        Add(kranaatinheitin);
435
436        //Lisää myös törmäyksen käsittelijä aseelle, jossa kutsutaan keraaAse -aliohjelmaa
437        AddCollisionHandler(kivaari, keraaAse);
438        AddCollisionHandler(haulikko, keraaAse);
439        AddCollisionHandler(kranaatinheitin, keraaAse);
440        AddCollisionHandler(magnum, keraaAse);
441    }
442
443    void lisaaAsePelaajalle()
444    {
445        Bullet luoti = new Bullet();
446
447        Texture2D pistol = Content.Load<Texture2D>("pistol");
448
449        pelaaja1.UnequipWeapon();
450        pelaaja1.Weapon = new AssaultRifle(luoti);
451        pelaaja1.Weapon.FireRate = 2;
452        pelaaja1.Weapon.Mass = 0.1;
453        Add(pelaaja1.Weapon);
454        pelaaja1.EquipWeapon();
455        pelaaja1.Weapon.MomentOfInertia = double.PositiveInfinity;
456        pelaaja1.Weapon.Tag = "Pistooli";
457        pelaaja1.Weapon.Shape = Shapes.CreateFromTexture(pistol, new Vector(pistol.Width, pistol.Height), 100);
458        pelaaja1.Weapon.Size = new Vector(pistol.Width, pistol.Height);
459        pelaaja1.Weapon.UpdateShapeFromSize();
460        pelaaja1.Weapon.Texture = pistol;
461        AddCollisionHandler(pelaaja1.Weapon, keraaAse);
462
463        pelaaja2.UnequipWeapon();
464        pelaaja2.Weapon = new AssaultRifle(luoti);
465        pelaaja2.Weapon.FireRate = 2;
466        pelaaja2.Weapon.Mass = 0.1;
467        Add(pelaaja2.Weapon);
468        pelaaja2.EquipWeapon();
469        // pelaaja2.Weapon.MomentOfInertia = double.PositiveInfinity;
470        pelaaja2.Weapon.Tag = "Pistooli";
471        pelaaja2.Weapon.Shape = Shapes.CreateFromTexture(pistol, new Vector(pistol.Width, pistol.Height), 100);
472        pelaaja2.Weapon.Size = new Vector(pistol.Width, pistol.Height);
473        // pelaaja2.Weapon.UpdateShapeFromSize();
474        pelaaja2.Weapon.Image = LoadImage("pistol");
475        AddCollisionHandler(pelaaja2.Weapon, keraaAse);
476    }
477
478    #endregion
479
480
481    #region Nappaimet
482    // Lisää peliin kaikki näppäimet
483    void lisaaNappaimet()
484    {
485        ClearControls();
486        //Yleiset näppäimet
487        Keyboard.Listen(Key.F1, ButtonState.Pressed, uusiPeli, "Aloittaa uuden pelin");
488
489        // Pelaajan näppäimet
490        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-liikeVoima, 0));
491        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(liikeVoima, 0));
492        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
493        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
494
495        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-liikeVoima, 0));
496        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, new Vector(liikeVoima, 0));
497        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, hyppyVoima);
498        Keyboard.Listen(Key.Enter, ButtonState.Down, Ammu, "Ammu", pelaaja2);
499
500        lisaaGamePadNappaimet(ControllerOne, pelaaja1);
501        lisaaGamePadNappaimet(ControllerTwo, pelaaja2);
502    }
503
504    void lisaaGamePadNappaimet(GamePad pelaajaNro, PlatformCharacter pelaaja)
505    {
506        //Yleiset näppäimet
507        //pelaajaNro.Listen(pelaajaNro, Button.Start, ButtonState.Pressed, uusiPeli, "Aloittaa uuden pelin");
508
509        //pelaajaNro.Listen(pelaajaNro, Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-liikeVoima, 0));
510        //pelaajaNro.Listen(pelaajaNro, Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(liikeVoima, 0));
511        //pelaajaNro.Listen(pelaajaNro, Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, hyppyVoima);
512        //pelaajaNro.Listen(pelaajaNro, Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
513    }
514
515    // Näppäimiin liitetyt toiminnot alkavat tästä -->
516    void liikuta(PlatformCharacter hahmo, Vector voima)
517    {
518        hahmo.Walk(e.Time, voima);
519    }
520
521    void naytaTiedot()
522    {
523        MessageDisplay.Clear();
524        MessageDisplay.X = -100;
525        MessageDisplay.Add("Pelaaja 1: " + pelaaja1.Weapon.Tag);
526        MessageDisplay.Add("Pelaaja 2: " + pelaaja2.Weapon.Tag);
527        return false;
528    }
529
530    void Ammu(PlatformCharacter hahmo)
531    {
532        if (pelaaja.IsDestroyed())
533        {
534            return false;
535        }
536
537        Projectile ammus = pelaaja.Weapon.Use();
538
539        if (ammus != null)
540        {
541            Add(ammus);
542        }
543
544        return false;
545    }
546
547    void hyppaa(PlatformCharacter hahmo, double voima)
548    {
549        //PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
550        //double voima = e.Parameter1.ToDouble();
551
552        if (Math.Abs(hahmo.Velocity.Y) > 0.001)
553        {
554            return false;
555        }
556
557        if (hahmo.Jump(voima))
558        {
559            this.PlaySound("hyppays");
560        }
561        return false;
562    }
563
564    void uusiPeli()
565    {
566        NollaaLaskurit();
567        aloitaUusiPeli();
568        return true;
569    }
570    #endregion
571
572
573}
Note: See TracBrowser for help on using the repository browser.