source: 2014/koodauskerho/38/EmilK/toimintajuttu/toimintajuttu/toimintajuttu/toimintajuttu.cs @ 5816

Revision 5816, 36.4 KB checked in by sieerinn, 7 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 = 800;
12    const double hyppyNopeus = 2750;
13    const int RUUDUN_KOKO = 94;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter bossi;
17
18    int kentannumero = 1;
19
20    bool yokiikarit = false;
21    GameObject kiikarit;
22
23    DoubleMeter elamaLaskuriB;
24    PhysicsObject taso1;
25
26    Image[] taustaKuva = LoadImages("taustaagodofwariin", "metal gear tausta", "hitman tausta", "parempi metrotausta", "hiippailutausta", "far cry tausta", "middle earth taustaa", "spec ops tausta", "just cause tausta");
27    Image pelaajanKuva = LoadImage("god of war");
28    Image tahtiKuva = LoadImage("tahti");
29
30    Image kiikarikuva = LoadImage("yökiikarit");
31
32    Image[][] vihollisenkuva = new Image[][]
33        { LoadImages("vihu")
34        , LoadImages("hämähäkki")
35        , LoadImages("nekromorfi")
36        , LoadImages("rotta juoksee 1", "rotta juoksee 2", "rotta juoksee 3", "rotta juoksee 4","rotta juoksee 5", "rotta juoksee 6")
37        , LoadImages("norsu")
38        , LoadImages("demoni 1")
39        , LoadImages("hiiri")
40        , LoadImages("spec ops vihu")
41        , LoadImages("spec ops vihu")
42        };
43
44    Image[] vihollisenLento = LoadImages("vihu hirttyy", "vihu hirttyy 2");
45
46    Image[] toisenvihollisenkuva = LoadImages("hämähäkki", "hämähäkki", "hämähäkki", "vihu", "rotta", "vihu", "hiiri", "spec ops vihu 2", "rotta");
47
48    Image lentavankuva = LoadImage("demoni 1");
49
50    Image[] bossinkuva = LoadImages("bossi remasteroituna", "ocelot", "bossi3", "pahis", "hämähäkki", "norsu", "hiiri", "rotta", "bossi3");
51    Image ammuksenkuva = LoadImage("bossinhyökkäys");
52    Image[] energiankuva = LoadImages("PALLO9", "SPLINTERCELLHP2", "deadspacehp", "metrohealth", "powerup", "pavel", "hiiri", "rotta", "ROTTA");
53    Image[] powerinkuva = LoadImages("powerup", "bossi3", "toinenbossi", "pahis", "norsu", "hämähäkki", "hiiri", "rotta", "powerup");
54    Image[] tuhokuva = LoadImages("titaaninjalka", "vihu", "rotta", "nekromorfi", "metrohealth", "norsu", "hiiri", "rotta");
55    Image tasokuva = LoadImage("platform");
56    Image ansakuva = LoadImage("tappavaplätformi");
57    Image toinentasokuva = LoadImage("JUTTU");
58    Image[] kuolinkuvat = LoadImages("kuolinanimaatio 1", "kuolinanimaatio 2", "kuolinanimaatio 3", "kuolinanimaatio 4");
59    Image alkuvalikonkuva = LoadImage("TITLE SCREEN osa 1");
60    Image toinenalkuvalikonkuva = LoadImage("TITLE SCREEN osa 2");
61
62    Image[] tallomiskuva = LoadImages("bossi talloo 1", "bossi talloo 2");
63    Image jalkakuva = LoadImage("BOSSIN ISKU");
64
65    SoundEffect hyppyAani = LoadSoundEffect("Jump7");
66    SoundEffect terveysAani = LoadSoundEffect("Powerup2");
67
68    Image voitto = LoadImage("voitto");
69
70    Image[] aseenkuvat = LoadImages("ase", "hook", "hook", "hook", "hook", "hook", "hook", "hook", "hook");
71
72    Color[] tasovarit = { Color.Red, Color.Gray, Color.DarkBlue, Color.DarkGreen, Color.Gray, Color.Green, Color.GreenYellow, Color.GreenYellow, Color.Gray };
73
74    String[] musiikit = { "bi&ei3", "ljn2", "doom2", "futuremusic2", "D&d2", "voittomusa", "ljn2", "doom2", "bi&ei3" };
75
76    private Image[][] ukkeliHyppaa = { LoadImages("kratos"), LoadImages("snake juoksee 1(2)"), LoadImages("agent 47 juoksee(22)"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher juoksee 1"), LoadImages("Jason juoksee 1"), LoadImages("Talion"), LoadImages("Walker juoksee 1"), LoadImages("rico") };
77    private Image[][] ukkelinKavely = { LoadImages("kratos juoksee 1"), LoadImages("snake juoksee 1", "snake juoksee 2", "snake juoksee 3", "snake juoksee 4", "snake juoksee 5", "snake juoksee 6", "snake juoksee 7"), LoadImages("agent 472", "agent 47 juoksee(22)"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher", "Sam Fisher juoksee 1"), LoadImages("Jason", "Jason juoksee 1"), LoadImages("Talion"), LoadImages("Walker", "Walker juoksee 1"), LoadImages("rico 2") };
78    private Image[][] ukkeliHyokkaa = { LoadImages("hyökkäys 4"), LoadImages("snake 2"), LoadImages("agent 472"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher"), LoadImages("Jason"), LoadImages("Talion"), LoadImages("Walker juoksee 1"), LoadImages("rico 2") };
79    private Image[][] ukkeliHyokkaaPistol = { LoadImages("kratos ampuu 1", "kratos ampuu 2"), LoadImages("snake pistol 1", "snake pistol 2", "snake pistol 3", "snake pistol 4", "snake pistol 5", "snake pistol 6", "snake pistol 7"), LoadImages("agent 472"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher taser"), LoadImages("Jason"), LoadImages("Talion"), LoadImages("Walker pistol 1", "Walker pistol 2"), LoadImages("rico pistol 1", "rico pistol 2", "rico pistol 3") };
80    private Image[][] ukkeliHyokkaaRifle = { LoadImages("kratos ampuu 1", "kratos ampuu 2"), LoadImages("snake"), LoadImages("agent 472"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher"), LoadImages("Jason"), LoadImages("Talion"), LoadImages("Walker"), LoadImages("rico rifle 2") };
81    private Image[][] ukkeliPaikallaan = { LoadImages("kratos"), LoadImages("snake 2"), LoadImages("agent 472"), LoadImages("pavel remasteroituna"), LoadImages("Sam Fisher"), LoadImages("Jason"), LoadImages("Talion"), LoadImages("Walker"), LoadImages("rico 2") };
82    private Image[][] ukkeliPoweri = { LoadImages("kratos power 1", "kratos power 2", "kratos power 3", "kratos power 3"), LoadImages("snake power 1", "snake power 2", "snake power 3", "snake power 4"), LoadImages("agent 47 power", "agent 47 power 2", "agent 47 power 3", "agent 47 power 4", "agent 47 power 4"), LoadImages("pavel power 1", "pavel power 2", "pavel power 3", "pavel power 3"), LoadImages("Sam Fisher power 1", "Sam Fisher power 2", "Sam Fisher power 3", "Sam Fisher power 4"), LoadImages("Jason power 1", "Jason power 2", "Jason power 3", "Jason power 4"), LoadImages("Talion power 1", "Talion power 2", "Talion power 3", "Talion power 4"), LoadImages("Walker power 1", "Walker power 2", "Walker power 3", "Walker power 4"), LoadImages("rico 2") };
83    private Image[] ammuskuvat = { LoadImage("Corvon nuoli"), LoadImage("graysonin luoti"), LoadImage("graysonin luoti"), LoadImage("graysonin luoti"), LoadImage("graysonin luoti"), LoadImage("graysonin luoti"), LoadImage("Corvon nuoli"), LoadImage("graysonin luoti"), LoadImage("graysonin luoti") };
84
85    SoundEffect maaliAani = LoadSoundEffect("maali");
86
87    DoubleMeter elamaLaskuri;
88
89    IntMeter VoimaLaskuri;
90
91    public override void Begin()
92    {
93        IsMouseVisible = true;
94
95       
96
97        LuoValikko(1);
98
99
100    }
101    void LuoValikko(int ruudunnumero)
102    {
103        ClearAll();
104
105
106        switch (ruudunnumero)
107        {
108            case 1:
109                Level.Background.Image = alkuvalikonkuva;
110                luonappi(0.3, 0.41, 1);
111                luonappi(0.53, 0.4, 3);
112                luonappi(0.74, 0.4, 5);
113                luonappi(0.25, 0.73, 4);
114                luonappi(0.49, 0.73, 2);
115                luonappi(0.75, 0.77, -99);
116                break;
117            case 2:
118                Level.Background.Image = toinenalkuvalikonkuva;
119               
120                luonappi(0.3, 0.4, 6);
121                luonappi(0.83, 0.47, 7);
122                luonappi(0.54, 0.42, 8);
123                luonappi(0.37, 0.74, 9);
124                luonappi(0.15, 0.73, -100);
125                break;
126        } 
127        Level.Background.FitToLevel();
128        Level.Background.Color = new Color(0, 19, 127);
129    }
130    void luonappi(double x, double y, int kenttä)
131    {
132        GameObject nappi = new GameObject(150, 150);
133        nappi.X = Level.Left + x * Level.Width;
134        nappi.Y = Level.Top - y * Level.Height;
135        nappi.Color = Color.Transparent;
136        Add(nappi);
137        if (kenttä == -99)
138        {
139            Mouse.ListenOn(nappi, MouseButton.Left, ButtonState.Pressed, LuoValikko, null, 2);
140        }
141        else if (kenttä == -100)
142        {
143            Mouse.ListenOn(nappi, MouseButton.Left, ButtonState. Pressed, LuoValikko, null, 1);
144        }
145        else
146        {
147            Mouse.ListenOn(nappi, MouseButton.Left, ButtonState.Pressed, vaihdakentta, null, kenttä);
148        }
149    } 
150
151    void vaihdakentta(int kenttä)
152    {
153        IsMouseVisible = false;
154        kentannumero = kenttä;
155        AloitaPeli();
156    }
157
158    void AloitaPeli()
159    {
160        ClearAll();
161
162        if (kentannumero >= 10)
163        {
164
165            MediaPlayer.Play("voittomusa");
166            MediaPlayer.IsRepeating = true;
167
168            PelinVoitto();
169            return;
170        }
171
172        //if (kentannumero == 4)
173        //{
174        //    Level.AmbientLight = 0.2;
175
176        //    Light valo = new Light();
177        //    valo.Intensity = 0.9;
178        //    valo.Distance = 300;
179        //    valo.Position = Vector.Zero;
180        //    Add(valo);
181
182        //    Timer ajastin = new Timer();
183        //    ajastin.Interval = 0.05;
184        //    ajastin.Timeout += delegate { valo.Position = pelaaja1.Position; /* + new Vector(0, -50); */ };
185        //    ajastin.Start();
186        //}
187
188        Gravity = new Vector(0, -4000);
189
190        MediaPlayer.Play(musiikit[kentannumero - 1]);
191        MediaPlayer.IsRepeating = true;
192
193
194        LuoKentta();
195        LisaaNappaimet();
196        LuoElamaLaskuri();
197
198        Camera.Follow(pelaaja1);
199        Camera.FollowOffset = new Vector(0, -100);
200        Camera.ZoomFactor = 0.85;
201        Camera.StayInLevel = true;
202
203
204    }
205
206    void PelinVoitto()
207    {
208        GameObject voittokuva = new GameObject(800, 600);
209        voittokuva.Image = voitto;
210        Add(voittokuva);
211        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
212
213        Camera.ZoomToLevel();
214    }
215
216    void LuoKentta()
217    {
218        TileMap kentta = TileMap.FromLevelAsset("kentta" + kentannumero);
219        kentta.SetTileMethod('#', LisaaTaso);
220        kentta.SetTileMethod('*', LisaaTahti);
221        kentta.SetTileMethod('N', LisaaPelaaja);
222        kentta.SetTileMethod('H', LisaaVihollinen);
223        kentta.SetTileMethod('J', LisaaToinenVihollinen);
224        kentta.SetTileMethod('P', LisaaAnsa);
225        kentta.SetTileMethod('B', LisaaBossi);
226        kentta.SetTileMethod('M', LisaaBossimusiikki);
227        kentta.SetTileMethod('4', LisaaToinentaso);
228        kentta.SetTileMethod('5', LisaaKolmastaso);
229        kentta.SetTileMethod('+', LisaaNeljästaso);
230        kentta.SetTileMethod('9', LisaaTerveyttä);
231        kentta.SetTileMethod('8', Lisaadeadspacehp);
232        kentta.SetTileMethod('3', Lisaametrohealth);
233        kentta.SetTileMethod('7', LisaaPowerup);
234        kentta.SetTileMethod('L', LisaaLentavavihollinen);
235        kentta.SetTileMethod('Q', Lisaanakymatonpalikka);
236        kentta.SetTileMethod('5', Lisaavalaistus);
237
238        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
239        Level.CreateBorders();
240        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
241
242        Level.Background.Image = taustaKuva[kentannumero - 1];
243    }
244
245    void LisaaTaso(Vector paikka, double leveys, double korkeus)
246    {
247        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
248        taso.Position = paikka;
249        taso.Color = tasovarit[kentannumero - 1];
250        taso.Image = tasokuva;
251
252        Add(taso);
253    }
254
255    void Lisaanakymatonpalikka(Vector paikka, double leveys, double korkeus)
256    {
257        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
258        taso.Position = paikka;
259        taso.Color = tasovarit[kentannumero - 1];
260        taso.Image = tasokuva;
261        taso.Tag = "nakymaton";
262        taso.IsVisible = false;
263
264
265        Add(taso);
266    }
267
268    void LisaaTerveyttä(Vector paikka, double leveys, double korkeus)
269    {
270        PhysicsObject terveys = PhysicsObject.CreateStaticObject(leveys, korkeus);
271        terveys.Position = paikka;
272        terveys.Color = tasovarit[kentannumero - 1];
273        terveys.Image = energiankuva[kentannumero - 1];
274        terveys.IgnoresCollisionResponse = true;
275        terveys.Tag = "terveys";
276        Add(terveys);
277    }
278    void Lisaasplintercellhp(Vector paikka, double leveys, double korkeus)
279    {
280        LisaaTerveyttä(paikka, leveys, korkeus);
281    }
282
283    void Lisaadeadspacehp(Vector paikka, double leveys, double korkeus)
284    {
285        LisaaTerveyttä(paikka, leveys / 5, korkeus / 2);
286    }
287
288    void Lisaametrohealth(Vector paikka, double leveys, double korkeus)
289    {
290        LisaaTerveyttä(paikka, leveys / 5, korkeus / 2);
291    }
292
293    void LisaaPowerup(Vector paikka, double leveys, double korkeus)
294    {
295        PhysicsObject powerup = PhysicsObject.CreateStaticObject(leveys, korkeus);
296        powerup.Position = paikka;
297        powerup.Color = tasovarit[kentannumero - 1];
298        powerup.Image = powerinkuva[kentannumero - 1];
299        powerup.IgnoresCollisionResponse = true;
300        powerup.Tag = "powerup";
301        Add(powerup);
302    }
303
304    void LisaaToinentaso(Vector paikka, double leveys, double korkeus)
305    {
306        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
307        taso.Position = paikka;
308        taso.Color = Color.Gray;
309        Add(taso);
310    }
311
312    void LisaaNeljästaso(Vector paikka, double leveys, double korkeus)
313    {
314        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
315        taso.Position = paikka;
316        taso.Image = toinentasokuva;
317        Add(taso);
318    }
319
320    void LisaaKolmastaso(Vector paikka, double leveys, double korkeus)
321    {
322        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
323        taso.Position = paikka;
324        taso.Color = Color.Gray;
325        Add(taso);
326
327    }
328
329    void LisaaBossimusiikki(Vector paikka, double leveys, double korkeus)
330    {
331        taso1 = PhysicsObject.CreateStaticObject(3 * leveys, 3 * korkeus);
332        taso1.Position = paikka;
333        taso1.Color = Color.Red;
334        taso1.IsVisible = false;
335        taso1.IgnoresCollisionResponse = true;
336        taso1.Tag = "Bossipalikka";
337        Add(taso1);
338    }
339
340    void Lisaavalaistus(Vector paikka, double leveys, double korkeus)
341    {
342        taso1 = PhysicsObject.CreateStaticObject(15 * leveys, 3 * korkeus);
343        taso1.Position = paikka;
344        taso1.Color = Color.Red;
345        taso1.IsVisible = false;
346        taso1.IgnoresCollisionResponse = true;
347        taso1.Tag = "Pimeää";
348        Add(taso1);
349    }
350
351    void LisaaAnsa(Vector paikka, double leveys, double korkeus)
352    {
353        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
354        taso.Position = paikka;
355        taso.Color = Color.Black;
356        taso.Image = ansakuva;
357        taso.Tag = "Ansa";
358
359        Add(taso);
360    }
361
362    void LisaaBossi(Vector paikka, double leveys, double korkeus)
363    {
364        bossi = new PlatformCharacter(leveys * 5, korkeus * 5);
365        bossi.Position = paikka;
366        bossi.Y += korkeus / 5;
367        bossi.Image = bossinkuva[kentannumero - 1];
368        Add(bossi);
369
370        bossi.Weapon = new AssaultRifle(30, 10);
371        bossi.Weapon.ProjectileCollision += AmmusOsui;
372
373
374
375        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
376        tasoAivot.Speed = 100;
377        bossi.Brain = tasoAivot;
378
379        Timer bossinetaisyysajastin = new Timer();
380        bossinetaisyysajastin.Interval = 0.5;
381        bossinetaisyysajastin.Timeout += BossiTarkistaa;
382        bossinetaisyysajastin.Start();
383
384
385        AddCollisionHandler(bossi, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu)
386        {
387            elamaLaskuriB.Value--;
388
389            if (elamaLaskuriB.Value < 1)
390            {
391                bossi.Destroy();
392                kentannumero++;
393                AloitaPeli();
394
395            }
396        });
397
398        elamaLaskuriB = new DoubleMeter(10);
399        elamaLaskuriB.MaxValue = 10;
400        //elamaLaskuriB.LowerLimit += ElamaLoppui;
401
402        ProgressBar elamaPalkkiB = new ProgressBar(150, 20);
403        elamaPalkkiB.X = Screen.Right - 150;
404        elamaPalkkiB.Y = Screen.Top - 20;
405        elamaPalkkiB.BindTo(elamaLaskuriB);
406        Add(elamaPalkkiB);
407
408        Timer ajastin = new Timer();
409        ajastin.Interval = 1;
410        ajastin.Timeout += delegate
411        {
412            if (bossi.IsDestroyed)
413            {
414                ajastin.Stop();
415            }
416
417            if (Vector.Distance(pelaaja1.Position, bossi.Position) < 1500)
418            {
419                if (kentannumero == 1)
420                {
421                    BossiTarkistaa();
422
423                }
424
425                tasoAivot.Active = false;
426                bossi.Weapon.AbsoluteAngle = (pelaaja1.Position - bossi.Position).Angle;
427                PhysicsObject ammus = bossi.Weapon.Shoot();
428
429                if (ammus != null)
430                {
431                    ammus.Size = new Vector(320, 150);
432                    ammus.Image = ammuksenkuva;
433                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
434                }
435            }
436            else
437            {
438                tasoAivot.Active = true;
439            }
440        };
441
442        ajastin.Start();
443
444    }
445
446    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
447    {
448        PlatformCharacter vihollinen = new PlatformCharacter(leveys, korkeus * 2);
449        vihollinen.Position = paikka;
450        vihollinen.Y += korkeus / 2;
451        vihollinen.Image = vihollisenkuva[kentannumero - 1][0];
452        vihollinen.Tag = "vihollinen";
453        Animation anim = new Animation(vihollisenkuva[kentannumero - 1]);
454        anim.FPS = 15;
455        vihollinen.AnimWalk = anim;
456        Add(vihollinen);
457
458
459
460        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
461        tasoAivot.Speed = 450;
462        vihollinen.Brain = tasoAivot;
463
464        AddCollisionHandler(vihollinen, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { vihollinen.Destroy(); });
465
466        Timer ajastin = new Timer();
467        ajastin.Interval = 0.05;
468        ajastin.Timeout += delegate
469        {
470            if (vihollinen.IsDestroyed)
471                ajastin.Stop();
472
473        };
474        ajastin.Start();
475    }
476
477
478    void LisaaLentavavihollinen(Vector paikka, double leveys, double korkeus)
479    {
480        PhysicsObject lentava = new PhysicsObject(leveys * 2, korkeus * 4);
481        lentava.Position = paikka;
482        lentava.IgnoresGravity = true;
483        lentava.CanRotate = false;
484        lentava.Oscillate(new Vector(0, 1), korkeus * 2, 0.5);
485        lentava.Image = lentavankuva;
486        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
487        lentava.Brain = seuraajanAivot;
488        seuraajanAivot.Active = true;
489        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
490        seuraajanAivot.DistanceFar = 1200;           // Etäisyys jolla aletaan seurata kohdetta
491        seuraajanAivot.DistanceClose = 400;         // Etäisyys jolloin ollaan lähellä kohdetta
492        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
493
494
495
496        Add(lentava);
497
498    }
499
500    void LisaaToinenVihollinen(Vector paikka, double leveys, double korkeus)
501    {
502        PlatformCharacter toinenvihollinen = new PlatformCharacter(leveys, korkeus * 2);
503        toinenvihollinen.Position = paikka;
504        toinenvihollinen.Y += korkeus / 2;
505        toinenvihollinen.Image = toisenvihollisenkuva[kentannumero - 1];
506        toinenvihollinen.Tag = "vihollinen";
507        Add(toinenvihollinen);
508
509        toinenvihollinen.Weapon = new AssaultRifle(30, 10);
510        toinenvihollinen.Weapon.ProjectileCollision += AmmusOsui;
511
512        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
513        tasoAivot.Speed = 100;
514        toinenvihollinen.Brain = tasoAivot;
515
516        AddCollisionHandler(toinenvihollinen, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { toinenvihollinen.Destroy(); });
517
518        Timer ajastin = new Timer();
519        ajastin.Interval = 0.05;
520        ajastin.Timeout += delegate
521        {
522            if (toinenvihollinen.IsDestroyed)
523                ajastin.Stop();
524
525            if (Vector.Distance(pelaaja1.Position, toinenvihollinen.Position) < 600)
526            {
527                tasoAivot.Active = false;
528                toinenvihollinen.Weapon.AbsoluteAngle = (pelaaja1.Position - toinenvihollinen.Position).Angle;
529                PhysicsObject ammus = toinenvihollinen.Weapon.Shoot();
530
531                if (ammus != null)
532                {
533                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
534                }
535            }
536            else
537            {
538                tasoAivot.Active = true;
539            }
540        };
541
542        ajastin.Start();
543    }
544
545    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
546    {
547        ammus.Destroy();
548        if (kohde == pelaaja1)
549        {
550            elamaLaskuri.Value--;
551        }
552    }
553
554    void LisaaTahti(Vector paikka, double leveys, double korkeus)
555    {
556        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
557        tahti.IgnoresCollisionResponse = true;
558        tahti.Position = paikka;
559        tahti.Image = tahtiKuva;
560        tahti.Tag = "tahti";
561        Add(tahti);
562    }
563
564    AssaultRifle pistol;
565    AssaultRifle rifle;
566
567    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
568    {
569        VoimaLaskuri = new IntMeter(0, 0, 3);
570
571        pelaaja1 = new PlatformCharacter(leveys * 2.0, korkeus * 2.0);
572        pelaaja1.Position = paikka;
573        pelaaja1.Y += 40;
574        pelaaja1.Mass = 4.0;
575        pelaaja1.Image = pelaajanKuva;
576        AddCollisionHandler(pelaaja1, "Ansa", TormaaAnsaan);
577        pelaaja1.AnimWalk = new Animation(ukkelinKavely[kentannumero - 1]);
578        pelaaja1.AnimWalk.FPS = 14;
579        pelaaja1.AnimIdle = new Animation(ukkeliPaikallaan[kentannumero - 1]);
580        pelaaja1.AnimJump = new Animation(ukkeliHyppaa[kentannumero - 1]);
581        pelaaja1.CollisionIgnoreGroup = 1;
582        AddCollisionHandler(pelaaja1, "Bossipalikka", Soitamusa);
583        AddCollisionHandler(pelaaja1, "terveys", Terveyttälisää);
584        AddCollisionHandler(pelaaja1, "powerup", Voimaalisää);
585        AddCollisionHandler(pelaaja1, "vihollinen", Vähennäterveyttä);
586        AddCollisionHandler(pelaaja1, "Pimeää", pimennys);
587
588        pelaaja1.Tag = "pelaaja";
589        Add(pelaaja1);
590
591        pistol = new AssaultRifle(30, 10);
592        pistol.InfiniteAmmo = true;
593        pistol.IsVisible = false;
594        pistol.FireRate = 1;
595        pistol.ProjectileCollision = PelaajanAmmusOsui;
596        pistol.Y = 40;
597
598        rifle = new AssaultRifle(30, 10);
599        rifle.Ammo.MaxValue = 40;
600        rifle.Ammo.Value = 15;
601        rifle.IsVisible = false;
602        rifle.FireRate = 5;
603        rifle.ProjectileCollision = PelaajanAmmusOsui;
604        rifle.Y = 30;
605
606        pelaaja1.Weapon = rifle;
607
608        yokiikarit = false;
609
610        Label ammusNaytto = new Label();
611        ammusNaytto.X = Screen.Left + 100;
612        ammusNaytto.Y = Screen.Top - 100;
613        ammusNaytto.TextColor = Color.Black;
614        ammusNaytto.Color = Color.White;
615        ammusNaytto.IntFormatString = " ammuksia: {0:D1} ";
616        ammusNaytto.BindTo(rifle.Ammo);
617        Add(ammusNaytto);
618    }
619
620    void PelaajanAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
621    {
622        ammus.Destroy();
623    }
624
625    void Terveyttälisää(PhysicsObject hahmo, PhysicsObject palikka)
626    {
627        elamaLaskuri.Value += 3;
628        palikka.Destroy();
629        terveysAani.Play();
630    }
631
632
633    void Vähennäterveyttä(PhysicsObject hahmo, PhysicsObject vihollinen)
634    {
635        elamaLaskuri.Value -= 1;
636
637
638    }
639
640
641    void Voimaalisää(PhysicsObject hahmo, PhysicsObject palikka)
642    {
643        VoimaLaskuri.Value += 1;
644        palikka.Destroy();
645        terveysAani.Play();
646    }
647
648    void pimennys(PhysicsObject hahmo, PhysicsObject palikka)
649    {
650        Level.AmbientLight = 0.2;
651
652        Light valo = new Light();
653        valo.Intensity = 0.9;
654        valo.Distance = 300;
655        valo.Position = Vector.Zero;
656        Add(valo);
657
658        Timer ajastin = new Timer();
659        ajastin.Interval = 0.05;
660        ajastin.Timeout += delegate { valo.Position = pelaaja1.Position; /* + new Vector(0, -50); */ };
661        ajastin.Start();
662    }
663
664    void Soitamusa(PhysicsObject hahmo, PhysicsObject palikka)
665    {
666        taso1.Destroy();
667        MediaPlayer.Play("megaman2");
668        MediaPlayer.IsRepeating = true;
669    }
670
671    void LisaaNappaimet()
672    {
673        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
674        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
675
676        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
677        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
678        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
679        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyokkaa, "Pelaaja hyokkaa", pelaaja1);
680
681        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
682
683        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
684        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
685
686        ControllerOne.Listen(Button.LeftShoulder, ButtonState.Pressed, kayttaayokiikaria, "yokiikarit", pelaaja1);
687
688        ControllerOne.Listen(Button.RightShoulder, ButtonState.Pressed, vaihtaaasetta, "aseenvaihto", pelaaja1);
689
690        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
691        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
692
693        //ControllerOne.Listen(Button.DPadRight, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
694        //ControllerOne.Listen(Button.DPadRight, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
695
696        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
697        ControllerOne.Listen(Button.Y, ButtonState.Pressed, Käyttääpoweria, "Kaikki kuolee", pelaaja1);
698        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
699
700
701        ControllerOne.Listen(Button.B, ButtonState.Down, Hyokkaa, "Pelaaja hyokkaa", pelaaja1);
702
703
704        ControllerOne.Listen(Button.X, ButtonState.Pressed, Lyo, "Pelaaja hyokkaa", pelaaja1);
705
706        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
707    }
708
709    void Liikuta(PlatformCharacter hahmo, double nopeus)
710    {
711        hahmo.Walk(nopeus);
712
713    }
714
715    void KaynnistaKavelu()
716    {
717
718        pelaaja1.Animation.Start();
719
720    }
721
722    void vaihtaaasetta(PlatformCharacter hahmo)
723    {
724        if (hahmo.Weapon == pistol)
725        {
726            hahmo.Weapon = rifle;
727        }
728        else if (hahmo.Weapon == rifle)
729        {
730            hahmo.Weapon = pistol;
731        }
732}
733
734    void PysautaKavelu()
735    {
736
737        pelaaja1.Animation.Stop();
738
739    }
740
741    void Hyppaa(PlatformCharacter hahmo, double nopeus)
742    {
743        hahmo.Jump(nopeus);
744        pelaaja1.Animation.Start();
745        hyppyAani.Play();
746
747    }
748
749    void Käyttääpoweria(PlatformCharacter hahmo)
750    {
751        if (VoimaLaskuri.Value > 0)
752        {
753            VoimaLaskuri.Value--;
754
755            if (kentannumero == 1)
756            {
757                Animation poweri = new Animation(ukkeliPoweri[kentannumero - 1]);
758                poweri.FPS = 7;
759                pelaaja1.PlayAnimation(poweri);
760
761                GameObject tuho = new GameObject(Screen.Width, Screen.Height);
762                tuho.Image = tuhokuva[kentannumero - 1];
763                tuho.Position = pelaaja1.Position + new Vector(0, Screen.Height); // + Screen.Height / 2;
764                Add(tuho, 1);
765
766                tuho.Oscillate(-Vector.UnitY, Screen.Height, 0.5);
767
768                Timer.SingleShot(0.5, delegate
769                {
770                    foreach (var vihu in GetObjectsWithTag("vihollinen"))
771                    {
772                        if (Vector.Distance(pelaaja1.Position, vihu.Position) < 1600)
773                        {
774                            vihu.Destroy();
775                        }
776                    }
777                });
778
779                Timer.SingleShot(1, delegate
780                {
781                    tuho.Destroy();
782                });
783            }
784            else if (kentannumero == 8)
785            {
786                Animation poweri = new Animation(ukkeliPoweri[kentannumero - 1]);
787                poweri.FPS = 7;
788                pelaaja1.PlayAnimation(poweri);
789
790                foreach (var vihu in GetObjectsWithTag("vihollinen"))
791                {
792                    if (Vector.Distance(pelaaja1.Position, vihu.Position) < 1600)
793                    {
794                        vihu.Destroy();
795
796                        GameObject ylos = new GameObject(vihu.Width, vihu.Height);
797                        ylos.Image = vihu.Image;
798                        ylos.Position = vihu.Position;
799                        var anim = new Animation(vihollisenLento);
800                        anim.FPS = 6;
801                        ylos.Animation = anim;
802                        ylos.Animation.Start();
803                        Add(ylos);
804
805                        ylos.MoveTo(ylos.Position + new Vector(0, 1600), 100);
806
807                    }
808                }
809            }
810            else if (kentannumero == 7)
811            {
812                Animation poweri = new Animation(ukkeliPoweri[kentannumero - 1]);
813                poweri.FPS = 7;
814                pelaaja1.PlayAnimation(poweri);
815
816                Timer.SingleShot(0.5, delegate
817                {
818                    GameObject tuho = new GameObject(Screen.Width * 2, Screen.Height * 2);
819                    //tuho.Image = tuhokuva[kentannumero - 1];
820                    tuho.Color = Color.Blue;
821                    tuho.Position = pelaaja1.Position; // +new Vector(0, Screen.Height);
822                    Add(tuho, 1);
823
824                    foreach (var vihu in GetObjectsWithTag("vihollinen"))
825                    {
826                        if (Vector.Distance(pelaaja1.Position, vihu.Position) < 1600)
827                        {
828                            vihu.Destroy();
829
830                            GameObject ylos = new GameObject(vihu.Width, vihu.Height);
831                            ylos.Image = vihu.Image;
832                            ylos.Position = vihu.Position;
833                            var anim = new Animation(vihollisenLento);
834                            anim.FPS = 6;
835                            ylos.Animation = anim;
836                            ylos.Animation.Start();
837                            ylos.Animation.Played += delegate { ylos.Destroy(); };
838                            Add(ylos);
839                        }
840                    }
841
842                    Timer.SingleShot(0.1, delegate
843                    {
844                        tuho.Destroy();
845                    });
846                });
847            }
848            else
849            {
850                Animation poweri = new Animation(ukkeliPoweri[kentannumero - 1]);
851                poweri.FPS = 7;
852                pelaaja1.PlayAnimation(poweri);
853
854                Timer.SingleShot(0.5, delegate
855                {
856                    GameObject tuho = new GameObject(Screen.Width * 2, Screen.Height * 2);
857                    //tuho.Image = tuhokuva[kentannumero - 1];
858                    tuho.Color = Color.White;
859                    tuho.Position = pelaaja1.Position; // +new Vector(0, Screen.Height);
860                    Add(tuho, 1);
861
862                    foreach (var vihu in GetObjectsWithTag("vihollinen"))
863                    {
864                        if (Vector.Distance(pelaaja1.Position, vihu.Position) < 1600)
865                        {
866                            vihu.Destroy();
867                        }
868                    }
869
870                    Timer.SingleShot(0.1, delegate
871                    {
872                        tuho.Destroy();
873                    });
874                });
875            }
876        }
877    }
878
879
880    void Hyokkaa(PlatformCharacter hahmo)
881    {
882
883
884        PhysicsObject ammus = hahmo.Weapon.Shoot();
885
886        if (ammus != null)
887        {
888            ammus.Tag = "Ase";
889            ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
890            ammus.Image = ammuskuvat[kentannumero - 1];
891            ammus.Size *= 5;
892            Animation anim = null;
893            if (hahmo.Weapon == pistol)
894            {
895                anim = new Animation(ukkeliHyokkaaPistol[kentannumero - 1]);
896                anim.FPS = 8;
897            }
898            if (hahmo.Weapon == rifle)
899            {
900                anim = new Animation(ukkeliHyokkaaRifle[kentannumero - 1]);
901                anim.FPS = 4;
902            }
903
904            hahmo.PlayAnimation(anim);
905
906        }
907
908
909
910
911    }
912
913    void Lyo(PlatformCharacter hahmo)
914    {
915        PhysicsObject Ase = new PhysicsObject(300, 60);
916        Ase.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 120;
917        Ase.LifetimeLeft = TimeSpan.FromSeconds(0.5);
918        Ase.Image = aseenkuvat[kentannumero-1];
919        Ase.CollisionIgnoreGroup = 1;
920        Add(Ase);
921        Animation anim = new Animation(ukkeliHyokkaa[kentannumero - 1]);
922        anim.FPS = 2;
923        Ase.Tag = "Ase";
924        Ase.Angle = pelaaja1.FacingDirection.Angle;
925        hahmo.PlayAnimation(anim);
926
927        Timer ajastin = new Timer();
928        ajastin.Interval = 0.01;
929        ajastin.Timeout += delegate
930        {
931            Ase.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * 240 + new Vector(0, 30);
932        };
933        ajastin.Start();
934    }
935
936
937    void TormaaAnsaan(PhysicsObject hahmo, PhysicsObject tahti)
938    {
939        AloitaPeli();
940
941
942    }
943
944    void LuoElamaLaskuri()
945    {
946        elamaLaskuri = new DoubleMeter(10);
947        elamaLaskuri.MaxValue = 10;
948        elamaLaskuri.LowerLimit += ElamaLoppui;
949
950        ProgressBar elamaPalkki = new ProgressBar(150, 20);
951        elamaPalkki.X = Screen.Left + 150;
952        elamaPalkki.Y = Screen.Top - 20;
953        elamaPalkki.BindTo(elamaLaskuri);
954        Add(elamaPalkki);
955    }
956
957    void ElamaLoppui()
958    {
959        MessageDisplay.Add("Elämät loppuivat, voi voi.");
960        pelaaja1.Animation = null;
961        pelaaja1.AnimFall = null;
962        pelaaja1.AnimJump = null;
963        pelaaja1.AnimWalk = null;
964        pelaaja1.Image = null;
965        Animation kuolinanimaatio = new Animation(kuolinkuvat);
966        kuolinanimaatio.FPS = 4;
967        pelaaja1.PlayAnimation(kuolinanimaatio);
968        //pelaaja1.Animation = new Animation(kuolinkuvat);
969        Timer.SingleShot(1, AloitaPeli);
970    }
971
972    void BossiTarkistaa()
973    {
974        if (Vector.Distance(pelaaja1.Position, bossi.Position) < 1000)
975        {
976            PhysicsObject tallominen = new PhysicsObject(300, 60);
977            tallominen.Image = jalkakuva;
978            tallominen.Position = bossi.Position + new Vector(-50, -200);
979            tallominen.IgnoresCollisionResponse = true;
980            Add(tallominen);
981
982            Timer ajastin = new Timer();
983            ajastin.Interval = 0.01;
984            ajastin.Timeout += delegate
985            {
986                tallominen.Position = bossi.Position + pelaaja1.FacingDirection.GetVector() * 240 + new Vector(0, 30);
987            };
988            ajastin.Start();
989        }
990    }
991
992    void kayttaayokiikaria(PlatformCharacter hahmo)
993    {
994        if (kentannumero != 2 && kentannumero != 5)
995        {
996            return;
997        }
998
999        if (!yokiikarit)
1000        {
1001            kiikarit = new GameObject(Screen.Width * 2, Screen.Height * 2);
1002            kiikarit.Image = kiikarikuva;
1003            //kiikarit.Position = hahmo.Position;
1004            hahmo.Add(kiikarit);
1005            yokiikarit = true;
1006
1007            foreach (var palikka in GetObjectsWithTag("nakymaton"))
1008            {
1009                palikka.IsVisible = true;
1010            }
1011        }
1012        else
1013        {
1014            kiikarit.Destroy();
1015            yokiikarit = false;
1016
1017            foreach (var palikka in GetObjectsWithTag("nakymaton"))
1018            {
1019                palikka.IsVisible = false;
1020            }
1021        }
1022
1023    }
1024
1025
1026}
Note: See TracBrowser for help on using the repository browser.