source: 2014/27/EmilK/toimintajuttu/toimintajuttu/toimintajuttu/toimintajuttu.cs @ 5374

Revision 5374, 13.9 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 toimintajuttu : PhysicsGame
10{
11    const double nopeus = 400;
12    const double hyppyNopeus = 1800;
13    const int RUUDUN_KOKO = 120;
14
15    PlatformCharacter pelaaja1;
16
17    int kentannumero = 1;
18
19    DoubleMeter elamaLaskuriB;
20    PhysicsObject taso1;
21
22    Image[] taustaKuva = LoadImages("taustaagodofwariin","hiippailutausta", "kuollutavaruustaustaa", "metrotaustaa");
23    Image pelaajanKuva = LoadImage("god of war");
24    Image tahtiKuva = LoadImage("tahti");
25    Image[] vihollisenkuva = LoadImages("vihu", "vihulainen", "alieni");
26    Image[] bossinkuva = LoadImages("bossi", "toinenbossi", "bossi3", "hiiri");
27    Image ammuksenkuva = LoadImage("bossinhyökkäys");
28    Image energiankuva = LoadImage("health");
29
30    SoundEffect hyppyAani = LoadSoundEffect("Jump7");
31    SoundEffect terveysAani = LoadSoundEffect("Powerup2");
32
33
34    Image aseenkuva = LoadImage("ase");
35
36    Color[] tasovarit = { Color.Red, Color.Gray, Color.DarkBlue };
37
38    String[] musiikit = {"musiikki", "musiikki3", "musiikki4"};
39
40    private Image[][] ukkeliHyppaa = { LoadImages("hyppy"), LoadImages("toistajuoksuu2"), LoadImages("iisakki") };
41    private Image[][] ukkelinKavely = { LoadImages("juoksuu 1","juoksuu 2"), LoadImages("toistajuoksuu1", "toistajuoksuu2"), LoadImages("iisakki", "iisakkikavelee") };
42    private Image[][] ukkeliHyokkaa = { LoadImages("hyökkäys 4"), LoadImages("Emilinhahmonsuunittelu"), LoadImages("iisakki") };
43    private Image[][] ukkeliPaikallaan = { LoadImages("god of war"), LoadImages("Emilinhahmonsuunittelu"), LoadImages("iisakki") };
44
45    SoundEffect maaliAani = LoadSoundEffect("maali");
46    DoubleMeter elamaLaskuri;
47
48    public override void Begin()
49    {
50        AloitaPeli();
51      }
52
53    void AloitaPeli()
54    {
55        ClearAll();
56        Gravity = new Vector(0, -1300);
57
58        MediaPlayer.Play(musiikit[kentannumero-1]);
59        MediaPlayer.IsRepeating = true;
60
61
62        LuoKentta();
63        LisaaNappaimet();
64        LuoElamaLaskuri();
65
66        Camera.Follow(pelaaja1);
67        Camera.ZoomFactor = 1.2;
68        Camera.StayInLevel = true;
69    }
70
71    void LuoKentta()
72    {
73        TileMap kentta = TileMap.FromLevelAsset("kentta"+kentannumero);
74        kentta.SetTileMethod('#', LisaaTaso);
75        kentta.SetTileMethod('*', LisaaTahti);
76        kentta.SetTileMethod('N', LisaaPelaaja);
77        kentta.SetTileMethod('H', LisaaVihollinen);
78        kentta.SetTileMethod('P', LisaaAnsa);
79        kentta.SetTileMethod('B', LisaaBossi);
80        kentta.SetTileMethod('M', LisaaBossimusiikki);
81        kentta.SetTileMethod('4', LisaaToinentaso);
82        kentta.SetTileMethod('9', LisaaTerveyttä);
83
84        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
85        Level.CreateBorders();
86        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
87
88        Level.Background.Image = taustaKuva[kentannumero-1];
89    }
90
91    void LisaaTaso(Vector paikka, double leveys, double korkeus)
92    {
93        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
94        taso.Position = paikka;
95        taso.Color = tasovarit[kentannumero-1];
96        Add(taso);
97    }
98
99    void LisaaTerveyttä(Vector paikka, double leveys, double korkeus)
100    {
101        PhysicsObject terveys = PhysicsObject.CreateStaticObject(leveys, korkeus);
102        terveys.Position = paikka;
103        terveys.Color = tasovarit[kentannumero - 1];
104        terveys.Image = energiankuva;
105        terveys.IgnoresCollisionResponse = true;
106        terveys.Tag = "terveys";
107        Add(terveys);
108    }
109
110    void LisaaToinentaso(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        taso.Position = paikka;
114        taso.Color = Color.Gray;
115        Add(taso);
116    }
117
118    void LisaaBossimusiikki(Vector paikka, double leveys, double korkeus)
119    {
120        taso1 = PhysicsObject.CreateStaticObject(3*leveys, 3*korkeus);
121        taso1.Position = paikka;
122        taso1.Color = Color.Red;
123        taso1.IsVisible = false;
124        taso1.IgnoresCollisionResponse = true;
125        taso1.Tag = "Bossipalikka";
126        Add(taso1);
127    }
128
129    void LisaaAnsa(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
132        taso.Position = paikka;
133        taso.Color = Color.Black;
134        taso.Tag = "Ansa";
135
136        Add(taso);
137    }
138
139    void LisaaBossi(Vector paikka, double leveys, double korkeus)
140    {
141        PlatformCharacter bossi = new PlatformCharacter(leveys *5 , korkeus *5 );
142        bossi.Position = paikka;
143        bossi.Y += korkeus / 5;
144        bossi.Image = bossinkuva[kentannumero-1];
145        Add(bossi);
146
147        bossi.Weapon = new AssaultRifle(30, 10);
148        bossi.Weapon.ProjectileCollision += AmmusOsui;
149
150        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
151        tasoAivot.Speed = 100;
152        bossi.Brain = tasoAivot;
153
154        AddCollisionHandler(bossi, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { 
155            elamaLaskuriB.Value--;
156
157            if (elamaLaskuriB.Value < 1)
158            {
159                bossi.Destroy();
160                kentannumero++;
161                AloitaPeli();
162
163            }
164        });
165       
166        elamaLaskuriB = new DoubleMeter(10);
167        elamaLaskuriB.MaxValue = 10;
168        //elamaLaskuriB.LowerLimit += ElamaLoppui;
169
170        ProgressBar elamaPalkkiB = new ProgressBar(150, 20);
171        elamaPalkkiB.X = Screen.Right - 150;
172        elamaPalkkiB.Y = Screen.Top - 20;
173        elamaPalkkiB.BindTo(elamaLaskuriB);
174        Add(elamaPalkkiB);
175
176        Timer ajastin = new Timer();
177        ajastin.Interval = 1;
178        ajastin.Timeout += delegate {
179            if (bossi.IsDestroyed)
180            {
181                ajastin.Stop();
182            }
183
184            if (Vector.Distance(pelaaja1.Position, bossi.Position) < 1500)
185            {
186                tasoAivot.Active = false;
187                bossi.Weapon.AbsoluteAngle = (pelaaja1.Position - bossi.Position).Angle;
188                PhysicsObject ammus = bossi.Weapon.Shoot();
189
190                if (ammus != null)
191                {
192                    ammus.Size = new Vector(75, 75);
193                   ammus.Image = ammuksenkuva;
194                   ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
195                }
196            }
197            else
198            {
199                tasoAivot.Active = true;
200            }
201        };
202
203        ajastin.Start();
204
205    }
206
207    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
208    {
209        PlatformCharacter vihollinen = new PlatformCharacter(leveys, korkeus*2);
210        vihollinen.Position = paikka;
211        vihollinen.Y += korkeus / 2;
212        vihollinen.Image = vihollisenkuva[kentannumero-1];
213        Add(vihollinen);
214
215        vihollinen.Weapon = new AssaultRifle(30, 10);
216        vihollinen.Weapon.ProjectileCollision += AmmusOsui;
217
218        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
219        tasoAivot.Speed = 100;
220        vihollinen.Brain = tasoAivot;
221
222        AddCollisionHandler(vihollinen, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { vihollinen.Destroy(); });
223
224        Timer ajastin = new Timer();
225        ajastin.Interval = 0.05;
226        ajastin.Timeout += delegate
227        {
228            if (vihollinen.IsDestroyed)
229                ajastin.Stop();
230
231            if (Vector.Distance(pelaaja1.Position, vihollinen.Position) < 600)
232            {
233                tasoAivot.Active = false;
234                vihollinen.Weapon.AbsoluteAngle = (pelaaja1.Position - vihollinen.Position).Angle;
235                PhysicsObject ammus = vihollinen.Weapon.Shoot();
236
237                if (ammus != null)
238                {
239                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
240                }
241            }
242            else
243            {
244                tasoAivot.Active = true;
245            }
246        };
247
248        ajastin.Start();
249    }
250
251    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
252    {
253        ammus.Destroy();
254        if (kohde == pelaaja1)
255        {
256            elamaLaskuri.Value--;
257        }
258    }
259
260    void LisaaTahti(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        tahti.IgnoresCollisionResponse = true;
264        tahti.Position = paikka;
265        tahti.Image = tahtiKuva;
266        tahti.Tag = "tahti";
267        Add(tahti);
268    }
269
270    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
271    {
272        pelaaja1 = new PlatformCharacter(leveys, korkeus * 1.3);
273        pelaaja1.Position = paikka;
274        pelaaja1.Y += 40;
275        pelaaja1.Mass = 4.0;
276        pelaaja1.Image = pelaajanKuva;
277        AddCollisionHandler(pelaaja1, "Ansa", TormaaAnsaan);
278        pelaaja1.AnimWalk = new Animation(ukkelinKavely[kentannumero-1]);
279        pelaaja1.AnimWalk.FPS = 7;
280        pelaaja1.AnimIdle = new Animation(ukkeliPaikallaan[kentannumero-1]);
281        pelaaja1.AnimJump = new Animation(ukkeliHyppaa[kentannumero-1]);
282        pelaaja1.CollisionIgnoreGroup = 1;
283        AddCollisionHandler(pelaaja1, "Bossipalikka", Soitamusa);
284        AddCollisionHandler(pelaaja1, "terveys", Terveyttälisää); 
285        Add(pelaaja1);
286
287        if (kentannumero >= 2)
288        {
289            pelaaja1.Weapon = new AssaultRifle(30, 10);
290            pelaaja1.Weapon.InfiniteAmmo = true;
291        }
292       
293       
294
295    }
296
297    void Terveyttälisää(PhysicsObject hahmo, PhysicsObject palikka)
298    {
299        elamaLaskuri.Value += 3;
300        palikka.Destroy();
301        terveysAani.Play();
302    }
303    void Soitamusa(PhysicsObject hahmo, PhysicsObject palikka)
304{
305    taso1.Destroy();
306    MediaPlayer.Play("musiikki2");
307    MediaPlayer.IsRepeating = true;
308}
309    void LisaaNappaimet()
310    {
311        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
312        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
313
314        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
315        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
316        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
317
318        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
319
320        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
321        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
322
323        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
324        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
325
326        //ControllerOne.Listen(Button.DPadRight, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
327        //ControllerOne.Listen(Button.DPadRight, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
328
329        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
330        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
331
332        ControllerOne.Listen(Button.X, ButtonState.Pressed, Hyokkaa, "Pelaaja hyokkaa", pelaaja1);
333
334       PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
335    }
336
337    void Liikuta(PlatformCharacter hahmo, double nopeus)
338    {
339        hahmo.Walk(nopeus);
340       
341    }
342
343    void KaynnistaKavelu()
344    {
345       
346        pelaaja1.Animation.Start();
347
348    }
349
350    void PysautaKavelu()
351    {
352
353        pelaaja1.Animation.Stop();
354
355    }
356
357    void Hyppaa(PlatformCharacter hahmo, double nopeus)
358    {
359        hahmo.Jump(nopeus);
360        pelaaja1.Animation.Start();
361        hyppyAani.Play();
362
363    }
364
365    void Hyokkaa(PlatformCharacter hahmo)
366    {
367        if (kentannumero >= 2)
368        {
369            PhysicsObject ammus = hahmo.Weapon.Shoot();
370
371            if (ammus != null)
372            {
373                ammus.Tag = "Ase";
374                ammus.LifetimeLeft=TimeSpan.FromSeconds(3);
375            }
376        }
377        else
378        {
379
380            PhysicsObject Ase = new PhysicsObject(150, 30);
381            Ase.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 120;
382            Ase.LifetimeLeft = TimeSpan.FromSeconds(0.5);
383            Ase.Image = aseenkuva;
384            Ase.CollisionIgnoreGroup = 1;
385            Add(Ase);
386            Animation anim = new Animation(ukkeliHyokkaa[kentannumero - 1]);
387            anim.FPS = 2;
388            Ase.Tag = "Ase";
389            Ase.Angle = pelaaja1.FacingDirection.Angle;
390            hahmo.PlayAnimation(anim);
391
392            Timer ajastin = new Timer();
393            ajastin.Interval = 0.01;
394            ajastin.Timeout += delegate
395            {
396                Ase.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * 120 + new Vector(0, 30);
397            };
398            ajastin.Start();
399        }
400    }
401
402    void TormaaAnsaan(PhysicsObject hahmo, PhysicsObject tahti)
403    {
404        AloitaPeli(); 
405       
406       
407    }
408
409    void LuoElamaLaskuri()
410    {
411        elamaLaskuri = new DoubleMeter(10);
412        elamaLaskuri.MaxValue = 10;
413        elamaLaskuri.LowerLimit += ElamaLoppui;
414
415        ProgressBar elamaPalkki = new ProgressBar(150, 20);
416        elamaPalkki.X = Screen.Left + 150;
417        elamaPalkki.Y = Screen.Top - 20;
418        elamaPalkki.BindTo(elamaLaskuri);
419        Add(elamaPalkki);
420    }
421
422    void ElamaLoppui()
423    {
424        MessageDisplay.Add("Elämät loppuivat, voi voi.");
425        AloitaPeli();
426    }
427
428}
Note: See TracBrowser for help on using the repository browser.