source: 2014/30/AarniAR/AdventureOfStarKid/AdventureOfStarKid/AdventureOfStarKid/AdventureOfStarKid.cs @ 5813

Revision 5813, 18.5 KB checked in by sieerinn, 6 years ago (diff)

FPS tweak

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class Vihu : PlatformCharacter
10{
11    private IntMeter elamaLaskuri;
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Vihu(double leveys, double korkeus, int max)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri = new IntMeter(max, 0, max);
18        elamaLaskuri.LowerLimit += delegate {
19            if (this.Weapon != null)
20            {
21                this.Weapon.AttackSound = null;
22                this.Weapon.Destroy();
23            }
24            this.Destroy();
25        };
26    }
27}
28
29
30public class AdventureOfStarKid : PhysicsGame
31{
32    private Image[] ukkelinKavely = LoadImages("Tyyppi1", "Tyyppi2", "Tyyppi3");
33    private Image[] ukkelinSeisominen = LoadImages("Tyyppi1");
34
35
36    int kenttaNro = 1;
37    private Image[] running = LoadImages("running1", "running2");
38    private Image[] standinganimation = LoadImages("shootinganimation");
39    private Image[] shootinganimation = LoadImages("shootinganimation");
40    private Image[] jumpinganimation = LoadImages("jumpinganimation");
41    private Image[] lifelost = LoadImages("LifeLost");
42    private Image[] damage = LoadImages("Damage");
43    private Image OneUP = LoadImage("1UP");
44    private Image Healing = LoadImage("Healing");
45    private Image killLavaKuva = LoadImage("IntaKillLava");
46    private Image[] pix = LoadImages("Pix1", "Pix2");
47    private Image Shotpot = LoadImage("Shotpot");
48
49    private Image Chargeanimation = LoadImage("chargeAnimation");
50    private Image Charge = LoadImage("ChargeShot");
51    const double nopeus = 200;
52    const double hyppyNopeus = 350;
53
54    private Image Cobblestone = LoadImage("CobbleStone");
55 
56
57    const int RUUDUN_KOKO = 40;
58    PlasmaCannon pelaajan1Ase;
59    PlasmaCannon ladattuAse;
60    PlasmaCannon pelaajan2Ase;
61    DoubleMeter health;
62    DoubleMeter health2;
63
64    IntMeter laskuri;
65
66
67    PlatformCharacter pelaaja1;
68    PlatformCharacter pelaaja2;
69    bool invincible = false;
70
71    Image pelaajanKuva = LoadImage("Standinganimation");
72    Image tahtiKuva = LoadImage("stumper(Enemy)");
73
74    SoundEffect maaliAani = LoadSoundEffect("maali");
75
76    public override void Begin()
77    {
78        SmoothTextures = false;
79        MediaPlayer.IsRepeating = true;
80        alku();
81    }
82
83    void AloitaPeli()
84    {
85        ClearAll();
86
87
88        SeuraavaKentta();
89        LisaaNappaimet();
90
91    }
92
93    void LuoKentta(string kenttaTiedostonNimi)
94    {
95        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
96        kentta.SetTileMethod('#', LisaaCobble);
97        kentta.SetTileMethod('*', Lisaastumper);
98        kentta.SetTileMethod('N', LisaaPelaaja);
99        kentta.SetTileMethod('M', LisaaPelaaja2);
100        kentta.SetTileMethod('1', Lisaa1UP);
101        kentta.SetTileMethod('H', LisaaHealing);
102        kentta.SetTileMethod('L', LisaaKillLava);
103        kentta.SetTileMethod('F', LisaaLoppu);
104        kentta.SetTileMethod('P', Lisaapix);
105        kentta.SetTileMethod('S', LisaaShotpot);
106
107        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
108        Level.CreateBorders();
109        Level.BackgroundColor = new Color( 150, 150, 150);
110
111        laskuri = new IntMeter(0, 0, 100);
112        laskuri.UpperLimit += AseLadattu;
113
114        //laskuri.Interval = 3;
115        //laskuri.Timeout += new Action(laskuri_Timeout);
116    }
117
118    void AseLadattu()
119    {
120        MessageDisplay.Add("Ase ladattu");
121        pelaaja1.Weapon = ladattuAse;
122    }
123
124    void Lisaa1UP(Vector paikka, double leveys, double korkeus)
125    {
126        AddItem(paikka, leveys, korkeus, OneUP, "1UP");
127    }
128
129    void LisaaHealing(Vector paikka, double leveys, double korkeus)
130    {
131        AddItem(paikka, leveys, korkeus, Healing, "Heal");
132
133    }
134
135    void AddItem(Vector paikka, double leveys, double korkeus, Image Kuva, String tagi)
136    {
137        PhysicsObject Item = new PhysicsObject(leveys, korkeus);
138        Item.Position = paikka;
139        Add(Item);
140        Item.Image = Kuva;
141        Item.Tag = tagi;
142    }
143
144    void LisaaCobble(Vector paikka, double leveys, double korkeus)
145    {
146        PhysicsObject Cobble = PhysicsObject.CreateStaticObject(leveys, korkeus);
147        Cobble.Position = paikka;
148        Cobble.Image = Cobblestone;
149        Add(Cobble);
150    }
151
152    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
153    {
154        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
155        taso.Position = paikka;
156        taso.Color = Color.Black;
157        taso.Tag = "loppu";
158        Add(taso);
159    }
160
161    void Lisaastumper(Vector paikka, double leveys, double korkeus)
162    {
163        Vihu stumper = new Vihu(leveys - 4, korkeus - 4, 10);
164        stumper.IgnoresCollisionResponse = false;
165
166        stumper.Position = paikka;
167        stumper.Image = tahtiKuva;
168        stumper.Tag = "stumper";
169        Add(stumper);
170
171        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
172        tasoAivot.Speed = 100;
173        tasoAivot.TriesToJump = false;
174        //stumper.CollisionIgnoreGroup = 2;
175        stumper.Brain = tasoAivot;
176
177    }
178    void LisaaKillLava(Vector paikka, double leveys, double korkeus)
179    {
180        PhysicsObject killLava = new PhysicsObject(leveys, korkeus);
181        killLava.IgnoresCollisionResponse = true;
182        killLava.IgnoresPhysicsLogics = true;
183        killLava.Position = paikka;
184        killLava.Image = killLavaKuva;
185        killLava.Tag = "InstaKill";
186        killLava.Position = paikka + new Vector(0, -4);
187        Add(killLava);
188
189    }
190
191    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
192    {
193        pelaaja1 = new PlatformCharacter(leveys * 0.5, korkeus);
194        pelaaja1.Position = paikka;
195        pelaaja1.Mass = 4.0;
196        pelaaja1.Image = pelaajanKuva;
197        AddCollisionHandler(pelaaja1, "stumper", TormaaTahteen);
198       
199        AddCollisionHandler(pelaaja1, "pix", Tormaapixiin);
200        Add(pelaaja1);
201        AddCollisionHandler(pelaaja1, "1UP", tormaaOneUP);
202        AddCollisionHandler(pelaaja1, "Heal", tormaaHealingiin);
203        AddCollisionHandler(pelaaja1, "InstaKill", tormaakillLava);
204        AddCollisionHandler(pelaaja1, "loppu", tormaaLoppu);
205        pelaaja1.AnimWalk = new Animation(running);
206        pelaaja1.AnimWalk.FPS = 4;
207        pelaaja1.AnimIdle = new Animation(shootinganimation);
208        pelaaja1.AnimJump = new Animation(jumpinganimation);
209        pelaaja1.AnimFall = new Animation(jumpinganimation);
210
211        pelaajan1Ase = new PlasmaCannon(1.0, 1.0);
212        pelaajan1Ase.InfiniteAmmo = true;
213        pelaajan1Ase.ProjectileCollision += delegate(PhysicsObject ammus, PhysicsObject kohde) { AmmusOsuu(ammus, kohde, 1); };
214        pelaaja1.Weapon = pelaajan1Ase;
215
216        ladattuAse = new PlasmaCannon(2.0, 2.0);
217        ladattuAse.InfiniteAmmo = true;
218        ladattuAse.ProjectileCollision += delegate(PhysicsObject ammus, PhysicsObject kohde) { AmmusOsuu(ammus, kohde, 10); };
219    }
220
221    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
222    {
223        pelaaja2 = new PlatformCharacter(leveys, korkeus);
224        pelaaja2.Position = paikka;
225        pelaaja2.Mass = 4.0;
226        pelaaja2.Image = pelaajanKuva;
227        AddCollisionHandler(pelaaja2, "Diamond", TormaaTahteen);
228        pelaaja2.AnimWalk = new Animation(ukkelinKavely);
229        pelaaja2.AnimWalk.FPS = 9;
230        pelaaja2.AnimIdle = new Animation(ukkelinSeisominen);
231        Add(pelaaja2);
232
233        pelaajan2Ase = new PlasmaCannon(1.0, 1.0);
234        pelaajan2Ase.InfiniteAmmo = true;
235        pelaajan2Ase.ProjectileCollision += delegate(PhysicsObject ammus, PhysicsObject kohde) { AmmusOsuu(ammus, kohde, 1); }; ;
236        pelaaja2.Weapon = pelaajan2Ase;
237
238        AddCollisionHandler(pelaaja2, "stumper", TormaaTahteen);
239        AddCollisionHandler(pelaaja2, "1UP", tormaaOneUP);
240        AddCollisionHandler(pelaaja2, "Heal", tormaaHealingiin);
241        AddCollisionHandler(pelaaja2, "InstaKill", tormaakillLava);
242        AddCollisionHandler(pelaaja2, "loppu", tormaaLoppu);
243    }
244
245    void tormaaLoppu(PhysicsObject pelaaja, PhysicsObject loppu)
246    {
247        kenttaNro++;
248        SeuraavaKentta();
249    }
250
251    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde, int damage)
252    {
253        ammus.Destroy();
254
255        if (kohde is Vihu)
256        {
257            (kohde as Vihu).ElamaLaskuri.Value -= damage;
258        }
259    }
260
261    void LisaaNappaimet()
262    {
263        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
264        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
265
266        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
267        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
268        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
269        Keyboard.Listen(Key.P, ButtonState.Pressed, Ammu, "Ampuu", pelaajan1Ase);
270        Keyboard.Listen(Key.O, ButtonState.Down, AmmuCharge, "LataaAse");
271        Keyboard.Listen(Key.O, ButtonState.Released, Ammu, "Ampuu", ladattuAse);
272
273        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
274        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
275        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
276        //Keyboard.Listen(Key.Space, ButtonState.Pressed, HeitaKranaatti, "Pelaaja hyppää", pelaaja2);
277
278        //eyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Ampuu", pelaajan2Ase);
279
280        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
281
282        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
283        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
284        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
285
286        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
287    }
288
289    void HeitaKranaatti(PlatformCharacter pelaaja)
290    {
291        Grenade kranu = new Grenade(4.0);
292        pelaaja.Throw(kranu, Angle.FromDegrees(45), 10000);
293    }
294
295    void Liikuta(PlatformCharacter hahmo, double nopeus)
296    {
297        hahmo.Walk(nopeus);
298    }
299
300    void Hyppaa(PlatformCharacter hahmo, double nopeus)
301    {
302        hahmo.Jump(nopeus);
303    }
304
305    void OtaVahinkoa(PhysicsObject pelaaja, int maara)
306    {
307        if (pelaaja == pelaaja1) health.Value -= maara;
308        if (pelaaja == pelaaja2) health2.Value -= maara;
309    }
310
311    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject stumper)
312    {
313        if (!invincible)
314        {
315            maaliAani.Play();
316            MessageDisplay.Add("Ouch!");
317            OtaVahinkoa(hahmo, 4);
318        }
319        //stumper.Destroy();
320    }
321
322    void Ammu(PlasmaCannon Ase)
323    {
324        PhysicsObject ammus = Ase.Shoot();
325        if (ammus != null)
326        {
327            if (pelaaja1.Weapon == ladattuAse)
328            {
329                ammus.Image = Charge;
330                ammus.Size *= 3;
331            }
332
333            ammus.IgnoresCollisionResponse = true;
334            pelaaja1.Animation = new Animation(shootinganimation);
335            pelaaja1.Animation.Start();
336        }
337
338        pelaaja1.Weapon = pelaajan1Ase;
339        laskuri.Value = 0;
340        //if (laskuri != null) laskuri.Stop();
341    }
342
343    void AmmuCharge()
344    {
345        //laskuri.Start();
346        laskuri.Value++;
347    }
348
349    //void laskuri_Timeout()
350    //{
351    //    laskuri.Stop();
352    //    pelaaja1.Weapon = ladattuAse;
353    //    MessageDisplay.Add("Ase ladattu");
354    //}
355
356    void LuoPistelaskuri()
357    {
358        health = new DoubleMeter(30);
359        health.MaxValue = 30;
360        health.MinValue = 0;
361        health.LowerLimit += PelaajaHaviaa;
362
363        health.Changed += delegate
364        {
365            Animation anim = new Animation(damage);
366            anim.FPS = 3.0;
367            pelaaja1.PlayAnimation(anim);
368            invincible = true;
369            Timer.SingleShot(1, delegate { invincible = false; });
370        };
371
372        ProgressBar healthMeter = new ProgressBar(150, 20);
373        healthMeter.X = Screen.Left + 150;
374        healthMeter.Y = Screen.Top - 100;
375        healthMeter.BindTo(health);
376        Add(healthMeter);
377
378        healthMeter.Angle = Angle.RightAngle;
379        healthMeter.Color = Color.Transparent;
380        healthMeter.BarColor = Color.Red;
381        healthMeter.BorderColor = Color.Black;
382
383
384
385    }
386
387    void LuoPistelaskuri2()
388    {
389        health2 = new DoubleMeter(10);
390        health2.MaxValue = 15;
391        health2.MinValue = 0;
392        health2.LowerLimit += PelaajaHaviaa;
393
394        health2.Changed += delegate
395        {
396            Animation anim = new Animation(damage);
397            anim.FPS = 6.0;
398            pelaaja2.PlayAnimation(anim);
399            invincible = true;
400            Timer.SingleShot(1, delegate { invincible = false; });
401        };
402
403        ProgressBar healthMeter = new ProgressBar(150, 20);
404        healthMeter.X = Screen.Right - 150;
405        healthMeter.Y = Screen.Top - 100;
406        healthMeter.BindTo(health2);
407        Add(healthMeter);
408
409        healthMeter.Angle = Angle.RightAngle;
410        healthMeter.Color = Color.Transparent;
411        healthMeter.BarColor = Color.Beige;
412        healthMeter.BorderColor = Color.Beige;
413    }
414
415    void PelaajaHaviaa()
416    {
417        MessageDisplay.Add("Life Lost.. Try Again!");
418        pelaaja1.Destroy();
419        //pelaaja2.Destroy();
420
421        GameObject kuoli = new GameObject(pelaaja1.Width, pelaaja1.Height);
422        kuoli.Image = lifelost[0];
423        kuoli.Position = pelaaja1.Position;
424        Add(kuoli);
425       
426        //GameObject kuoli2 = new GameObject(pelaaja2.Width, pelaaja2.Height);
427        //kuoli2.Image = lifelost[0];
428        //kuoli2.Position = pelaaja2.Position;
429        //Add(kuoli2);
430
431        //Timer.SingleShot(2, kuoli.Destroy);
432        //Timer.SingleShot(2, kuoli2.Destroy);
433
434        Timer.SingleShot(5, AloitaPeli);
435    }
436    void tormaaOneUP(PhysicsObject pelaaja, PhysicsObject OneUP)
437    {
438        if (pelaaja == pelaaja1)
439            health.Value = health.MaxValue;
440        if (pelaaja == pelaaja2)
441            health2.Value = health2.MaxValue;
442        MessageDisplay.Add("Full Heal!");
443        OneUP.Destroy();
444    }
445    void tormaaHealingiin(PhysicsObject pelaaja, PhysicsObject Healing)
446    {
447        if (pelaaja == pelaaja1)
448            health.Value += 3;
449        MessageDisplay.Add("+3 health");
450        if (pelaaja == pelaaja2)
451            health2.Value = 3;
452        Healing.Destroy();
453
454    }
455
456
457    void SeuraavaKentta()
458    {
459        ClearAll();
460        Gravity = new Vector(0, -1000);
461
462        if (kenttaNro == 1)
463        {
464            LuoKentta("kentta1");
465            MediaPlayer.Play("brinstar");
466            MessageDisplay.Add("Stage 1, The Beginning");
467        }
468        else if (kenttaNro == 2)
469        {
470            LuoKentta("kentta2");
471            MediaPlayer.Play("Stage 2");
472            MessageDisplay.Add("Stage 2, Lava Lake");
473        }
474        else if (kenttaNro == 3)
475        {
476            LuoKentta("kentta3");
477            MediaPlayer.Play("Stage 3");
478            MessageDisplay.Add("Stage 3, Getting Close");
479        }
480        else if (kenttaNro == 4)
481        {
482            LuoKentta("kentta4");
483            MediaPlayer.Play("Stage 4");
484            MessageDisplay.Add("Stage 4, The Final Run");
485        }
486        else if (kenttaNro > 4)
487        {
488            Exit();
489        }
490
491
492        LisaaNappaimet();
493        LuoPistelaskuri();
494        //LuoPistelaskuri2();
495
496        Camera.Follow(pelaaja1);
497        Camera.ZoomFactor = 1.2;
498        Camera.StayInLevel = true;
499    }
500
501    void alku()
502    {
503        MultiSelectWindow alkuValikko = new MultiSelectWindow("AdventureOfTheStarKid",
504"Aloita peli", "Lopeta");
505        Add(alkuValikko);
506        alkuValikko.AddItemHandler(0, AloitaPeli);
507        MediaPlayer.Play("title");
508        alkuValikko.AddItemHandler(1, Exit);
509        alkuValikko.DefaultCancel = 3;
510    }
511    void tormaakillLava(PhysicsObject pelaaja, PhysicsObject killLava)
512    {
513        if (pelaaja == pelaaja1)
514            health.Value -= 15;
515        if (pelaaja == pelaaja2)
516            health2.Value -= 15;
517    }
518
519    void Lisaapix(Vector paikka, double leveys, double korkeus)
520    {
521
522        Vihu pix = new Vihu(leveys - 4, korkeus - 4, 7);
523        pix.IgnoresCollisionResponse = false;
524
525        pix.Position = paikka;
526        pix.Animation = new Animation(this.pix);
527        pix.AnimWalk = new Animation(this.pix);
528        pix.AnimWalk.FPS = 6;
529        pix.Tag = "pix";
530        Add(pix);
531        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
532        tasoAivot.Speed = 300;
533        tasoAivot.JumpSpeed = 800;
534        tasoAivot.TriesToJump = true;
535        //pix.CollisionIgnoreGroup = 3;
536        pix.Brain = tasoAivot;
537
538
539    }
540
541    void Tormaapixiin(PhysicsObject hahmo, PhysicsObject pix)
542    {
543        if (!invincible)
544        {
545            maaliAani.Play();
546            MessageDisplay.Add("Ouch!");
547            OtaVahinkoa(hahmo, 2);
548        }
549    }
550    void LisaaShotpot(Vector paikka, double leveys, double korkeus)
551    {
552        Vihu shotpot = new Vihu(leveys - 4, korkeus - 4, 10);
553        shotpot.IgnoresCollisionResponse = false;
554
555        shotpot.Angle = Angle.FromDegrees(180);
556        shotpot.Position = paikka;
557        shotpot.Image = Shotpot;
558        shotpot.RotateImage = false;
559        shotpot.Tag = "shotpot";
560        Add(shotpot);
561        shotpot.MakeStatic();
562       
563        Cannon tykki = new Cannon(0,1);
564        tykki.ProjectileCollision = shotpotosuu;
565        shotpot.Weapon = tykki;
566        //shotpot.Add(tykki);
567        tykki.AmmoIgnoresGravity = true;
568        Timer ajastin = new Timer();
569        ajastin.Interval = 1.5;
570        ajastin.Timeout += delegate { shotpotampuu(tykki); };
571        ajastin.Start();
572
573        tykki.FireRate = 2.0;
574    }
575
576    void shotpotosuu(PhysicsObject ammus, PhysicsObject kohde)
577    {
578        ammus.Destroy();
579
580        if (kohde == pelaaja1)
581        {
582            OtaVahinkoa(pelaaja1, 1);
583            MessageDisplay.Add("Ouch!");
584        }
585    }
586
587    void shotpotampuu(Cannon tykki)
588    {
589        tykki.Shoot();
590    }
591}
Note: See TracBrowser for help on using the repository browser.