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

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