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

Revision 6054, 16.8 KB checked in by aajualal, 4 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 = 5;
47            pisteLaskuri.Value = 0;
48            alku();
49        };
50
51        kenttaNro = 5;
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.CollisionIgnoreGroup = 3;
323        loppu.Tag = "loppu";
324        loppu.Color = Color.LightGray;
325        Add(loppu);
326    }
327    void LisaaSpike(Vector paikka, double leveys, double korkeus)
328    {
329        PhysicsObject spike = PhysicsObject.CreateStaticObject(leveys, korkeus - 4);
330        spike.Position = paikka;
331        spike.Y -= 2;
332        spike.Image = Spike;
333        spike.Tag = "spike";
334        Add(spike);
335    }
336    void LisaaFall(Vector paikka, double leveys, double korkeus)
337    {
338        PhysicsObject fall = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.5);
339        fall.Position = paikka;
340        //fall.Y += korkeus * 0.25;
341        fall.Image = FallBlock;
342        fall.Tag = "fall";
343        Add(fall);
344    }
345    void alku()
346    {
347        MultiSelectWindow alkuValikko = new MultiSelectWindow("BitPup",
348"Aloita peli", "Parhaat Pisteet", "Lopeta");
349        Add(alkuValikko);
350        alkuValikko.AddItemHandler(0, AloitaPeli);
351        alkuValikko.AddItemHandler(1, delegate {
352            topLista.Show();
353        });
354        alkuValikko.AddItemHandler(2, Exit);
355        alkuValikko.DefaultCancel = 3;
356
357    }
358    void SeuraavaKentta()
359    {
360        ClearAll();
361        Gravity = new Vector(0, -2000);
362
363        if (kenttaNro == 1)
364        {
365            LuoKentta("kentta1");
366           
367            MessageDisplay.Add("Kenttä 1");
368        }
369        else if (kenttaNro == 2)
370        {
371            LuoKentta("kentta2");
372           
373            MessageDisplay.Add("Kenttä 2");
374        }
375        else if (kenttaNro == 3)
376        {
377            LuoKentta("kentta3");
378
379            MessageDisplay.Add("Kentta 3");
380        }
381        else if (kenttaNro == 4)
382        {
383            LuoKentta("kentta4");
384
385            MessageDisplay.Add("Kenttä 4");
386        }
387        else if (kenttaNro == 5)
388        {
389            LuoKentta("kentta5");
390
391            MessageDisplay.Add("Kenttä 5");
392        }
393        else if (kenttaNro == 6)
394        {
395            LuoKentta("kentta6");
396
397            MessageDisplay.Add("Erikoiskenttä");
398        }
399
400        else if (kenttaNro > 6)
401        {
402            topLista.EnterAndShow(pisteLaskuri.Value);
403        }
404       
405        LisaaNappaimet();
406        LuoElamalaskuri();
407        LuoPistelaskuri();
408
409        Camera.Follow(pelaaja1);
410        Camera.ZoomFactor = 0.3;
411        Camera.StayInLevel = true;
412    }
413
414    void LisaaKentta(Vector paikka, double leveys, double korkeus)
415    {
416        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
417        taso.Position = paikka;
418        taso.Color = Color.LightGray;
419        Add(taso);
420    }
421    void Tauko()
422    {
423        MultiSelectWindow TaukoValikko = new MultiSelectWindow("Pause",
424  "Jatka", "Lopeta");
425        Add(TaukoValikko);
426       
427
428        TaukoValikko.AddItemHandler(1, Exit);
429        TaukoValikko.DefaultCancel = 3; 
430    }
431    void LuoElamalaskuri()
432    {
433        health = new DoubleMeter(100);
434        health.MaxValue = 100;
435        health.MinValue = 0;
436       
437        health.Changed += delegate
438        {
439           
440        };
441
442        health.LowerLimit += Gameover;
443
444        ProgressBar healthMeter = new ProgressBar(200, 20);
445        healthMeter.X = Screen.Left + 200;
446        healthMeter.Y = Screen.Top - 950;
447        healthMeter.BindTo(health);
448        Add(healthMeter);
449       
450        healthMeter.Angle = Angle.StraightAngle;
451        healthMeter.Color = Color.Transparent;
452        healthMeter.BorderColor = Color.Black;
453        healthMeter.BarColor = Color.LightBlue;
454    }
455    void LisaaPiikikäs(Vector paikka, double leveys, double korkeus)
456    {
457        PhysicsObject piikikäs = PhysicsObject.CreateStaticObject(leveys - 4, korkeus - 4);
458        piikikäs.Position = paikka;
459        piikikäs.Image = Spikey;
460        piikikäs.Tag = "spike";
461        Add(piikikäs);
462    }
463    void LisaaHeart(Vector paikka, double leveys, double korkeus)
464    {
465        PhysicsObject Health = PhysicsObject.CreateStaticObject(Heart);
466        Health.IgnoresCollisionResponse = true;
467        Health.Position = paikka;
468        Health.Size = new Vector(leveys, korkeus);
469        Health.Tag = "Heart";
470        Add(Health);
471    }
472    void TormaaHealth(PhysicsObject hahmo, PhysicsObject Health)
473    {
474       
475
476            Health.Destroy();
477           
478            pisteLaskuri.Value += 10;
479       
480
481       
482            health.Value += 25 ;
483       
484    }
485    void LisaaCannon(Vector paikka, double leveys, double korkeus)
486    {
487        PhysicsObject Blaster = PhysicsObject.CreateStaticObject(leveys, korkeus);
488        Blaster.Position = paikka;
489        Blaster.Image = Blasterkuva;
490        Blaster.CollisionIgnoreGroup = 3;
491        Add(Blaster);
492        Cannon BlasterWeapon = new Cannon(leveys,korkeus);
493        BlasterWeapon.Position = paikka;
494        BlasterWeapon.Power.MaxValue = 3500;
495        Timer AseAjastin = new Timer();
496        AseAjastin.Interval = 2.0;
497        AseAjastin.Timeout += delegate {           
498            PhysicsObject ammus = BlasterWeapon.Shoot();
499            ammus.Size *= 3;
500            ammus.CollisionIgnoreGroup = 3;
501        };
502        AseAjastin.Start();
503       
504        BlasterWeapon.InfiniteAmmo = true;
505        BlasterWeapon.AmmoIgnoresGravity = true;
506
507        BlasterWeapon.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { 
508            ammus.Destroy();
509            if (kohde.Tag == "pelaaja")
510            {
511                //TormaaAmmus();
512                health.Value -= 20;
513            }
514        };
515        BlasterWeapon.Angle = Angle.FromDegrees(180);
516        BlasterWeapon.Image = null;
517        BlasterWeapon.Color = Color.Transparent;
518        Add(BlasterWeapon);
519    }
520    void Avaa()
521    {
522 
523    }
524    void LisaaArkku(Vector paikka, double leveys, double korkeus)
525    {
526        PhysicsObject Arkku = PhysicsObject.CreateStaticObject(leveys, korkeus);
527        Arkku.IgnoresCollisionResponse = true;
528        Arkku.CollisionIgnoreGroup = 3;
529        Arkku.Position = paikka;
530        Arkku.Image = Chest[0];
531        Arkku.Tag = "Arkku";
532       
533        Add(Arkku,-1);
534    }
535    void LisaaGrass(Vector paikka, double leveys, double korkeus)
536    {
537        PhysicsObject grass = PhysicsObject.CreateStaticObject(leveys, korkeus);
538        grass.Position = paikka;
539        grass.Image = Ruoho;
540        Add(grass);
541    }
542}
543
544
545       
546       
Note: See TracBrowser for help on using the repository browser.