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

Revision 1885, 19.4 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            MediaPlayer.Stop();
408            Timer.SingleShot(7, Valikko2);
409            naytto.TextColor = Color.Green;
410            Add(naytto);
411            voittoAani.Play();
412            ClearAll();
413
414           
415        }
416
417        if (kohde.Tag.ToString() == "TappavaTaso")
418        {
419
420            Label naytto = new Label("GAME OVER! KUOLIT! YOU FAILED!");
421            naytto.Position = Vector.Zero;
422            MediaPlayer.Stop();
423            Timer.SingleShot(7, Valikko);
424            naytto.TextColor = Color.Red;
425            Add(naytto);
426            pelaaja1.Destroy();
427            spydie.Play();
428            havioAani.Play();
429           
430
431        }
432
433        if (kohde.Tag.ToString() == "kolikko")
434        {
435            pisteLaskuri.Value = pisteLaskuri.Value + 1;
436
437            coinAani.Play();
438            kohde.Destroy();
439        }
440    }
441    void LuoAikaLaskuri()
442    {
443        AlaspainLaskuri = new DoubleMeter(70);
444
445        Timer aikalaskuri = new Timer();
446        aikalaskuri.Interval = 0.1;
447        aikalaskuri.Trigger += LaskeAlaspain;
448        aikalaskuri.Start();
449
450        Label aikaNaytto = new Label();
451        aikaNaytto.X = Screen.Right + -50;
452        aikaNaytto.Y = Screen.Top + -50;
453
454        aikaNaytto.TextColor = Color.White;
455        aikaNaytto.DecimalPlaces = 1;
456        aikaNaytto.BindTo(AlaspainLaskuri);
457        Add(aikaNaytto);
458    }
459    void LaskeAlaspain(Timer timer)
460    {
461        AlaspainLaskuri.Value -= 0.1;
462
463        if (AlaspainLaskuri.Value <= 0)
464        {
465            timer.Stop();
466            Label naytto = new Label("GAME OVER! AIKASI LOPPUI! YOU FAILED!");
467            MediaPlayer.Stop();
468            Timer.SingleShot(7, Valikko);
469            naytto.Position = Vector.Zero;
470            naytto.TextColor = Color.Red;
471            Add(naytto);
472            pelaaja1.Destroy();
473            havioAani.Play();
474           
475           
476        }
477        if (pelaaja1.IsDestroyed)
478        {
479            timer.Stop();
480        }
481    }
482    void KasitteleVihollisenTormays(PhysicsObject vihollinen1, PhysicsObject kohde)
483    {
484        if (kohde.Tag.ToString() == "TappavaTaso")
485        {
486            vihollinen1.Destroy();
487            enemydie.Play();
488        }
489
490    }
491    void LuoLaskuri()
492    {
493        pisteLaskuri = new IntMeter(0);
494
495        Label pisteNaytto = new Label();
496        pisteNaytto.X = Screen.Left + 50;
497        pisteNaytto.Y = Screen.Top - 50;
498        pisteNaytto.TextColor = Color.Yellow;
499
500        pisteNaytto.BindTo(pisteLaskuri);
501        Add(pisteNaytto);
502    }
503    void AmmuAseella()
504    {
505        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
506
507        if (ammus != null)
508        {
509            ammus.Size *= 1;
510            ammus.Color = Color.Yellow;
511            ammus.Tag = "ammus";
512
513        }
514
515
516    }
517    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
518    {
519        if (kohde.Tag.ToString() == "vihollinen1")
520        {
521            kohde.Destroy();
522            enemydie.Play();
523            ammus.Destroy();
524            pisteLaskuri.Value = pisteLaskuri.Value + 5;
525            Explosion rajahdys = new Explosion(5);
526            rajahdys.Position = ammus.Position;
527            rajahdys.ShockwaveColor = Color.Yellow;
528            Add(rajahdys);
529        }
530
531        if (kohde.Tag.ToString() != "vihollinen1")
532        {
533            ammus.Destroy();
534            Explosion rajahdys = new Explosion(5);
535            rajahdys.Position = ammus.Position;
536            rajahdys.ShockwaveColor = Color.Yellow;
537            Add(rajahdys);
538        }
539
540
541        if (kohde.Tag.ToString() == "TNT")
542        {
543            ammus.Destroy();
544            kohde.Destroy();
545            Explosion rajahdys2 = new Explosion(200);
546            rajahdys2.Position = kohde.Position;
547            rajahdys2.ShockwaveColor = Color.Red;
548            rajahdys2.Speed = 1500.0;
549            rajahdys2.Force = 1000;
550            Add(rajahdys2);
551            Explosion rajahdys = new Explosion(5);
552            rajahdys.Position = ammus.Position;
553            rajahdys.ShockwaveColor = Color.Yellow;
554            Add(rajahdys);
555           
556
557        }
558
559
560
561
562    }
563
564    void talontuhous(PhysicsObject TNT, PhysicsObject kohde)
565    {
566        if (kohde.Tag.ToString() == "ammus")
567        {
568            foreach (GameObject item in tuhoutuvat)
569            {
570                item.Destroy();
571                vihollinen1.Destroy();
572                Explosion rajahdys3 = new Explosion(100);
573                rajahdys3.Position = kohde.Position;
574                rajahdys3.ShockwaveColor = Color.Red;
575                rajahdys3.Speed = 1500.0;
576                rajahdys3.Force = 1000;
577                Add(rajahdys3);
578            }
579            TNT.Destroy();
580
581        }
582        if (vihollinen1.IsDestroyed)
583        {
584            enemydie.Play(); 
585        }
586
587    }
588    void AmmuAseella2(Timer Sender)
589    {
590        if (Sender.Tag is AssaultRifle && pelaaja1.IsDestroyed == false)
591        {
592            AssaultRifle vihunAse = (AssaultRifle)Sender.Tag;
593            double etäisyys = Vector.Distance(pelaaja1.Position, vihunAse.AbsolutePosition);
594            Vector suunta = (pelaaja1.Position - vihunAse.Position).Normalize();
595
596           
597
598
599            if (etäisyys < 230)
600            {
601                // Tällä saadaan ratkaistua se ongelma, että x-akselin eri puolilla vihulainen ampuu eri suuntiin
602                //double x = Math.Min(pelaaja1.Position.X - vihunAse.Position.X, vihunAse.Position.X - pelaaja1.Position.X);
603                //double y = Math.Min(pelaaja1.Position.Y - vihunAse.Position.Y, vihunAse.Position.Y - pelaaja1.Position.Y);
604                vihunAse.Angle = suunta.Angle;
605
606
607                PhysicsObject ammus2 = ((AssaultRifle)Sender.Tag).Shoot();
608                if (ammus2 != null)
609                {
610                        ammus2.Size *= 1;
611                        ammus2.Color = Color.Yellow;
612                        ammus2.IgnoresGravity = true;
613
614                }
615            }
616        }
617    }
618    void AmmusOsui2(PhysicsObject ammus2, PhysicsObject kohde)
619    {
620        if (kohde.Tag.ToString() == "pelaaja1")
621        {
622            kohde.Destroy();
623           
624            spydie.Play();
625            MediaPlayer.Stop();
626            Label naytto = new Label("GAME OVER! KUOLIT! YOU FAILED!");
627            naytto.Position = Vector.Zero;
628            naytto.TextColor = Color.Red;
629            Add(naytto);
630            ammus2.Destroy();
631            Timer.SingleShot(7, Valikko);
632            havioAani.Play();
633            Explosion rajahdys = new Explosion(5);
634            rajahdys.Position = ammus2.Position;
635            rajahdys.ShockwaveColor = Color.Yellow;
636            Add(rajahdys);
637        }
638
639        if (kohde.Tag.ToString() != "pelaaja1")
640        {
641            ammus2.Destroy();
642            Explosion rajahdys = new Explosion(5);
643            rajahdys.Position = ammus2.Position;
644            rajahdys.ShockwaveColor = Color.Yellow;
645            Add(rajahdys);
646        }
647
648    }
649
650    protected override void Update(Time time)
651    {
652        base.Update(time);
653    }
654
655}
Note: See TracBrowser for help on using the repository browser.