source: 2015/26/AtteK/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli/Tasohyppelypeli.cs @ 6340

Revision 6340, 15.4 KB checked in by anmurtok, 5 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 Tasohyppelypeli : PhysicsGame
10{
11    DoubleMeter nopeus;
12    double hyppyNopeus = 750;
13
14    const int RUUDUN_KOKO = 40;
15
16    PlatformCharacter pelaaja1;
17    IntMeter yrityslaskuri=new IntMeter(0);
18    IntMeter kolikkolaskuri = new IntMeter(0);
19
20
21    int kenttänumero = 2;
22
23    Image tankkikuva = LoadImage("tankki");
24    Image ammuskuva = LoadImage("Ammus");
25    Image donitsikuva = LoadImage("Donitsi");
26    Image[] PoliisiAtt = LoadImages("Polisi", "Polisiattack");
27    Image tiilikuva = LoadImage("tiili");
28    Image lopunkuva = LoadImage("Loppu");
29    Image[] vihukavely = LoadImages("vih1att", "vih1att2");
30    Image[] idlekuva = LoadImages("kaljaidle", "kaljaidle2");
31    Image powerupkuva = LoadImage("powerup");
32    Image vihollisenkuva = LoadImage("vihollinen");
33    Image poliisinkuva = LoadImage("polisi");
34    Image[] lyöntikuvat = LoadImages("lyöntikalja", "lyöntikalja2");
35    Image[] hyppykuvat = LoadImages("hyppykalja", "hyppykalja2", "hyppykalja3");
36    Image[] kävelykuvat = LoadImages("Kaljakavely", "Kaljakavely2");
37    Image pelaajanKuva = LoadImage("kaljajuoppo");
38    Image tahtiKuva = LoadImage("Kolike");
39    Image ruohokuva = LoadImage("ruohotilkku");
40    SoundEffect maaliaani = LoadSoundEffect("maali");
41    SoundEffect pulloaani = LoadSoundEffect("pullo");
42    SoundEffect punchaani = LoadSoundEffect("punch");
43    Image taustakuva = LoadImage("taustsa");
44
45    public override void Begin()
46    {
47        SmoothTextures = false;
48        aloitapeli();
49    }
50    void LuoPistelaskuri()
51    {
52        Label YritysNaytto = new Label();
53        YritysNaytto.X = Screen.Left + 200;
54        YritysNaytto.Y = Screen.Top - 100;
55        YritysNaytto.TextColor = Color.White;
56        YritysNaytto.TextScale *= 3;
57        YritysNaytto.IntFormatString = "yritykset {0}";       
58        YritysNaytto.BindTo(yrityslaskuri);
59        Add(YritysNaytto);
60
61        Label KolikkoNaytto = new Label();
62        KolikkoNaytto.X = Screen.Right - 200;
63        KolikkoNaytto.Y = Screen.Top - 100;
64        KolikkoNaytto.TextColor = Color.White;
65        KolikkoNaytto.TextScale *= 3;
66        KolikkoNaytto.IntFormatString = "x{0}";
67        KolikkoNaytto.BindTo(kolikkolaskuri);
68        Add(KolikkoNaytto);
69
70        Label kolikkokuva = new Label();
71        kolikkokuva.Image = tahtiKuva;
72        kolikkokuva.Position = KolikkoNaytto.Position;
73        kolikkokuva.X -= 70;
74        Add(kolikkokuva);
75        kolikkokuva.Size = new Vector(60, 60);
76    }
77
78    void seuraavakenttä()
79
80    {
81        kenttänumero++;
82        aloitapeli();
83    }
84
85    void aloitapeli()
86    {
87        ClearAll();
88
89        kolikkolaskuri.Value = 0;
90
91        nopeus = new DoubleMeter(300);
92        Gravity = new Vector(0, -1000);
93
94        LuoKentta();
95        LisaaNappaimet();
96        MediaPlayer.Play("taustamusa");
97        MediaPlayer.IsRepeating = true;
98        Camera.Follow(pelaaja1);
99        Camera.ZoomFactor = 1.9;
100        Camera.StayInLevel = true;
101
102        LuoPistelaskuri();
103    }
104
105    void LuoKentta()
106    {
107        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttänumero);
108        kentta.SetTileMethod('T', LisaaTiili);
109        kentta.SetTileMethod('O', LisaaPudotettava);
110        kentta.SetTileMethod('L', LisaaLoppu);
111        kentta.SetTileMethod('#', LisaaTaso);
112        kentta.SetTileMethod('*', LisaaTahti);
113        kentta.SetTileMethod('N', LisaaPelaaja);
114        kentta.SetTileMethod('K', LisaaPowerup);
115        kentta.SetTileMethod('S', LisaaTankki);
116        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
117        TileMap kentta2 = TileMap.FromLevelAsset("kentta"+kenttänumero);
118        kentta2.SetTileMethod('V', LisaaVihollinen);
119        kentta2.SetTileMethod('P', LisaaPolisi);
120        kentta2.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
121        Level.CreateBorders();
122        Level.Background.CreateGradient(Color.White, Color.White);
123        Level.Background.Image = taustakuva;
124    }
125
126    void LisaaTaso(Vector paikka, double leveys, double korkeus)
127    {
128        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
129        taso.Position = paikka;
130        taso.Color = Color.Green;
131        Add(taso);
132        taso.Image = ruohokuva;
133    }
134    void LisaaPudotettava(Vector paikka, double leveys, double korkeus)
135    {
136        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
137        taso.Position = paikka;
138        taso.Color = Color.Green;
139        taso.IgnoresGravity = true;
140        Add(taso);
141        taso.Image = donitsikuva;
142        taso.Tag = "pudotettava";
143        taso.IgnoresCollisionResponse = true;
144        AddCollisionHandler(taso, "lyonti", delegate(PhysicsObject pudotettava, PhysicsObject nyrkki)
145        {
146            pudotettava.Velocity = new Vector(0, -800);
147            Timer.SingleShot(10, delegate { LisaaPudotettava(paikka, leveys, korkeus); });
148        });
149    }
150 
151    void LisaaTiili (Vector paikka, double leveys, double korkeus)
152    {
153        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
154        taso.Position = paikka;
155        taso.Color = Color.Green;
156        Add(taso);
157        taso.Image = tiilikuva;
158    }
159    void LisaaLoppu(Vector paikka, double leveys, double korkeus)
160    {
161        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys*5, korkeus*3);
162        taso.Position = paikka;
163        taso.Color = Color.Green;
164        Add(taso);
165        taso.Image = lopunkuva;
166        taso.Y += korkeus;
167        taso.Tag = "loppu";
168    }
169    void LisaaTahti(Vector paikka, double leveys, double korkeus)
170    {
171        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
172        tahti.IgnoresCollisionResponse = true;
173        tahti.Position = paikka;
174        tahti.Image = tahtiKuva;
175        tahti.Tag = "tahti";
176        Add(tahti);
177    }
178    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
179    {
180        PlatformCharacter Vihollinen1 = new PlatformCharacter(leveys, korkeus);
181        Vihollinen1.Position = paikka;
182        Vihollinen1.Image = vihollisenkuva;
183        Vihollinen1.Tag = "vihollinen";
184        Add(Vihollinen1);
185        Vihollinen1.AnimWalk = new Animation (vihukavely);
186        Vihollinen1.AnimWalk.FPS = 4;
187
188        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
189        tasoAivot.TriesToJump = true;
190        tasoAivot.Speed = 100;
191
192        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
193        seuraajanAivot.Speed = 425;
194        seuraajanAivot.DistanceFar = 300;
195        seuraajanAivot.DistanceClose = 200;
196        seuraajanAivot.StopWhenTargetClose = false;
197        seuraajanAivot.FarBrain = tasoAivot;
198
199       
200
201        Vihollinen1.Brain = seuraajanAivot;
202        AddCollisionHandler(Vihollinen1, "lyonti", osuma);
203
204        Timer ajastin = new Timer();
205        ajastin.Interval = 0.75;
206        ajastin.Timeout += delegate
207        {
208            Vihollinen1.Jump(400);
209
210        };
211        ajastin.Start();
212   
213    }
214    void LisaaPolisi(Vector paikka, double leveys, double korkeus)
215    {
216        PlatformCharacter Polisi = new PlatformCharacter(leveys, korkeus);
217        Polisi.Position = paikka;
218        Polisi.Image = poliisinkuva;
219        Polisi.CollisionIgnoreGroup = 1;
220        Polisi.Tag = "vihollinen";
221        Polisi.Animation = new Animation(PoliisiAtt) { FPS = 2 };
222        Polisi.Animation.Start();
223        Add(Polisi);
224       // Polisi.AnimWalk = new Animation(vihukavely);
225        //Polisi.AnimWalk.FPS = 4;
226
227        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
228        tasoAivot.Speed = 100;
229
230        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
231        seuraajanAivot.Speed = 425;
232        seuraajanAivot.DistanceFar = 300;
233        seuraajanAivot.DistanceClose = 200;
234        seuraajanAivot.StopWhenTargetClose = false;
235        seuraajanAivot.FarBrain = tasoAivot;
236
237        //seuraajanAivot.TargetClose +=
238
239        Polisi.Brain = seuraajanAivot;
240        AddCollisionHandler(Polisi, "lyonti", osuma);
241
242        Timer ajastin = new Timer();
243        ajastin.Interval = 1;
244        ajastin.Timeout += delegate
245        {
246            if (!Polisi.IsDestroyed)
247            {
248                //Polisi.PlayAnimation(new Animation(PoliisiAtt) { FPS = 1 });
249                PhysicsObject Donitsi = new PhysicsObject(17, 17);
250                Donitsi.Image = donitsikuva;
251                Donitsi.Position = Polisi.Position;
252                Donitsi.Hit((pelaaja1.Position - Polisi.Position).Normalize() * 1500);
253                Add(Donitsi);
254                Donitsi.Shape = Shape.Circle;
255                Donitsi.LifetimeLeft = TimeSpan.FromSeconds(0.75);
256                Donitsi.Tag = "vihollinen";
257                AddCollisionHandler(Donitsi, "lyonti", osuma);
258                AddCollisionHandler(Donitsi, CollisionHandler.ExplodeObject(100, true));
259                Donitsi.CollisionIgnoreGroup = 1;
260            }
261        };
262        ajastin.Start();
263
264    }
265    void LisaaTankki(Vector paikka, double leveys, double korkeus)
266    {
267        PlatformCharacter Tankki = new PlatformCharacter(leveys*4, korkeus*2);
268        Tankki.Position = paikka;
269        Tankki.Image = tankkikuva;
270        Tankki.CollisionIgnoreGroup = 1;
271        //Tankki.Tag = "vihollinen";
272        //Tankki.Animation = new Animation(PoliisiAtt) { FPS = 2 };
273        //Tankki.Animation.Start();
274        Add(Tankki);
275
276        // Polisi.AnimWalk = new Animation(vihukavely);
277        //Polisi.AnimWalk.FPS = 4;
278
279        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
280        tasoAivot.Speed = 100;
281
282        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja1);
283        seuraajanAivot.Speed = 425;
284        seuraajanAivot.DistanceFar = 300;
285        seuraajanAivot.DistanceClose = 200;
286        seuraajanAivot.StopWhenTargetClose = false;
287        seuraajanAivot.FarBrain = tasoAivot;
288
289        IntMeter elämät = new IntMeter(3);
290
291        Tankki.Brain = tasoAivot;
292        AddCollisionHandler(Tankki, "pudotettava", delegate(PhysicsObject vihollinen, PhysicsObject nyrkki)
293        {
294            elämät.Value--;
295            if (elämät.Value == 0)
296            {
297                Tankki.Destroy();
298            }
299        });
300
301        Timer ajastin = new Timer();
302        ajastin.Interval = 1;
303        ajastin.Timeout += delegate
304        {
305            if (!Tankki.IsDestroyed && Math.Sign(Tankki.FacingDirection.GetVector().X) == Math.Sign(pelaaja1.X - Tankki.X))
306            {
307                //Polisi.PlayAnimation(new Animation(PoliisiAtt) { FPS = 1 });
308                PhysicsObject Ammus = new PhysicsObject(17, 17);
309                Ammus.Image = ammuskuva;
310                Ammus.Position = Tankki.Position + new Vector(Tankki.FacingDirection.GetVector().X * 80, 30);
311                Ammus.Hit((pelaaja1.Position - Tankki.Position).Normalize() * 1500);
312                Add(Ammus);
313                Ammus.Shape = Shape.Circle;
314                Ammus.LifetimeLeft = TimeSpan.FromSeconds(2);
315                Ammus.Tag = "vihollinen";
316                AddCollisionHandler(Ammus, "lyonti", osuma);
317                AddCollisionHandler(Ammus, CollisionHandler.ExplodeObject(100, true));
318                Ammus.CollisionIgnoreGroup = 1;
319            }
320        };
321        ajastin.Start();
322
323    }
324
325    void osuma(PhysicsObject vihollinen, PhysicsObject nyrkki)
326    {
327        nyrkki.Destroy();
328        vihollinen.Destroy();
329    }
330
331
332    void LisaaPowerup(Vector paikka, double leveys, double korkeus)
333    {
334        PhysicsObject Powerup = PhysicsObject.CreateStaticObject(leveys * 0.225, korkeus * 0.75);
335        Powerup.IgnoresCollisionResponse = true;
336        Powerup.Position = paikka;
337        Powerup.Image = powerupkuva;
338        Powerup.Tag = "speedpowerup";
339        Add(Powerup);
340    }
341
342    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
343    {
344        pelaaja1 = new PlatformCharacter(leveys, korkeus);
345        pelaaja1.AnimJump = new Animation(hyppykuvat);
346        pelaaja1.AnimJump.FPS = 300;
347        pelaaja1.Position = paikka;
348        pelaaja1.Mass = 4.0;
349        pelaaja1.Image = pelaajanKuva;
350        pelaaja1.AnimIdle = new Animation(idlekuva);
351        pelaaja1.AnimIdle.FPS = 3;
352        pelaaja1.AnimWalk = new Animation(kävelykuvat);
353        pelaaja1.AnimWalk.FPS = 4;
354        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
355        AddCollisionHandler(pelaaja1, "vihollinen", TormaaViholliseen);
356        AddCollisionHandler(pelaaja1, "speedpowerup", TormaaPoweruppiin);
357        AddCollisionHandler(pelaaja1, "loppu", törmääloppuun);
358        Add(pelaaja1);
359    }
360    void törmääloppuun(PhysicsObject pelaaja, PhysicsObject loppu)
361    {
362        kolikkolaskuri.MinValue = kolikkolaskuri.Value;
363        seuraavakenttä();
364    }
365    void LisaaNappaimet()
366    {
367        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
368        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
369        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyö, "Pelaaja lyö", pelaaja1);
370        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -1.0);
371        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, 1.0);
372        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
373
374        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
375
376        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
377        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
378        //ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
379
380        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
381    }
382
383    void Lyö(PlatformCharacter hahmo)
384    {
385        Animation lyöntianimaatio = new Animation(lyöntikuvat);
386        lyöntianimaatio.FPS = 10;
387        hahmo.PlayAnimation(lyöntianimaatio);
388        hahmo.Width = RUUDUN_KOKO + 15;
389        lyöntianimaatio.Played += delegate
390        {
391            hahmo.Width = RUUDUN_KOKO;
392        };
393        punchaani.Play();
394
395        PhysicsObject lyonti = new PhysicsObject(40,30);
396        lyonti.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 30;
397        lyonti.IgnoresCollisionResponse = true;
398        lyonti.Tag = "lyonti";
399        lyonti.IsVisible = false;
400        lyonti.LifetimeLeft = TimeSpan.FromSeconds(0.1);
401        Add(lyonti);
402    }
403
404    void Liikuta(PlatformCharacter hahmo, double suunta)
405    {
406        hahmo.Walk(nopeus.Value * suunta);
407    }
408
409    void Hyppaa(PlatformCharacter hahmo, double nopeus)
410    {
411        hahmo.Jump(nopeus);
412    }
413
414    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
415    {
416        maaliaani.Play();
417        MessageDisplay.Add("LISÄÄ RAHEJA!");
418        tahti.Destroy();
419        kolikkolaskuri.Value++;
420    }
421    void TormaaPoweruppiin(PhysicsObject hahmo, PhysicsObject Powerup)
422    {
423        pulloaani.Play();
424        Powerup.Destroy();
425        nopeus.Value += 150;
426    }
427
428    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject vihollinen)
429    {
430        yrityslaskuri.Value++;
431        aloitapeli();
432    }
433}
Note: See TracBrowser for help on using the repository browser.