source: 2015/24/AarniAR/BitPup/BitPup/BitPup/BitPup.cs @ 5984

Revision 5984, 16.8 KB checked in by aajualal, 6 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
9public class BitPup : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 1000; //500;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    int kenttaNro;
17    Image pelaajanKuva = LoadImage("BitPup1S");
18    Image tahtiKuva = LoadImage("tahti");
19    Image[] Juoksu = LoadImages("BitPup1R", "BitPup2R");
20    Image Hyppy = LoadImage("BitPup1J");
21    private Image[] TimeBombPic = LoadImages("TimeBomb1", "TimeBomb2", "TimeBomb3");
22    private Image Spike = LoadImage("Spike");
23    private Image FallBlock = LoadImage("Falling");
24    private Image Loppu = LoadImage("Loppu");
25    private Image[] Crab = LoadImages("Enemy", "Enemy2");
26    private Image Spikey = LoadImage("Spikey");
27    private Image Heart = LoadImage("Heart");
28    private Image Blasterkuva = LoadImage("Cannon");
29    private Image Cobble = LoadImage("CobbleStone");
30    private Image Ruoho = LoadImage("Grass");
31    private Image[] Chest = LoadImages("ClosedChest", "OpenedChest");
32
33    int kerta = 1;
34
35    DoubleMeter health;
36    IntMeter pisteLaskuri;
37
38    EasyHighScore topLista = new EasyHighScore();
39
40    SoundEffect maaliAani = LoadSoundEffect("maali");
41
42    public override void Begin()
43    {
44        topLista.HighScoreWindow.Closed += delegate(Window w)
45        {
46            kenttaNro = 1;
47            pisteLaskuri.Value = 0;
48            alku();
49        };
50
51        kenttaNro = 4;
52        pisteLaskuri = new IntMeter(0);
53        SmoothTextures = false;
54        alku();
55    }
56
57    void AloitaPeli()
58    {
59        SeuraavaKentta();
60    }
61
62    void LuoPistelaskuri()
63    {
64        Label pisteNaytto = new Label();
65        pisteNaytto.X = Screen.Left + 100;
66        pisteNaytto.Y = Screen.Top - 100;
67        pisteNaytto.TextColor = Color.Black;
68        pisteNaytto.Color = Color.White;
69
70        pisteNaytto.BindTo(pisteLaskuri);
71        Add(pisteNaytto);
72    }
73
74    void LuoKentta(string kenttaTiedostonNimi)
75    {
76        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
77        kentta.SetTileMethod('#', LisaaTaso);
78        kentta.SetTileMethod('*', LisaaTahti);
79        kentta.SetTileMethod('N', LisaaPelaaja);
80        kentta.SetTileMethod('T', LisaaTimeBomb);
81        kentta.SetTileMethod('G', LisaaLoppu);
82        kentta.SetTileMethod('S', LisaaSpike);
83        kentta.SetTileMethod('F', LisaaFall);
84        kentta.SetTileMethod('&', LisaaKentta);
85        kentta.SetTileMethod('E', LisaaCrab);
86        kentta.SetTileMethod('s', LisaaPiikikäs);
87        kentta.SetTileMethod('H', LisaaHeart);
88        kentta.SetTileMethod('C', LisaaCannon);
89        kentta.SetTileMethod('c', LisaaArkku);
90        kentta.SetTileMethod('g', LisaaGrass);
91
92        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
93        Level.CreateBorders();
94        Level.Background.Color = Color.LightGray;
95    }
96
97    void LisaaCrab(Vector paikka, double leveys, double korkeus)
98    {
99        PlatformCharacter crab = new PlatformCharacter(leveys - 4, korkeus - 4);
100        crab.IgnoresCollisionResponse = false;
101       
102        crab.AnimWalk = new Animation(Crab);
103        crab.AnimWalk.FPS = 5;
104
105        crab.Position = paikka;
106        crab.Image = Crab[0];
107        crab.Tag = "vihu";
108        Add(crab);
109
110        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
111        tasoAivot.Speed = 150;
112        tasoAivot.TriesToJump = false;
113        crab.Brain = tasoAivot;
114    }
115
116    void LisaaTaso(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
119        taso.Position = paikka;
120        taso.Image = Cobble;
121        Add(taso);
122    }
123
124    void LisaaTahti(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject tahti = PhysicsObject.CreateStaticObject(tahtiKuva);
127        tahti.IgnoresCollisionResponse = true;
128        tahti.Position = paikka;
129        //tahti.Image = tahtiKuva;
130        tahti.Tag = "tahti";
131        Add(tahti);
132    }
133
134    PhysicsObject LisaaTahti(Vector paikka)
135    {
136        PhysicsObject tahti = new PhysicsObject(tahtiKuva);
137        tahti.IgnoresCollisionResponse = false;
138        tahti.Position = paikka;
139        //tahti.Image = tahtiKuva;
140        tahti.Tag = "tahti";
141        Add(tahti);
142        return tahti;
143    }
144
145    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
146    {
147        pelaaja1 = new PlatformCharacter(leveys, korkeus);
148        pelaaja1.Position = paikka;
149        pelaaja1.Mass = 4.0;
150        pelaaja1.Image = pelaajanKuva;
151        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
152        pelaaja1.AnimJump = new Animation(Hyppy);
153        pelaaja1.AnimFall = new Animation(Hyppy);
154        pelaaja1.AnimWalk = new Animation(Juoksu);
155        pelaaja1.AnimWalk.FPS = 4;
156        pelaaja1.Tag = "pelaaja";
157
158        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
159        AddCollisionHandler(pelaaja1, "timebomb", TormaaPommiin);
160        AddCollisionHandler(pelaaja1, "loppu", TormaaLoppuun);
161        AddCollisionHandler(pelaaja1, "spike", TormaaSpikeen);
162        AddCollisionHandler(pelaaja1, "fall", TormaaFall);
163        AddCollisionHandler(pelaaja1, "vihu", TormaaVihuun);
164        AddCollisionHandler(pelaaja1, "piikikas", TormaaSpikey);
165        AddCollisionHandler(pelaaja1, "Heart", TormaaHealth);
166        AddCollisionHandler(pelaaja1, "Arkku", delegate(PhysicsObject a, PhysicsObject b)
167        {
168            if (health.Value == health.MaxValue)
169            {
170                PhysicsObject tahti = LisaaTahti(b.Position + new Vector(0, 80));
171                tahti.Hit(new Vector(150.0, 100.0));
172            }
173            else
174            {
175                    LisaaHeart(b.Position + new Vector(0, 80), 40, 40);
176            }
177
178            b.Tag = "Avattu arkku";
179            b.Image = Chest[1];
180        });
181
182        Add(pelaaja1);
183    }
184
185    void LisaaNappaimet()
186    {
187        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
188        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
189
190        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
191        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
192        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
193        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Tauko, "PauseGame");
194        Keyboard.Listen(Key.Up, ButtonState.Pressed, Avaa, "AvaaArkku");
195
196        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
197
198        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
199        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
200        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
201
202
203        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
204    }
205
206    void Liikuta(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.Walk(nopeus);
209    }
210
211    void Hyppaa(PlatformCharacter hahmo, double nopeus)
212    {
213        hahmo.Jump(nopeus);
214    }
215
216    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
217    {
218        maaliAani.Play();
219        MessageDisplay.Add("Keräsit tähden!");
220        tahti.Destroy();
221        pisteLaskuri.Value += 100;
222    }
223
224    void TormaaFall(PhysicsObject hahmo, PhysicsObject fall)
225    {
226        if (hahmo.Y > fall.Y)
227        {
228            Timer.SingleShot(0.4, delegate
229            {
230                fall.Velocity = new Vector(0, -275);
231                fall.LifetimeLeft = TimeSpan.FromSeconds(10);
232            });
233        }
234    }
235
236    void TormaaSpikeen(PhysicsObject hahmo, PhysicsObject spike)
237    {
238        Gameover();
239    }
240
241    void Gameover()
242    {
243        if (!pelaaja1.IsDestroying)
244        {
245            kerta++;
246            MessageDisplay.Add("Game Over!");
247            pelaaja1.Destroy();
248            Timer.SingleShot(2, AloitaPeli);
249            pisteLaskuri.Value -= 300;
250        }
251    }
252
253    void TormaaLoppuun(PhysicsObject hahmo, PhysicsObject tahti)
254    {
255        kenttaNro++;
256        pisteLaskuri.Value += 25;
257        if (health.Value == health.MaxValue && kerta == 1)
258            pisteLaskuri.Value += 80;
259
260        kerta = 1;
261        SeuraavaKentta();
262    }
263
264    void TormaaPommiin(PhysicsObject hahmo, PhysicsObject timebomb)
265    {
266        if (hahmo.Y > timebomb.Y)
267        {
268            timebomb.Animation = new Animation(TimeBombPic);
269            timebomb.Animation.FPS = 1;
270            timebomb.Animation.Start();
271            timebomb.Tag = null;
272
273            timebomb.Animation.Played += delegate
274            {
275                Explosion ex = new Explosion(50);
276                ex.Position = timebomb.Position;
277                Add(ex);
278                timebomb.Destroy();
279            };
280        }
281    }
282
283    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
284    {
285        if (hahmo.Bottom + 10 > vihu.Top) // && hahmo.X > vihu.Left && hahmo.X < vihu.Right)
286        {
287            PhysicsObject littana = PhysicsObject.CreateStaticObject(vihu.Width, 10);
288            littana.Image = vihu.Image;
289            littana.IgnoresCollisionResponse = true;
290            littana.LifetimeLeft = TimeSpan.FromSeconds(0.5);
291            littana.X = vihu.X;
292            littana.Bottom = vihu.Bottom;
293            Add(littana);
294
295            vihu.Destroy();
296            pelaaja1.ForceJump(hyppyNopeus * 1.5);
297            pisteLaskuri.Value += 10;
298        }
299        else
300        {
301            health.Value -= 10;
302        }
303    }
304
305    void TormaaSpikey(PhysicsObject hahmo, PhysicsObject vihu)
306    {
307        health.Value -= 20;
308    }
309
310    void LisaaTimeBomb(Vector paikka, double leveys, double korkeus)
311    {
312        PhysicsObject timebomb = PhysicsObject.CreateStaticObject(leveys, korkeus);
313        timebomb.Position = paikka;
314        timebomb.Image = TimeBombPic[0];
315        timebomb.Tag = "timebomb";
316        Add(timebomb);
317    }
318    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
319    {
320        PhysicsObject loppu = PhysicsObject.CreateStaticObject(leveys, korkeus);
321        loppu.Position = paikka;
322        loppu.Tag = "loppu";
323        loppu.Color = Color.LightGray;
324        Add(loppu);
325    }
326    void LisaaSpike(Vector paikka, double leveys, double korkeus)
327    {
328        PhysicsObject spike = PhysicsObject.CreateStaticObject(leveys, korkeus - 4);
329        spike.Position = paikka;
330        spike.Y -= 2;
331        spike.Image = Spike;
332        spike.Tag = "spike";
333        Add(spike);
334    }
335    void LisaaFall(Vector paikka, double leveys, double korkeus)
336    {
337        PhysicsObject fall = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.5);
338        fall.Position = paikka;
339        //fall.Y += korkeus * 0.25;
340        fall.Image = FallBlock;
341        fall.Tag = "fall";
342        Add(fall);
343    }
344    void alku()
345    {
346        MultiSelectWindow alkuValikko = new MultiSelectWindow("BitPup",
347"Aloita peli", "Parhaat Pisteet", "Lopeta");
348        Add(alkuValikko);
349        alkuValikko.AddItemHandler(0, AloitaPeli);
350        alkuValikko.AddItemHandler(1, delegate {
351            topLista.Show();
352        });
353        alkuValikko.AddItemHandler(2, Exit);
354        alkuValikko.DefaultCancel = 3;
355
356    }
357    void SeuraavaKentta()
358    {
359        ClearAll();
360        Gravity = new Vector(0, -2000);
361
362        if (kenttaNro == 1)
363        {
364            LuoKentta("kentta1");
365           
366            MessageDisplay.Add("Kenttä 1");
367        }
368        else if (kenttaNro == 2)
369        {
370            LuoKentta("kentta2");
371           
372            MessageDisplay.Add("Kenttä 2");
373        }
374        else if (kenttaNro == 3)
375        {
376            LuoKentta("kentta3");
377
378            MessageDisplay.Add("Kentta 3");
379        }
380        else if (kenttaNro == 4)
381        {
382            LuoKentta("kentta4");
383
384            MessageDisplay.Add("Kenttä 4");
385        }
386        else if (kenttaNro == 5)
387        {
388            LuoKentta("kentta5");
389
390            MessageDisplay.Add("Kenttä 5");
391        }
392        else if (kenttaNro == 6)
393        {
394            LuoKentta("kentta6");
395
396            MessageDisplay.Add("Erikoiskenttä");
397        }
398
399        else if (kenttaNro > 6)
400        {
401            topLista.EnterAndShow(pisteLaskuri.Value);
402        }
403       
404        LisaaNappaimet();
405        LuoElamalaskuri();
406        LuoPistelaskuri();
407
408        Camera.Follow(pelaaja1);
409        Camera.ZoomFactor = 0.3;
410        Camera.StayInLevel = true;
411    }
412
413    void LisaaKentta(Vector paikka, double leveys, double korkeus)
414    {
415        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
416        taso.Position = paikka;
417        taso.Color = Color.LightGray;
418        Add(taso);
419    }
420    void Tauko()
421    {
422        MultiSelectWindow TaukoValikko = new MultiSelectWindow("Pause",
423  "Jatka", "Lopeta");
424        Add(TaukoValikko);
425       
426
427        TaukoValikko.AddItemHandler(1, Exit);
428        TaukoValikko.DefaultCancel = 3; 
429    }
430    void LuoElamalaskuri()
431    {
432        health = new DoubleMeter(100);
433        health.MaxValue = 100;
434        health.MinValue = 0;
435       
436        health.Changed += delegate
437        {
438           
439        };
440
441        health.LowerLimit += Gameover;
442
443        ProgressBar healthMeter = new ProgressBar(200, 20);
444        healthMeter.X = Screen.Left + 200;
445        healthMeter.Y = Screen.Top - 950;
446        healthMeter.BindTo(health);
447        Add(healthMeter);
448       
449        healthMeter.Angle = Angle.StraightAngle;
450        healthMeter.Color = Color.Transparent;
451        healthMeter.BorderColor = Color.Black;
452        healthMeter.BarColor = Color.LightBlue;
453    }
454    void LisaaPiikikäs(Vector paikka, double leveys, double korkeus)
455    {
456        PhysicsObject piikikäs = PhysicsObject.CreateStaticObject(leveys - 4, korkeus - 4);
457        piikikäs.Position = paikka;
458        piikikäs.Image = Spikey;
459        piikikäs.Tag = "spike";
460        Add(piikikäs);
461    }
462    void LisaaHeart(Vector paikka, double leveys, double korkeus)
463    {
464        PhysicsObject Health = PhysicsObject.CreateStaticObject(Heart);
465        Health.IgnoresCollisionResponse = true;
466        Health.Position = paikka;
467        Health.Size = new Vector(leveys, korkeus);
468        Health.Tag = "Heart";
469        Add(Health);
470    }
471    void TormaaHealth(PhysicsObject hahmo, PhysicsObject Health)
472    {
473       
474
475            Health.Destroy();
476           
477            pisteLaskuri.Value += 10;
478       
479
480       
481            health.Value += 25 ;
482       
483    }
484    void LisaaCannon(Vector paikka, double leveys, double korkeus)
485    {
486        PhysicsObject Blaster = PhysicsObject.CreateStaticObject(leveys, korkeus);
487        Blaster.Position = paikka;
488        Blaster.Image = Blasterkuva;
489        Blaster.CollisionIgnoreGroup = 3;
490        Add(Blaster);
491        Cannon BlasterWeapon = new Cannon(leveys,korkeus);
492        BlasterWeapon.Position = paikka;
493        BlasterWeapon.Power.MaxValue = 3500;
494        Timer AseAjastin = new Timer();
495        AseAjastin.Interval = 2.0;
496        AseAjastin.Timeout += delegate {           
497            PhysicsObject ammus = BlasterWeapon.Shoot();
498            ammus.Size *= 3;
499            ammus.CollisionIgnoreGroup = 3;
500        };
501        AseAjastin.Start();
502       
503        BlasterWeapon.InfiniteAmmo = true;
504        BlasterWeapon.AmmoIgnoresGravity = true;
505
506        BlasterWeapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { 
507            ammus.Destroy();
508            if (kohde.Tag == "pelaaja")
509            {
510                //TormaaAmmus();
511                health.Value -= 20;
512            }
513        };
514        BlasterWeapon.Angle = Angle.FromDegrees(180);
515        BlasterWeapon.Image = null;
516        BlasterWeapon.Color = Color.Transparent;
517        Add(BlasterWeapon);
518    }
519    void Avaa()
520    {
521 
522    }
523    void LisaaArkku(Vector paikka, double leveys, double korkeus)
524    {
525        PhysicsObject Arkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
526        Arkku.IgnoresCollisionResponse = true;
527        Arkku.CollisionIgnoreGroup = 3;
528        Arkku.Position = paikka;
529        Arkku.Image = Chest[0];
530        Arkku.Tag = "Arkku";
531       
532        Add(Arkku,-1);
533    }
534    void LisaaGrass(Vector paikka, double leveys, double korkeus)
535    {
536        PhysicsObject grass = PhysicsObject.CreateStaticObject(leveys, korkeus);
537        grass.Position = paikka;
538        grass.Image = Ruoho;
539        Add(grass);
540    }
541}
542
543
544       
545       
Note: See TracBrowser for help on using the repository browser.