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

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