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

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