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

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