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

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