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

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