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

Revision 5771, 15.4 KB checked in by sieerinn, 7 years ago (diff)

Pix

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