source: 2011/23/vikeisal/SpyInTheBase/SpyInTheBase/SpyInTheBase/Peli.cs @ 1878

Revision 1878, 19.2 KB checked in by vikeisal, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using SpyInTheBase;
9
10public class Peli : PhysicsGame
11{
12    const double nopeus = 200;
13    const double hyppyNopeus = 425;
14    const int RUUDUN_KOKO = 40;
15    DoubleMeter AlaspainLaskuri;
16    PlatformCharacter pelaaja1;
17    AssaultRifle pyssy;
18    Image pelaajanKuva = LoadImage("spy");
19    Image tahtiKuva = LoadImage("intelligents");
20    Image vihollisenKuva = LoadImage("enemy");
21    Image TasoKuva = LoadImage("maa");
22    Image TasoKuva2 = LoadImage("maa2");
23    Image KolikkoKuva = LoadImage("enemy");
24    Image metalli = LoadImage("metalli");
25    Image puu2 = LoadImage("puu2");
26    Image TappavaTasokuva = LoadImage("tappavataso");
27    Image ikkuna = LoadImage("ikkuna");
28    Image TNT = LoadImage("TNT");
29    Image piiloTNT = LoadImage("piiloTNT");
30    SoundEffect voittoAani = LoadSoundEffect("victory");
31    SoundEffect havioAani = LoadSoundEffect("lose");
32    SoundEffect enemydie = LoadSoundEffect("enemydie");
33    SoundEffect coinAani = LoadSoundEffect("coinaani");
34    SoundEffect spydie = LoadSoundEffect("spydie");
35     
36
37    IntMeter pisteLaskuri;
38    List<Label> valikonKohdat;
39    PhysicsObject vihollinen1;
40
41    List<GameObject> tuhoutuvat;
42
43    //PhysicsObject metalli;
44    //PhysicsObject metalli2;
45
46    public override void Begin()
47    {
48        tuhoutuvat = new List<GameObject>();
49       
50
51        Gravity = new Vector(0, -1250);
52        SetWindowSize(1024, 768);
53        //luoKentta();
54        lisaaNappaimet();
55        LuoLaskuri();
56
57        Camera.Follow(pelaaja1);
58        Camera.ZoomFactor = 1.0;
59        Camera.StayInLevel = true;
60        Valikko();
61    }
62
63    void Valikko()
64    {
65        ClearAll();
66
67        valikonKohdat = new List<Label>();
68        Level.BackgroundColor = Color.Black;
69        Label kohta1 = new Label("Aloita uusi peli");
70        kohta1.Position = new Vector(0, 40);
71        kohta1.TextColor = Color.White;
72        valikonKohdat.Add(kohta1);
73
74        Label kohta2 = new Label("Lopeta");
75        kohta2.Position = new Vector(0, -40);
76        kohta2.TextColor = Color.White;
77        valikonKohdat.Add(kohta2);
78
79        foreach (Label valikonKohta in valikonKohdat)
80        {
81            Add(valikonKohta);
82        }
83
84        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
85        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
86
87        Mouse.IsCursorVisible = true;
88        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
89        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
90
91    }
92    void ValikossaLiikkuminen2(AnalogState hiirenTila)
93    {
94        foreach (Label kohta in valikonKohdat)
95        {
96            if (Mouse.IsCursorOn(kohta))
97            {
98                kohta.TextColor = Color.Red;
99            }
100            else
101            {
102                kohta.TextColor = Color.White;
103            }
104
105        }
106    }
107    void AloitaPeli()
108    {
109        ClearAll();
110        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
111        Gravity = new Vector(0, -1250);
112        LuoAikaLaskuri();
113        luoKentta();
114        lisaaNappaimet();
115        LuoLaskuri();
116        Camera.Follow(pelaaja1);
117        Camera.ZoomFactor = 1.0;
118        Camera.StayInLevel = true;
119    }
120    void Valikko2()
121    {
122        ClearAll();
123
124        valikonKohdat = new List<Label>();
125
126        Label kohta1 = new Label("Aloita uusi peli");
127        kohta1.Position = new Vector(0, 40);
128        kohta1.TextColor = Color.White;
129        valikonKohdat.Add(kohta1);
130
131        Label kohta2 = new Label("Seuraava taso");
132        kohta2.Position = new Vector(0, 100);
133        kohta2.TextColor = Color.White;
134        valikonKohdat.Add(kohta2);
135
136        Label kohta3 = new Label("Lopeta");
137        kohta3.Position = new Vector(0, -40);
138        kohta3.TextColor = Color.White;
139        valikonKohdat.Add(kohta3);
140
141        foreach (Label valikonKohta in valikonKohdat)
142        {
143            Add(valikonKohta);
144        }
145
146        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
147        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, SeuraavaTaso, null);
148        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
149        Mouse.IsCursorVisible = true;
150        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
151        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
152
153    }
154    void ValikossaLiikkuminen(AnalogState hiirenTila)
155    {
156        foreach (Label kohta in valikonKohdat)
157        {
158            if (Mouse.IsCursorOn(kohta))
159            {
160                kohta.TextColor = Color.Red;
161            }
162            else
163            {
164                kohta.TextColor = Color.White;
165            }
166
167        }
168    }
169    void SeuraavaTaso()
170    {
171        ClearAll();
172        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
173        Gravity = new Vector(0, -1250);
174        LuoAikaLaskuri();
175        luoKentta2();
176        lisaaNappaimet();
177        LuoLaskuri();
178        Camera.Follow(pelaaja1);
179        Camera.ZoomFactor = 1.0;
180        Camera.StayInLevel = true;
181    }
182    void Lopeta()
183    {
184        Exit();
185    }
186    void luoKentta()
187    {
188        tuhoutuvat.Clear();
189        TileMap kentta = TileMap.FromFile("kentta1.txt");
190        kentta['#'] = lisaaTaso;
191        kentta['*'] = lisaaintelligents;
192        kentta['N'] = lisaaPelaaja;
193        kentta['M'] = lisaaVihollinen;
194        kentta['_'] = lisaaTappavaTaso;
195        kentta['-'] = lisaaTaso2;
196        kentta['.'] = lisaaKolikko;
197        kentta['"'] = lisaametalli;
198        kentta['&'] = lisaapuu;
199        kentta['='] = lisaapuu2;
200        kentta['+'] = lisaametalli2;
201        kentta['@'] = lisaaikkuna;
202        kentta['T'] = lisaaTNT;
203        kentta['P'] = lisaapiiloTNT;
204        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
205        Level.CreateBorders();
206        Level.BackgroundColor = Color.Black;
207        Level.Background.CreateStars();
208        MediaPlayer.Play("taustamusiikki");
209        MessageDisplay.TextColor = Color.White;
210    }
211    void luoKentta2()
212    {
213        tuhoutuvat.Clear();
214        TileMap kentta2 = TileMap.FromFile("kentta2.txt");
215        kentta2['#'] = lisaaTaso;
216        kentta2['*'] = lisaaintelligents;
217        kentta2['N'] = lisaaPelaaja;
218        kentta2['M'] = lisaaVihollinen;
219        kentta2['_'] = lisaaTappavaTaso;
220        kentta2['-'] = lisaaTaso2;
221        kentta2['.'] = lisaaKolikko;
222        kentta2['"'] = lisaametalli;
223        kentta2['&'] = lisaapuu;
224        kentta2['='] = lisaapuu2;
225        kentta2['+'] = lisaametalli2;
226        kentta2['@'] = lisaaikkuna;
227        kentta2['T'] = lisaaTNT;
228        kentta2['P'] = lisaapiiloTNT;
229        kentta2.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
230        Level.CreateBorders();
231        Level.BackgroundColor = Color.Black;
232        Level.Background.CreateStars();
233        MediaPlayer.Play("taustamusiikki");
234    }
235
236    PhysicsObject lisaaTaso2()
237    {
238        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
239        taso2.Image = TasoKuva2;
240        taso2.Tag = "maa2";
241        return taso2;
242    }
243    PhysicsObject lisaaTaso()
244    {
245        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
246        taso.Image = TasoKuva;
247        taso.Tag = "maa";
248        return taso;
249    }
250    PhysicsObject lisaaTappavaTaso()
251    {
252        PhysicsObject TappavaTaso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO, Shape.Triangle);
253        TappavaTaso.Image = TappavaTasokuva;
254        TappavaTaso.Tag = "TappavaTaso";
255        return TappavaTaso;
256    }
257    PhysicsObject lisaaintelligents()
258    {
259        PhysicsObject intelligents = PhysicsObject.CreateStaticObject(39.9, 30);
260        intelligents.Image = tahtiKuva;
261        intelligents.Tag = "intelligents";
262        return intelligents;
263    }
264    PhysicsObject lisaaKolikko()
265    {
266        PhysicsObject kolikko = PhysicsObject.CreateStaticObject(10, 10);
267        kolikko.Image = LoadImage("coin");
268        kolikko.Tag = "kolikko";
269        return kolikko;
270    }
271    PhysicsObject lisaametalli()
272    {
273        PhysicsObject metalli = PhysicsObject.CreateStaticObject(40, 40);
274        metalli.Image = LoadImage("metalli");
275        metalli.Tag = "metalli";
276       
277        return metalli;
278    }
279    PhysicsObject lisaametalli2()
280    {
281        PhysicsObject metalli2 = PhysicsObject.CreateStaticObject(40, 40);
282        metalli2.Image = LoadImage("metalli2");
283        metalli2.Tag = "metalli2";
284        return metalli2;
285       
286    }
287    PhysicsObject lisaaikkuna()
288    {
289        PhysicsObject ikkuna = PhysicsObject.CreateStaticObject(40, 40);
290        ikkuna.Image = LoadImage("ikkuna");
291        ikkuna.Tag = "ikkuna";
292        tuhoutuvat.Add(ikkuna);
293        return ikkuna;
294    }
295    PhysicsObject lisaaTNT()
296    {
297        PhysicsObject TNT = PhysicsObject.CreateStaticObject(40, 40);
298        TNT.Image = LoadImage("TNT");
299        AddCollisionHandler(TNT, talontuhous);
300        TNT.Tag = "TNT";
301        return TNT;
302    }
303    PhysicsObject lisaapiiloTNT()
304    {
305        PhysicsObject piiloTNT = PhysicsObject.CreateStaticObject(40, 40);
306        piiloTNT.Image = LoadImage("piiloTNT");
307        piiloTNT.Tag = "piiloTNT";
308        tuhoutuvat.Add(piiloTNT);
309        return piiloTNT;
310    }
311
312    GameObject lisaapuu()
313    {
314        GameObject puu = new GameObject(90, 100);
315        puu.Shape = Shape.Triangle;
316        puu.Image = LoadImage("puu");
317        puu.Tag = "puu";
318        Add(puu, -3);
319        return puu;
320    }
321    GameObject lisaapuu2()
322    {
323        GameObject puu2 = new GameObject(40, 60);
324
325        puu2.Image = LoadImage("puu2");
326        puu2.Tag = "puu2";
327
328        Add(puu2, -3);
329        return puu2;
330    }
331    PlatformCharacter lisaaPelaaja()
332    {
333        pelaaja1 = new PlatformCharacter(30, 50);
334        pelaaja1.Mass = 4.0;
335        pelaaja1.Image = pelaajanKuva;
336        pelaaja1.Tag = "pelaaja1";
337        pelaaja1.Weapon = new AssaultRifle(0, 5);
338        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
339
340
341        AddCollisionHandler(pelaaja1, osuTahteen);
342        return pelaaja1;
343    }
344    PhysicsObject lisaaVihollinen()
345    {
346        vihollinen1 = new PhysicsObject(70, 60);
347
348        vihollinen1.Mass = 10.0;
349        AddCollisionHandler(vihollinen1, KasitteleVihollisenTormays);
350        vihollinen1.Tag = "vihollinen1";
351        vihollinen1.Shape = Shape.Triangle;
352        pyssy = new AssaultRifle(0, -7);
353        vihollinen1.Add(pyssy);
354        Timer ajastin = new Timer();
355        ajastin.Interval = 0.1;
356        ajastin.Trigger += AmmuAseella2;
357        pyssy.ProjectileCollision = AmmusOsui2;
358        ajastin.Tag = pyssy;
359        pyssy.Tag = "pyssy";
360        ajastin.Start();
361        vihollinen1.Move(new Vector(vihollinen1.X - 1, vihollinen1.Y));
362
363
364        vihollinen1.Image = vihollisenKuva;
365        Add(vihollinen1);
366        return vihollinen1;
367    }
368
369   
370    void lisaaNappaimet()
371    {
372        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
373
374
375        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
376        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
377        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
378        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmuAseella, "Ammu");
379
380    }
381    void liikuta(PlatformCharacter hahmo, double nopeus)
382    {
383
384        if (nopeus < 0)
385        {
386            pelaaja1.Image = Image.Mirror(pelaajanKuva);
387        }
388        else
389        {
390            pelaaja1.Image = pelaajanKuva;
391        }
392        hahmo.Walk(nopeus);
393    }
394    void hyppaa(PlatformCharacter hahmo, double nopeus)
395    {
396        hahmo.Jump(nopeus);
397    }
398    void osuTahteen(PhysicsObject hahmo, PhysicsObject kohde)
399    {
400        if (kohde.Tag.ToString() == "intelligents")
401        {
402            kohde.Destroy();
403
404            Label naytto = new Label("Kaappasit vihollisen tiedot!");
405            MediaPlayer.Stop();
406            naytto.Position = Vector.Zero;
407            naytto.TextColor = Color.Green;
408            Add(naytto);
409            voittoAani.Play();
410            ClearAll();
411
412            Valikko2();
413        }
414
415        if (kohde.Tag.ToString() == "TappavaTaso")
416        {
417
418            Label naytto = new Label("GAME OVER! KUOLIT! YOU FAILED!");
419            naytto.Position = Vector.Zero;
420            naytto.TextColor = Color.Red;
421            Add(naytto);
422            pelaaja1.Destroy();
423            spydie.Play();
424            havioAani.Play();
425            Valikko();
426
427        }
428
429        if (kohde.Tag.ToString() == "kolikko")
430        {
431            pisteLaskuri.Value = pisteLaskuri.Value + 1;
432
433            coinAani.Play();
434            kohde.Destroy();
435        }
436    }
437    void LuoAikaLaskuri()
438    {
439        AlaspainLaskuri = new DoubleMeter(70);
440
441        Timer aikalaskuri = new Timer();
442        aikalaskuri.Interval = 0.1;
443        aikalaskuri.Trigger += LaskeAlaspain;
444        aikalaskuri.Start();
445
446        Label aikaNaytto = new Label();
447        aikaNaytto.X = Screen.Right + -50;
448        aikaNaytto.Y = Screen.Top + -50;
449
450        aikaNaytto.TextColor = Color.White;
451        aikaNaytto.DecimalPlaces = 1;
452        aikaNaytto.BindTo(AlaspainLaskuri);
453        Add(aikaNaytto);
454    }
455    void LaskeAlaspain(Timer timer)
456    {
457        AlaspainLaskuri.Value -= 0.1;
458
459        if (AlaspainLaskuri.Value <= 0)
460        {
461            timer.Stop();
462            Label naytto = new Label("GAME OVER! AIKASI LOPPUI! YOU FAILED!");
463            MediaPlayer.Stop();
464            naytto.Position = Vector.Zero;
465            naytto.TextColor = Color.Red;
466            Add(naytto);
467            pelaaja1.Destroy();
468            havioAani.Play();
469            Valikko();
470           
471        }
472        if (pelaaja1.IsDestroyed)
473        {
474            timer.Stop();
475        }
476    }
477    void KasitteleVihollisenTormays(PhysicsObject vihollinen1, PhysicsObject kohde)
478    {
479        if (kohde.Tag.ToString() == "TappavaTaso")
480        {
481            vihollinen1.Destroy();
482            enemydie.Play();
483        }
484
485    }
486    void LuoLaskuri()
487    {
488        pisteLaskuri = new IntMeter(0);
489
490        Label pisteNaytto = new Label();
491        pisteNaytto.X = Screen.Left + 50;
492        pisteNaytto.Y = Screen.Top - 50;
493        pisteNaytto.TextColor = Color.Yellow;
494
495        pisteNaytto.BindTo(pisteLaskuri);
496        Add(pisteNaytto);
497    }
498    void AmmuAseella()
499    {
500        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
501
502        if (ammus != null)
503        {
504            ammus.Size *= 1;
505            ammus.Color = Color.Yellow;
506            ammus.Tag = "ammus";
507
508        }
509
510
511    }
512    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
513    {
514        if (kohde.Tag.ToString() == "vihollinen1")
515        {
516            kohde.Destroy();
517            enemydie.Play();
518            ammus.Destroy();
519            pisteLaskuri.Value = pisteLaskuri.Value + 5;
520            Explosion rajahdys = new Explosion(5);
521            rajahdys.Position = ammus.Position;
522            rajahdys.ShockwaveColor = Color.Yellow;
523            Add(rajahdys);
524        }
525
526        if (kohde.Tag.ToString() != "vihollinen1")
527        {
528            ammus.Destroy();
529            Explosion rajahdys = new Explosion(5);
530            rajahdys.Position = ammus.Position;
531            rajahdys.ShockwaveColor = Color.Yellow;
532            Add(rajahdys);
533        }
534
535
536        if (kohde.Tag.ToString() == "TNT")
537        {
538            ammus.Destroy();
539            kohde.Destroy();
540            Explosion rajahdys2 = new Explosion(200);
541            rajahdys2.Position = kohde.Position;
542            rajahdys2.ShockwaveColor = Color.Red;
543            rajahdys2.Speed = 1500.0;
544            rajahdys2.Force = 1000;
545            Add(rajahdys2);
546            Explosion rajahdys = new Explosion(5);
547            rajahdys.Position = ammus.Position;
548            rajahdys.ShockwaveColor = Color.Yellow;
549            Add(rajahdys);
550           
551
552        }
553
554
555
556
557    }
558
559    void talontuhous(PhysicsObject TNT, PhysicsObject kohde)
560    {
561        if (kohde.Tag.ToString() == "ammus")
562        {
563            foreach (GameObject item in tuhoutuvat)
564            {
565                item.Destroy();
566                vihollinen1.Destroy();
567                Explosion rajahdys3 = new Explosion(100);
568                rajahdys3.Position = kohde.Position;
569                rajahdys3.ShockwaveColor = Color.Red;
570                rajahdys3.Speed = 1500.0;
571                rajahdys3.Force = 1000;
572                Add(rajahdys3);
573            }
574            TNT.Destroy();
575
576        }
577        if (vihollinen1.IsDestroyed)
578        {
579            enemydie.Play(); 
580        }
581
582    }
583    void AmmuAseella2(Timer Sender)
584    {
585        if (Sender.Tag is AssaultRifle)
586        {
587            AssaultRifle vihunAse = (AssaultRifle)Sender.Tag;
588            double etäisyys = Vector.Distance(pelaaja1.Position, vihunAse.AbsolutePosition);
589            Vector suunta = (pelaaja1.Position - vihunAse.Position).Normalize();
590
591           
592
593
594            if (etäisyys < 230)
595            {
596                // Tällä saadaan ratkaistua se ongelma, että x-akselin eri puolilla vihulainen ampuu eri suuntiin
597                //double x = Math.Min(pelaaja1.Position.X - vihunAse.Position.X, vihunAse.Position.X - pelaaja1.Position.X);
598                //double y = Math.Min(pelaaja1.Position.Y - vihunAse.Position.Y, vihunAse.Position.Y - pelaaja1.Position.Y);
599                vihunAse.Angle = suunta.Angle;
600
601
602                PhysicsObject ammus2 = ((AssaultRifle)Sender.Tag).Shoot();
603                if (ammus2 != null)
604                {
605                        ammus2.Size *= 1;
606                        ammus2.Color = Color.Yellow;
607                        ammus2.IgnoresGravity = true;
608
609                }
610            }
611        }
612    }
613    void AmmusOsui2(PhysicsObject ammus2, PhysicsObject kohde)
614    {
615        if (kohde.Tag.ToString() == "pelaaja1")
616        {
617            kohde.Destroy();
618            spydie.Play();
619            MediaPlayer.Stop();
620            Label naytto = new Label("GAME OVER! KUOLIT! YOU FAILED!");
621            naytto.Position = Vector.Zero;
622            naytto.TextColor = Color.Red;
623            Add(naytto);
624            ammus2.Destroy();
625            Valikko();
626            havioAani.Play();
627            Explosion rajahdys = new Explosion(5);
628            rajahdys.Position = ammus2.Position;
629            rajahdys.ShockwaveColor = Color.Yellow;
630            Add(rajahdys);
631        }
632
633        if (kohde.Tag.ToString() != "pelaaja1")
634        {
635            ammus2.Destroy();
636            Explosion rajahdys = new Explosion(5);
637            rajahdys.Position = ammus2.Position;
638            rajahdys.ShockwaveColor = Color.Yellow;
639            Add(rajahdys);
640        }
641
642    }
643
644    protected override void Update(Time time)
645    {
646        base.Update(time);
647    }
648
649}
Note: See TracBrowser for help on using the repository browser.