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

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