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

Revision 6180, 12.4 KB checked in by sieerinn, 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 = 900;
12    const double hyppyNopeus = 1150;
13    const int RUUDUN_KOKO = 49;
14
15    PlatformCharacter pelaaja1;
16
17
18
19
20    Image pelaajanKuva = LoadImage("Auto ajaa 1");
21    Image tahtiKuva = LoadImage("tahti");
22    Image vihollisenKuva = LoadImage("mopo1");
23    Image toisenvihollisenKuva = LoadImage("mopo2");
24    Image kolmannenvihollisenKuva = LoadImage("mopo3");
25    Image bossinkuva = LoadImage("eka bossi");
26    Image lentavankuva = LoadImage("tahti");
27    Image ammuksenKuva = LoadImage("Ammus");
28    Image kranunKuva = LoadImage("kranaattikeihäs");
29
30    Image taustakuva = LoadImage("Tausta 1");
31
32    SoundEffect maaliAani = LoadSoundEffect("maali");
33
34
35
36    public override void Begin()
37    {
38        IsMouseVisible = true;
39        Gravity = new Vector(0, -2000);
40
41        LuoKentta();
42        LisaaNappaimet();
43
44        Camera.Follow(pelaaja1);
45        Camera.ZoomFactor = 1.2;
46        Camera.StayInLevel = true;
47
48        MediaPlayer.Play("musa1");
49        MediaPlayer.IsRepeating = true;
50    }
51
52
53
54    void LuoKentta()
55    {
56        TileMap kentta = TileMap.FromLevelAsset("kentta1");
57        kentta.SetTileMethod('#', LisaaTaso);
58        kentta.SetTileMethod('*', LisaaTahti);
59        kentta.SetTileMethod('N', LisaaPelaaja);
60        kentta.SetTileMethod('H', LisaaVihollinen);
61        kentta.SetTileMethod('h', LisaaToinenVihollinen);
62        kentta.SetTileMethod('s', LisaaKolmasVihollinen);
63        kentta.SetTileMethod('L', LisaaLentavavihollinen);
64        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
65        Level.CreateBorders();
66        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
67        Level.Background.Image = taustakuva;
68    }
69
70
71
72
73
74    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
75    {
76        Vihu vihollinen = new Vihu(leveys *2, korkeus * 2, 4);
77        vihollinen.Position = paikka;
78        vihollinen.Mass = 4.0;
79        vihollinen.Image = vihollisenKuva;
80
81        vihollinen.Tag = "vihollinen";
82       
83
84
85        Add(vihollinen);
86
87        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
88        tasoAivot.Speed = 100;
89
90
91       
92
93        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
94
95        seuraajanAivot.Speed = 1800;                 // Millä nopeudella kohdetta seurataan
96        seuraajanAivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
97        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
98        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
99        seuraajanAivot.FarBrain = tasoAivot ;   // Käytetään satunnaisaivoja kun ollaan kaukana
100
101        //Aivot käyttöön oliolle
102        vihollinen.Brain = seuraajanAivot;
103    }
104
105
106
107    void LisaaLentavavihollinen(Vector paikka, double leveys, double korkeus)
108    {
109
110        Vihu2 lentava = new Vihu2(leveys * 2, korkeus * 2, 10);
111        lentava.Position = paikka;
112        lentava.IgnoresGravity = true;
113        lentava.Tag = "lentavavihollinen";
114        lentava.CanRotate = false;
115        lentava.Oscillate(new Vector(0, 1), korkeus * 1, 0.5);
116        lentava.Image = lentavankuva;
117        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
118        lentava.Brain = seuraajanAivot;
119        seuraajanAivot.Active = true;
120        seuraajanAivot.Speed = 1900;                 // Millä nopeudella kohdetta seurataan
121        seuraajanAivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
122        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
123        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
124
125
126
127        Add(lentava);
128
129    }
130 
131
132    void LisaaToinenVihollinen(Vector paikka, double leveys, double korkeus)
133    {
134        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 4);
135        vihollinen.Position = paikka;
136        vihollinen.Mass = 4.0;
137        vihollinen.Tag = "vihollinen";
138        vihollinen.Image = toisenvihollisenKuva;
139        Add(vihollinen);
140
141        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
142        tasoAivot.Speed = 100;
143
144
145
146
147        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
148
149        seuraajanAivot.Speed = 1800;                 // Millä nopeudella kohdetta seurataan
150        seuraajanAivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
151        seuraajanAivot.DistanceClose = 00;         // Etäisyys jolloin ollaan lähellä kohdetta
152        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
153        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
154
155        //Aivot käyttöön oliolle
156        vihollinen.Brain = seuraajanAivot;
157
158    }
159
160    void LisaaKolmasVihollinen(Vector paikka, double leveys, double korkeus)
161    {
162        Vihu vihollinen = new Vihu(leveys * 2, korkeus * 2, 5);
163        vihollinen.Position = paikka;
164        vihollinen.Mass = 4.0;
165        vihollinen.Tag = "vihollinen";
166        vihollinen.Image = kolmannenvihollisenKuva;
167        Add(vihollinen);
168
169        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
170        tasoAivot.Speed = 100;
171
172
173
174
175        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
176
177        seuraajanAivot.Speed = 1800;                 // Millä nopeudella kohdetta seurataan
178        seuraajanAivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
179        seuraajanAivot.DistanceClose = 10;         // Etäisyys jolloin ollaan lähellä kohdetta
180        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
181        seuraajanAivot.FarBrain = tasoAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
182
183        //Aivot käyttöön oliolle
184        vihollinen.Brain = seuraajanAivot;
185
186    }
187
188
189
190    void LisaaTaso(Vector paikka, double leveys, double korkeus)
191    {
192        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
193        taso.Position = paikka;
194        taso.Color = Color.Green;
195        Add(taso);
196    }
197
198    void LisaaTahti(Vector paikka, double leveys, double korkeus)
199    {
200        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
201        tahti.IgnoresCollisionResponse = true;
202        tahti.Position = paikka;
203        tahti.Image = tahtiKuva;
204        tahti.Tag = "tahti";
205        Add(tahti);
206    }
207
208    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
209    {
210        pelaaja1 = new PlatformCharacter(leveys * 5.5, korkeus * 2.6);
211        pelaaja1.Position = paikka;
212        pelaaja1.Mass = 4.0;
213        pelaaja1.Tag = "pelaaja";
214        pelaaja1.Image = pelaajanKuva;
215        pelaaja1.CollisionIgnoreGroup = 1;
216        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
217        Add(pelaaja1);
218
219        //pelaaja1 on PlatformCharacter-tyyppinen
220        pelaaja1.Weapon = new AssaultRifle(30, 10);
221        pelaaja1.Weapon.Position = new Vector(0, korkeus * 0.8);
222        pelaaja1.Weapon.Image = null;
223        pelaaja1.Weapon.Color=Color.Transparent;
224
225
226        //Ammusten määrä aluksi:
227        pelaaja1.Weapon.Ammo.Value = 100;
228
229        //Mitä tapahtuu kun ammus osuu johonkin?
230        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
231
232    }
233
234    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
235    {
236        ammus.Destroy();
237        if( kohde.Tag.Equals("vihollinen"))
238        {
239            Vihu vihollinen = (Vihu)kohde;
240           vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
241        }
242
243        if (kohde.Tag.Equals("lentavavihollinen"))
244        {
245            Vihu2 vihollinen = (Vihu2)kohde;
246            vihollinen.ElamaLaskuri.Value--;  // häviää automaattsiesti jos elämät menee 0:ksi.
247        }
248    }
249
250    void AmmuAseella(PlatformCharacter pelaaja, int leveys, int korkeus)
251    {
252        PhysicsObject ammus = pelaaja.Weapon.Shoot();
253
254        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
255
256        if (ammus != null)
257        {
258           // ammus.Size *= 0.5;
259            ammus.Size = new Vector(leveys * 1, korkeus * 0.2);
260            ammus.Image = ammuksenKuva;
261            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
262        }
263    }
264
265    void Tahtaa(AnalogState hiirenLiike)
266    {
267        Vector suunta = (Mouse.PositionOnWorld - pelaaja1.Weapon.AbsolutePosition).Normalize();
268        pelaaja1.Weapon.Angle = suunta.Angle;
269    }
270
271    void LisaaNappaimet()
272    {
273        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
274        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
275        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
276
277        Keyboard.Listen(Key.Q, ButtonState. Pressed, HeitaKranaatti, "Heita", pelaaja1, RUUDUN_KOKO, RUUDUN_KOKO);
278
279        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
280        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
281        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
282
283        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
284
285        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
286        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
287        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
288
289
290        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
291    }
292
293    void Liikuta(PlatformCharacter hahmo, double nopeus)
294    {
295        hahmo.Walk(nopeus);
296    }
297
298    void Hyppaa(PlatformCharacter hahmo, double nopeus)
299    {
300        hahmo.Jump(nopeus);
301    }
302
303    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
304    {
305        maaliAani.Play();
306        MessageDisplay.Add("Keräsit tähden!");
307        tahti.Destroy();
308    }
309
310    //Grenade kranaatti = new Grenade(4.0);
311
312    void HeitaKranaatti(PlatformCharacter pelaaja, int leveys, int korkeus)
313    {
314        Grenade kranu = new Grenade(5.0);
315        kranu.CollisionIgnoreGroup = 1;
316        kranu.Size = new Vector(leveys * 2, korkeus * 0.5);
317        kranu.Position = pelaaja.Position;
318        kranu.Angle = (Mouse.PositionOnWorld - pelaaja.Position).Angle;
319        kranu.Hit((Mouse.PositionOnWorld - pelaaja.Position).Angle.GetVector() * 45000);
320        Add(kranu);
321        //pelaaja.Throw(kranu, Angle.FromDegrees(13), 60000);
322
323        kranu.Image = kranunKuva;
324
325
326        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
327        kranu.Explosion.AddShockwaveHandler("vihollinen", KranaattiOsui);
328
329        AddCollisionHandler(kranu, kranutörmää);
330
331        Keyboard.Disable(Key.Q);
332        Timer.SingleShot(1.5, delegate { Keyboard.Enable(Key.Q); });
333    }
334
335    void kranutörmää(PhysicsObject kranu, PhysicsObject kohde)
336    {
337        ((Grenade)kranu).Explode();
338    }
339
340    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
341    {
342        rajahdyksenKohde.Destroy();
343    }
344
345
346
347}
348
349
350class Vihu2 : PhysicsObject
351{
352    private IntMeter elamaLaskuri = new IntMeter(10, 0, 10);
353    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
354
355    public Vihu2(double leveys, double korkeus, int elämä = 10)
356        : base(leveys, korkeus)
357    {
358        elamaLaskuri.MaxValue = elämä;
359        elamaLaskuri.Value = elämä;
360        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
361    }
362}
363
364
365class Vihu : PlatformCharacter
366{
367    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
368    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
369
370    public Vihu(double leveys, double korkeus,int elämä=3)
371        : base(leveys, korkeus)
372
373    {
374        elamaLaskuri.MaxValue = elämä;
375        elamaLaskuri.Value = elämä;
376        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
377    }
378}
Note: See TracBrowser for help on using the repository browser.