source: 2015/koodauskerho/AarniAR/BitPup/BitPup/BitPup/BitPup.cs @ 7053

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