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

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