source: 2015/26/EmilK/Tasohyppelypeli2/Tasohyppelypeli2/Tasohyppelypeli2/Desert Fury.cs @ 6257

Revision 6257, 17.3 KB checked in by emkronqv, 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 Tasohyppelypeli2 : PhysicsGame
10{
11    const double nopeus = 1900;
12    const double hyppyNopeus = 1150;
13    const int RUUDUN_KOKO = 56;
14
15    PlatformCharacter pelaaja1;
16    DoubleMeter elamaLaskuri;
17
18    Image tasonkuva = LoadImage("platform1");
19    Image toisentasonkuva = LoadImage("platform2");
20    Image kolmannentasonkuva = LoadImage("platform3");
21    Image neljännentasonkuva = LoadImage("platform4");
22    Image pelaajanKuva = LoadImage("Auto ajaa 1");
23    Image tahtiKuva = LoadImage("tahti");
24    Image vihollisenKuva = LoadImage("mopo1");
25    Image toisenvihollisenKuva = LoadImage("mopo2");
26    Image kolmannenvihollisenKuva = LoadImage("mopo3");
27    Image neljännenvihollisenkuva = LoadImage("eka bossi");
28    Image bossinkuva = LoadImage("eka bossi");
29    Image lentavankuva = LoadImage("Buzzard");
30    Image ammuksenKuva = LoadImage("Ammus");
31    Image kranunKuva = LoadImage("kranaattikeihäs");
32
33    Image taustakuva = LoadImage("Tausta 1");
34
35    SoundEffect maaliAani = LoadSoundEffect("maali");
36
37
38
39    public override void Begin()
40    {
41        IsMouseVisible = true;
42        Gravity = new Vector(0, -2000);
43
44        LuoKentta();
45        LisaaNappaimet();
46
47        Camera.Follow(pelaaja1);
48        Camera.ZoomFactor = 1.2;
49        Camera.StayInLevel = true;
50
51        MediaPlayer.Play("musa1");
52        MediaPlayer.IsRepeating = true;
53
54
55    }
56
57    void LuoKentta()
58    {
59        TileMap kentta = TileMap.FromLevelAsset("kentta1");
60        kentta.SetTileMethod('1', LisaaTaso);
61        kentta.SetTileMethod('2', LisaaToinenTaso);
62        kentta.SetTileMethod('3', LisaaKolmasTaso);
63        kentta.SetTileMethod('4', LisaaNeljäsTaso);
64        kentta.SetTileMethod('*', LisaaTahti);
65        kentta.SetTileMethod('N', LisaaPelaaja);
66        kentta.SetTileMethod('H', LisaaVihollinen);
67        kentta.SetTileMethod('h', LisaaToinenVihollinen);
68        kentta.SetTileMethod('s', LisaaKolmasVihollinen);
69        kentta.SetTileMethod('B', LisaaNeljäsVihollinen);
70        kentta.SetTileMethod('L', LisaaLentavavihollinen);
71        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
72        Level.CreateBorders();
73        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
74        Level.Background.Image = taustakuva;
75        LuoElamaLaskuri();
76    }
77
78    void VihuHeittää(Vihu vihollinen)
79    {
80        PhysicsObject kranu = new PhysicsObject(LoadImage("kranaattikeihäs"));
81        Vector suunta = (pelaaja1.Position - vihollinen.Position).Normalize();
82        kranu.Position = vihollinen.Position + suunta * 5;
83
84        Add(kranu);
85       // kranu.Hit(Vector.FromLengthAndAngle(100, suunta.Angle));
86    }
87
88    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
89    {
90        Vihu vihollinen = new Vihu(leveys *2, korkeus * 2, 4);
91        vihollinen.Position = paikka;
92        vihollinen.Mass = 4.0;
93        vihollinen.Image = vihollisenKuva;
94
95        vihollinen.Tag = "vihollinen";
96
97        Timer kranu = new Timer();
98        kranu.Interval = 3.5;
99        kranu.Timeout += delegate { VihuHeittää(vihollinen); };
100        kranu.Start();
101
102
103        Add(vihollinen);
104
105        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
106        tasoAivot.Speed = 100;
107
108
109       
110
111        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
112
113        seuraajanAivot.Speed = 3860;  // Millä nopeudella kohdetta seurataan
114        seuraajanAivot.TurnWhileMoving = false;
115        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
116        seuraajanAivot.DistanceClose = 100;         // Etäisyys jolloin ollaan lähellä kohdetta
117        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
118        seuraajanAivot.FarBrain = tasoAivot ;   // Käytetään satunnaisaivoja kun ollaan kaukana
119        seuraajanAivot.TargetClose += delegate { kranu.Start(); };
120        //Aivot käyttöön oliolle
121        vihollinen.Brain = seuraajanAivot;
122    }
123
124    void LisaaLentavavihollinen(Vector paikka, double leveys, double korkeus)
125    {
126
127        Vihu2 lentava = new Vihu2(leveys * 3.5, korkeus * 2.7, 10);
128        lentava.Position = paikka;
129        lentava.IgnoresGravity = true;
130        lentava.Tag = "lentavavihollinen";
131        lentava.CanRotate = false;
132        lentava.Oscillate(new Vector(0, 1), korkeus * 0.3, 0.5);
133        lentava.Image = lentavankuva;
134       
135        AddCollisionHandler(lentava, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { lentava.Destroy(); });
136        lentava.ase.ProjectileCollision += delegate(PhysicsObject a, PhysicsObject b) { AmmusOsui(a, b, elamaLaskuri); };
137
138        Timer timer = new Timer();
139        timer.Interval = 3.0;
140        timer.Timeout += delegate()
141        {
142            PhysicsObject ammus;
143           
144            if (Vector.Distance(pelaaja1.Position, lentava.Position) < 1000)
145            {
146                lentava.ase.AbsoluteAngle = (pelaaja1.Position - lentava.Position).Angle;
147                ammus = lentava.ase.Shoot();
148
149                if (ammus != null)
150                {
151                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
152                }
153            }
154        };
155        timer.Start();
156
157        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
158        seuraajanAivot.Active = true;
159        seuraajanAivot.Speed = 3830;                 // Millä nopeudella kohdetta seurataan
160        seuraajanAivot.DistanceFar = 1600;           // Etäisyys jolla aletaan seurata kohdetta
161        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
162        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
163        lentava.Brain = seuraajanAivot;
164
165
166        Add(lentava);
167
168    }
169
170    void LisaaToinenVihollinen(Vector paikka, double leveys, double korkeus)
171    {
172        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 4);
173        vihollinen.Position = paikka;
174        vihollinen.Mass = 4.0;
175        vihollinen.Tag = "vihollinen";
176        vihollinen.Image = toisenvihollisenKuva;
177        Add(vihollinen);
178
179        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
180        tasoAivot.Speed = 100;
181
182
183
184
185        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
186
187        seuraajanAivot.Speed = 3800;                 // Millä nopeudella kohdetta seurataan
188        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
189        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
190        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
191        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
192
193        //Aivot käyttöön oliolle
194        vihollinen.Brain = seuraajanAivot;
195
196    }
197
198    void LisaaKolmasVihollinen(Vector paikka, double leveys, double korkeus)
199    {
200        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 5);
201        vihollinen.Position = paikka;
202        vihollinen.Mass = 4.0;
203        vihollinen.Tag = "vihollinen";
204        vihollinen.Image = kolmannenvihollisenKuva;
205        Add(vihollinen);
206
207        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
208        tasoAivot.Speed = 100;
209
210
211
212
213        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
214
215        seuraajanAivot.Speed = 3800;                 // Millä nopeudella kohdetta seurataan
216        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
217        seuraajanAivot.DistanceClose = 10;         // Etäisyys jolloin ollaan lähellä kohdetta
218        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
219        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
220
221        //Aivot käyttöön oliolle
222        vihollinen.Brain = seuraajanAivot;
223
224    }
225
226    void LisaaNeljäsVihollinen(Vector paikka, double leveys, double korkeus)
227    {
228        Vihu vihollinen = new Vihu(leveys, korkeus * 2);
229        vihollinen.Position = paikka;
230        vihollinen.Y += korkeus / 2;
231        vihollinen.Tag = "vihollinen";
232        vihollinen.Image =neljännenvihollisenkuva;
233        Add(vihollinen);
234
235        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
236        tasoAivot.Speed = 100;
237
238        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
239
240        seuraajanAivot.Speed = 860;                 // Millä nopeudella kohdetta seurataan
241        seuraajanAivot.DistanceFar = 2400;           // Etäisyys jolla aletaan seurata kohdetta
242        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
243        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
244        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
245
246        //Aivot käyttöön oliolle
247        vihollinen.Brain = seuraajanAivot;
248
249
250    }
251
252    void LisaaTaso(Vector paikka, double leveys, double korkeus)
253    {
254        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
255        taso.Position = paikka;
256        taso.Image = tasonkuva;
257        Add(taso);
258    }
259
260    void LisaaToinenTaso(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        taso.Position = paikka;
264        taso.Image = toisentasonkuva;
265        taso.IgnoresExplosions = true;
266        Add(taso);
267    }
268
269    void LisaaKolmasTaso(Vector paikka, double leveys, double korkeus)
270    {
271        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
272        taso.Position = paikka;
273        taso.IgnoresExplosions = true;
274        taso.Image = kolmannentasonkuva;
275        Add(taso);
276    }
277
278    void LisaaNeljäsTaso(Vector paikka, double leveys, double korkeus)
279    {
280        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
281        taso.Position = paikka; 
282        taso.IgnoresExplosions = true;
283        taso.Image = neljännentasonkuva;
284        Add(taso);
285    }
286
287    void LisaaTahti(Vector paikka, double leveys, double korkeus)
288    {
289        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
290        tahti.IgnoresCollisionResponse = true;
291        tahti.Position = paikka;
292        tahti.Image = tahtiKuva;
293        tahti.Tag = "tahti";
294        Add(tahti);
295    }
296
297    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
298
299
300    {
301
302
303
304        pelaaja1 = new PlatformCharacter(leveys * 5.5, korkeus * 2.6);
305        pelaaja1.Position = paikka;
306        pelaaja1.Mass = 4.0;
307        pelaaja1.Tag = "pelaaja1";
308        pelaaja1.Image = pelaajanKuva;
309        pelaaja1.CollisionIgnoreGroup = 1;
310        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
311        Add(pelaaja1);
312
313        //pelaaja1 on PlatformCharacter-tyyppinen
314        pelaaja1.Weapon = new AssaultRifle(30, 10);
315        pelaaja1.Weapon.Position = new Vector(0, korkeus * 0.8);
316        pelaaja1.Weapon.Image = null;
317        pelaaja1.Weapon.Color=Color.Transparent;
318
319
320        //Ammusten määrä aluksi:
321        pelaaja1.Weapon.Ammo.Value = 100;
322
323        //Mitä tapahtuu kun ammus osuu johonkin?
324        pelaaja1.Weapon.ProjectileCollision = delegate(PhysicsObject a, PhysicsObject b) { AmmusOsui(a, b, elamaLaskuri); };
325
326    }
327
328    void LuoElamaLaskuri()
329    {
330        elamaLaskuri = new DoubleMeter(10);
331        elamaLaskuri.MaxValue = 10;
332        elamaLaskuri.LowerLimit += ElamaLoppui;
333
334        ProgressBar elamaPalkki = new ProgressBar(150, 20);
335        elamaPalkki.X = Screen.Left + 150;
336        elamaPalkki.Y = Screen.Top - 20;
337        elamaPalkki.BindTo(elamaLaskuri);
338        Add(elamaPalkki);
339    }
340
341    void ElamaLoppui()
342    {
343        ClearAll();
344        Begin();
345    }
346
347    public static void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde, DoubleMeter Laskuri)
348    {
349        ammus.Destroy();
350        if( kohde.Tag.Equals("vihollinen"))
351        {
352            Vihu vihollinen = (Vihu)kohde;
353           vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
354        }
355
356        if (kohde.Tag.Equals("lentavavihollinen"))
357        {
358            Vihu2 vihollinen = (Vihu2)kohde;
359            vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
360        }
361        if (kohde.Tag.Equals("pelaaja1"))
362        {
363            Laskuri.Value--;
364        }
365    }
366
367    void AmmuAseella(PlatformCharacter pelaaja, int leveys, int korkeus)
368    {
369        PhysicsObject ammus = pelaaja.Weapon.Shoot();
370
371        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
372
373        if (ammus != null)
374        {
375           // ammus.Size *= 0.5;
376            ammus.Size = new Vector(leveys * 1, korkeus * 0.2);
377            ammus.Image = ammuksenKuva;
378            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
379        }
380    }
381
382    void Tahtaa(AnalogState hiirenLiike)
383    {
384        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.Weapon.AbsolutePosition).Normalize();
385        pelaaja1.Weapon.Angle = suunta.Angle;
386    }
387
388    void LisaaNappaimet()
389    {
390        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
391        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
392        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
393
394        Keyboard.Listen(Key.Q, ButtonState. Pressed, HeitaKranaatti, "Heita", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
395
396        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
397        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
398        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
399
400        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
401
402        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
403        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
404        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
405
406
407        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
408    }
409
410    void Liikuta(PlatformCharacter hahmo, double nopeus)
411    {
412        hahmo.Walk(nopeus);
413    }
414
415    void Hyppaa(PlatformCharacter hahmo, double nopeus)
416    {
417        hahmo.Jump(nopeus);
418    }
419
420    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
421    {
422        maaliAani.Play();
423        MessageDisplay.Add("Keräsit tähden!");
424        tahti.Destroy();
425    }
426
427    //Grenade kranaatti = new Grenade(4.0);
428
429    void HeitaKranaatti(PlatformCharacter pelaaja, int leveys, int korkeus)
430    {
431        Grenade kranu = new Grenade(5.0);
432        kranu.CollisionIgnoreGroup = 1;
433        kranu.Size = new Vector(leveys * 2, korkeus * 0.5);
434        kranu.Position = pelaaja.Position;
435        kranu.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
436        kranu.Hit((Mouse.PositionOnWorld - pelaaja.Position).Angle.GetVector() * 75000);
437        Add(kranu);
438        //pelaaja.Throw(kranu, Angle.FromDegrees(13), 60000);
439
440        kranu.Image = kranunKuva;
441
442
443        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
444        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
445
446        AddCollisionHandler(kranu, kranutörmää);
447
448        Keyboard.Disable(Key.Q);
449        Timer.SingleShot(1.5, delegate { Keyboard.Enable(Key.Q); });
450    }
451
452    void kranutörmää(PhysicsObject kranu, PhysicsObject kohde)
453    {
454        ((Grenade)kranu).Explode();
455    }
456
457    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
458    {
459        rajahdyksenKohde.Destroy();
460    }
461
462
463
464}
465
466
467class Vihu2 : PhysicsObject
468{
469    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
470    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
471    public AssaultRifle ase;
472
473    public Vihu2(double leveys, double korkeus, int elämä = 10) 
474        : base(leveys, korkeus)
475    {
476        elamaLaskuri.MaxValue = elämä;
477        elamaLaskuri.Value = elämä;
478        elamaLaskuri.LowerLimit += delegate { this.Destroy(); this.ase.Destroy(); };
479        LisaaVihuAse();
480    }
481   
482    void LisaaVihuAse()
483    {
484        ase = new AssaultRifle(30, 10);
485        this.Add(ase);
486        ase.Position = new Vector(0, 8);
487        ase.Image = null;
488        ase.IsVisible = false;
489        Color=Color.Transparent;
490
491       
492    }
493
494}
495
496
497class Vihu : PlatformCharacter
498{
499    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
500    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
501
502    public Vihu(double leveys, double korkeus,int elämä=3)
503        : base(leveys, korkeus)
504
505    {
506        elamaLaskuri.MaxValue = elämä;
507        elamaLaskuri.Value = elämä;
508        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
509    }
510}
511
Note: See TracBrowser for help on using the repository browser.