source: 2012/24/AkiR/Fight the Rambo/Fight the Rambo/Fight the Rambo/Peli.cs @ 3042

Revision 3042, 18.4 KB checked in by akosrahi, 9 years ago (diff)

viimeistely kesken

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Peli : PhysicsGame
11{
12    const double nopeus = 300;
13    const double hyppyNopeus = 750;
14    const int RUUDUN_KOKO = 30;
15    ScoreList topLista = new ScoreList(10, false, 0);
16    PlatformCharacter pelaaja1;
17    GameObject pelaajanpaikka;
18    PlatformCharacter vihollinen;
19    PlatformCharacter Maali;
20    PlatformCharacter Piikkilanka;
21    List<Label> valikonKohdat;
22    IntMeter ammusLaskuri;
23    Image tekstinkuva = LoadImage("TEKSTI");
24    Image piikkilangankuva = LoadImage("spikewire");
25    Image pelaajanKuva = LoadImage("rambo2");
26    Image vihollisenkuva = LoadImage("Nuhasotilas");
27    Image maalinkuva = LoadImage("goal");
28    Image LisaaPelaajanKentallekuvan = LoadImage("sponer");
29    Image maankuva = LoadImage("ground");
30    Image aidankuva = LoadImage("fence");
31    Image KullanKuva = LoadImage("Kulta");
32    Image AmmuksenKuva = LoadImage("Ammus");
33    Image taustakuva = LoadImage("tausta");
34    Image laakekuva = LoadImage("laake");
35    SoundEffect eliminointiAani = LoadSoundEffect("kill");
36    SoundEffect alkuaani = LoadSoundEffect("GameStarts");
37    SoundEffect Ammuskerattu = LoadSoundEffect("yes");
38   
39   
40    Image[] paikallaanVasemmalle = LoadImages("rambo2", "rambo3");
41    Image[] paikallaanOikealle;
42    Image[] kavelyVasemmalle = LoadImages("rambo2", "rambo3");
43    Image[] kavelyOikealle;
44
45    Image[] VihollinenpaikallaanVasemmalle = LoadImages("Nuhasotilas1", "Nuhasotilas");
46    Image[] VihollinenpaikallaanOikealle;
47    Image[] VihollinenKavelyVasemmalle = LoadImages("Nuhasotilas1","Nuhasotilas");
48    Image[] VihollinenKavelyOikealle;
49
50
51    int pisteet = 0;
52
53    IntMeter pisteLaskuri;
54
55    DoubleMeter voimaMittari;
56
57    int kenttaNro = 1;
58
59    public override void Begin()
60    {
61        ClearAll();
62        if (DataStorage.Exists("pisteet.xml"))
63            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
64        Valikko();
65    }
66
67    void SeuraavaKentta(int kentanNro)
68    {
69        if(pisteLaskuri != null)
70            pisteet = pisteLaskuri.Value;
71        ClearAll();
72
73        // Hypyn jälkeen kävelyanimaatio ei toimi, jypelin bugi??
74        paikallaanOikealle = Image.Mirror(paikallaanVasemmalle);
75        kavelyOikealle = Image.Mirror(kavelyVasemmalle);
76
77        VihollinenpaikallaanOikealle = Image.Mirror(VihollinenpaikallaanVasemmalle);
78        VihollinenKavelyOikealle = Image.Mirror(VihollinenKavelyVasemmalle);
79
80        Gravity = new Vector(0, -1000);
81        alkuaani.Play();
82
83       
84
85       
86        LuoLaskuri();
87        LisaavoimaMittari();
88        if (kentanNro == 1) luoKentta1();
89        else if (kentanNro == 2) LuoKentta2();
90        else if (kentanNro == 3) LuoKentta3();
91        else if (kentanNro == 4) LuoKentta4();
92        else if (kentanNro > 4) LopetaPeli();
93        lisaaNappaimet();
94        LuoAmmusLaskuri();
95       
96        Camera.Follow(pelaaja1);
97        Camera.ZoomFactor = 2.0;
98        Camera.StayInLevel = true;
99
100
101    }
102
103    void luoKentta1()
104    {
105        lisaaPelaaja(15);
106        MediaPlayer.Play("tunnari");
107
108        TileMap kentta = TileMap.FromFile("kentta1.txt");
109        kentta['G'] = lisaaMaali;
110        kentta['E'] = lisaaVihollinen;
111        kentta['#'] = lisaaTaso;
112        kentta['N'] = lisaapelaajanPaikka;
113        kentta['S'] = LisaaPiikkilanka;
114        kentta['M'] = Lisaamaa;
115        kentta['A'] = LisaaAmmusPaketti;
116        kentta['T'] = LisaaKulta;
117        kentta['X'] = Lisaaseina;
118        kentta['H'] = Lisaalaake;
119        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
120
121        pelaaja1.Position = pelaajanpaikka.Position;
122
123        Level.CreateBorders();
124        Level.Background.CreateGradient(Color.Brown, Color.Blue); 
125        Level.Background.Image = taustakuva;
126    }
127    void LuoKentta2()
128    {
129        lisaaPelaaja(20);
130        MediaPlayer.Play("tunnari");
131
132        TileMap kentta = TileMap.FromFile("TextFile2.txt");
133        kentta['G'] = lisaaMaali;
134        kentta['E'] = lisaaVihollinen;
135        kentta['#'] = Lisaamaa;
136        kentta['N'] = lisaapelaajanPaikka;
137        kentta['S'] = LisaaPiikkilanka;
138        kentta['A'] = LisaaAmmusPaketti;
139        kentta['X'] = Lisaaseina;
140        kentta['T'] = LisaaKulta;
141        kentta['H'] = Lisaalaake;
142        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
143
144        pelaaja1.Position = pelaajanpaikka.Position;
145
146        Level.CreateBorders();
147        Level.Background.CreateGradient(Color.Brown, Color.Blue);
148        Level.Background.Image = taustakuva;
149    }
150
151
152    void LuoKentta3()
153    {
154        lisaaPelaaja(20);
155        MediaPlayer.Play("tunnari");
156
157        TileMap kentta = TileMap.FromFile("TextFile3.txt");
158        kentta['G'] = lisaaMaali;
159        kentta['E'] = lisaaVihollinen;
160        kentta['#'] = Lisaamaa;
161        kentta['N'] = lisaapelaajanPaikka;
162        kentta['S'] = LisaaPiikkilanka;
163        kentta['A'] = LisaaAmmusPaketti;
164        kentta['X'] = Lisaaseina;
165        kentta['T'] = LisaaKulta;
166        kentta['H'] = Lisaalaake;
167        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
168
169        pelaaja1.Position = pelaajanpaikka.Position;
170
171        Level.CreateBorders();
172        Level.Background.CreateGradient(Color.Brown, Color.Blue);
173        Level.Background.Image = taustakuva;
174    }
175    void LuoKentta4()
176    {
177        lisaaPelaaja(20);
178        MediaPlayer.Play("tunnari");
179
180        TileMap kentta = TileMap.FromFile("TextFile1.txt");
181        kentta['G'] = lisaaMaali;
182        kentta['E'] = lisaaVihollinen;
183        kentta['#'] = Lisaamaa;
184        kentta['N'] = lisaapelaajanPaikka;
185        kentta['S'] = LisaaPiikkilanka;
186        kentta['A'] = LisaaAmmusPaketti;
187        kentta['X'] = Lisaaseina;
188        kentta['T'] = LisaaKulta;
189        kentta['H'] = Lisaalaake;
190        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
191
192        pelaaja1.Position = pelaajanpaikka.Position;
193
194        Level.CreateBorders();
195        Level.Background.CreateGradient(Color.Blue, Color.Black);
196        Level.Background.Image = taustakuva;
197
198    }
199    GameObject lisaapelaajanPaikka()
200    {
201        pelaajanpaikka = new GameObject(100, 150);
202        pelaajanpaikka.Image = LisaaPelaajanKentallekuvan;
203        return pelaajanpaikka;
204    }
205
206    PhysicsObject lisaaTaso()
207    {
208        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
209        taso.Color = Color.Black;
210        return taso;
211    }
212
213    PlatformCharacter lisaaPelaaja(int ammukset)
214    {
215        pelaaja1 = new PlatformCharacter(30, 60);
216        pelaaja1.Mass = 8.00;
217        pelaaja1.Image = pelaajanKuva;
218
219        pelaaja1.Weapon = new AssaultRifle(50, 20);
220        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
221        pelaaja1.Weapon.Ammo.Value = ammukset;
222        pelaaja1.Weapon.Y = -2;
223        pelaaja1.Weapon.X = 2.3;
224
225        pelaaja1.RightIdleAnimation = new Animation(paikallaanVasemmalle);
226        pelaaja1.LeftIdleAnimation = new Animation(paikallaanOikealle);
227        pelaaja1.RightWalkingAnimation = new Animation(kavelyVasemmalle);
228        pelaaja1.LeftWalkingAnimation = new Animation(kavelyOikealle);
229        pelaaja1.LeftWalkingAnimation.FPS = 10;
230        pelaaja1.RightWalkingAnimation.FPS = 10;
231        pelaaja1.LeftIdleAnimation.FPS = 10;
232        pelaaja1.RightIdleAnimation.FPS = 10;
233
234        Add(pelaaja1, 1);
235        AddCollisionHandler(pelaaja1, "vihollinen", CollisionHandler.AddMeterValue(voimaMittari, -10));
236        AddCollisionHandler(pelaaja1, "Ansa", CollisionHandler.AddMeterValue(voimaMittari, -20));
237       
238        Vector oikea = new Vector(10000, 50);
239        Vector vaara = new Vector(1000, 500);
240        AddCollisionHandler(pelaaja1, "vihollinen", CollisionHandler.HitTarget(oikea));
241        AddCollisionHandler(pelaaja1, "Ansa", CollisionHandler.HitTarget(vaara));
242       
243        return pelaaja1;
244    }
245
246    void lisaaNappaimet()
247    {
248        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
249        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Poistu pelistä");
250
251        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
252        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
253        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
254        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
255        Keyboard.Listen(Key.W, ButtonState.Down, TahtaaYlos, "Tähtää ylös rynnäkkökiväärillä");
256        Keyboard.Listen(Key.S, ButtonState.Down, TahtaaAlas, "Tähtää alas rynnäkkökiväärillä");
257    }
258
259    void liikuta(PlatformCharacter hahmo, double nopeus)
260    {
261        hahmo.Walk(nopeus);
262    }
263
264    void hyppaa(PlatformCharacter hahmo, double nopeus)
265    {
266        hahmo.Jump(1000.0);
267    }
268
269
270
271    void AmmuAseella()
272    {
273        PhysicsObject Ammus = pelaaja1.Weapon.Shoot();
274        if (Ammus != null)
275        {
276            Ammus.Size *= 0.5;
277            Ammus.IgnoresGravity = true;
278            Ammus.MaximumLifetime = TimeSpan.FromSeconds(4.1);
279            AddCollisionHandler(Ammus, KasitteleVihollinenKuoli);
280        }
281    }
282    void AmmusOsui(PhysicsObject Ammus, PhysicsObject Kohde)
283    {
284       
285        Ammus.Destroy();
286    }
287
288
289
290
291
292    PlatformCharacter lisaaVihollinen()
293    {
294        PlatformCharacter vihollinen = new PlatformCharacter(40, 80);
295        vihollinen.Mass = 3.5;
296        vihollinen.Image = vihollisenkuva;
297        vihollinen.Tag = "vihollinen";
298        vihollinen.IgnoresGravity = false;
299
300        vihollinen.LeftIdleAnimation = new Animation(VihollinenpaikallaanVasemmalle);
301        vihollinen.RightIdleAnimation = new Animation(VihollinenpaikallaanOikealle);
302        vihollinen.LeftWalkingAnimation = new Animation(VihollinenKavelyVasemmalle);
303        vihollinen.RightWalkingAnimation = new Animation(VihollinenKavelyOikealle);
304        vihollinen.CanMoveOnAir = true;
305        vihollinen.LeftWalkingAnimation.FPS = 10;
306        vihollinen.RightWalkingAnimation.FPS = 10;
307        vihollinen.LeftIdleAnimation.FPS = 10;
308        vihollinen.RightIdleAnimation.FPS = 10;
309       
310     
311        FollowerBrain seuraajanAivot = new FollowerBrain();
312        seuraajanAivot.Target = pelaaja1;
313        seuraajanAivot.Speed = 100;
314        seuraajanAivot.StopWhenTargetClose = false;
315        seuraajanAivot.TargetFollowDistance = 30;
316        seuraajanAivot.FollowAlways = true;
317        seuraajanAivot.Active = true;
318        vihollinen.Brain = seuraajanAivot;
319
320        AddCollisionHandler(vihollinen, "seina", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { vihollinen.Jump(2000);});
321
322
323        return vihollinen;
324    }
325   
326
327   
328
329    void KasitteleVihollinenKuoli(PhysicsObject Ammus, PhysicsObject kohde)
330    {
331        if (kohde.Tag.ToString() == "vihollinen")
332        {
333            eliminointiAani.Play();
334            pisteLaskuri.Value += 50;
335            kohde.Destroy();
336            MessageDisplay.Add("vihollinen eliminoitu");
337
338        }
339
340    }
341    PhysicsObject lisaaMaali()
342    {
343        PhysicsObject Maali = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
344        Maali.Image = maalinkuva;
345        AddCollisionHandler(Maali, KasitteleMaaliinTulo);
346        return Maali;
347
348    }
349
350    PhysicsObject LisaaAmmusPaketti()
351    {
352        PhysicsObject AmmusPaketti = new PhysicsObject(40, 30);
353        AmmusPaketti.Image = AmmuksenKuva;
354        AmmusPaketti.Mass = (50);
355        AddCollisionHandler(pelaaja1, AmmusPaketti, KeraaAmmus);
356
357
358        return AmmusPaketti;
359
360    }
361
362    PhysicsObject LisaaKulta()
363    {
364        PhysicsObject Kulta = new PhysicsObject(70, 30);
365        Kulta.Image = KullanKuva;
366        Kulta.Mass = (50);
367        Kulta.Tag = "kulta";
368        AddCollisionHandler(pelaaja1, Kulta, Keraakulta);
369
370        return Kulta;
371    }
372
373    PhysicsObject Lisaalaake()
374    {
375        PhysicsObject Laake = new PhysicsObject(70, 30);
376        Laake.Image = laakekuva;
377        Laake.Mass = (50);
378        Laake.Tag = "laake";
379        AddCollisionHandler(pelaaja1, Laake, Keraalaake);
380
381        return Laake;
382    }
383
384    void KeraaAmmus(IPhysicsObject pelaaja1, IPhysicsObject AmmusPaketti)
385    {
386        (pelaaja1 as PlatformCharacter).Weapon.Ammo.Value += 5;
387        MessageDisplay.Add("5 ammusta lisätty");
388        Ammuskerattu.Play();
389        AmmusPaketti.Destroy();
390       
391
392    }
393
394
395    void Keraakulta(IPhysicsObject tormaaja, IPhysicsObject kohde)
396    {
397        pisteLaskuri.Value += 100;
398        MessageDisplay.Add("100$");
399        kohde.Destroy();
400    }
401
402    void Keraalaake(IPhysicsObject tormaaja, IPhysicsObject kohde)
403    {
404        voimaMittari.Value += 25;
405        MessageDisplay.Add("Terveyttä nostettu");
406        kohde.Destroy();
407    }
408
409    void KasitteleMaaliinTulo(PhysicsObject Maali, PhysicsObject kohde)
410    {
411        if (kohde == pelaaja1)
412        {
413            kenttaNro++;
414            SeuraavaKentta(kenttaNro);
415        }
416    }
417    void Valikko()
418    {
419        ClearAll();
420
421        Level.Background.Image = tekstinkuva;
422        valikonKohdat = new List<Label>();
423
424        Label kohta1 = new Label("Aloita kenttä");
425        kohta1.Position = new Vector(300, -20);
426        valikonKohdat.Add(kohta1);
427
428        Label kohta2 = new Label("Lopeta");
429        kohta2.Position = new Vector(300, -60);
430        valikonKohdat.Add(kohta2);
431       
432
433        foreach (Label valikonKohta in valikonKohdat)
434        {
435            Add(valikonKohta);
436        }
437
438        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, SeuraavaKentta, null, kenttaNro);
439        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
440
441        Mouse.IsCursorVisible = true;
442        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
443        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
444    }
445
446    void ValikossaLiikkuminen(AnalogState hiirenTila)
447    {
448        foreach (Label kohta in valikonKohdat)
449        {
450            if (Mouse.IsCursorOn(kohta))
451            {
452                kohta.TextColor = Color.Yellow;
453            }
454            else
455            {
456                kohta.TextColor = Color.YellowGreen;
457            }
458
459        }
460    }
461    void AloitaPeli()
462    {
463        ClearAll();
464        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
465
466    }
467    PhysicsObject LisaaPiikkilanka()
468    {
469        PhysicsObject Piikkilanka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
470        Piikkilanka.Image = piikkilangankuva;
471        Piikkilanka.Tag = "Ansa";
472
473        return Piikkilanka;
474    }
475
476    PhysicsObject Lisaamaa()
477    {
478        PhysicsObject maa = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
479        maa.Image = maankuva;
480        return maa;
481    }
482
483    PhysicsObject Lisaaseina()
484    {
485        PhysicsObject seina = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
486        seina.Image = maankuva;
487        seina.Tag = "seina";
488        return seina;
489    }
490
491
492 
493
494    void TahtaaYlos()
495    {
496        if (pelaaja1.FacingDirection == Direction.Right)
497        {
498            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
499        }
500        if (pelaaja1.FacingDirection == Direction.Left)
501        {
502            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
503        }
504    }
505
506    void TahtaaAlas()
507    {
508        if (pelaaja1.FacingDirection == Direction.Right)
509        {
510            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
511        }
512        if (pelaaja1.FacingDirection == Direction.Left)
513        {
514            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
515        }
516    }
517
518    void LuoAmmusLaskuri()
519    {
520        ammusLaskuri = new IntMeter(0);
521
522        Label ammusNaytto = new Label();
523        ammusNaytto.X = Screen.Right - 100;
524        ammusNaytto.Y = Screen.Top - 100;
525        ammusNaytto.TextColor = Color.White;
526        ammusNaytto.BindTo(pelaaja1.Weapon.Ammo);
527        Add(ammusNaytto);
528
529        Label ammusTeksti = new Label("Ammuksia jäljellä: ");
530        ammusTeksti.X = Screen.Right - 200;
531        ammusTeksti.Y = Screen.Top - 100;
532        ammusTeksti.TextColor = Color.White;
533        Add(ammusTeksti);
534    }
535
536
537    void LuoLaskuri()
538    {
539        pisteLaskuri = new IntMeter(pisteet);
540        Label pisteNaytto = new Label();
541        pisteNaytto.X = Screen.Left + 200;
542        pisteNaytto.Y = Screen.Top - 100;
543        pisteNaytto.TextColor = Color.White;
544        pisteNaytto.BindTo(pisteLaskuri);
545        Add(pisteNaytto);
546
547        Label pisteTeksti = new Label("Pisteet: ");
548        pisteTeksti.X = Screen.Left + 150;
549        pisteTeksti.Y = Screen.Top - 100;
550        pisteTeksti.TextColor = Color.White;
551        Add(pisteTeksti);
552    }
553
554    void LisaavoimaMittari()
555    {
556
557
558        voimaMittari = new DoubleMeter(100);
559        voimaMittari.MaxValue = 100;
560        if (voimaMittari.Value == 100)
561        {
562            MessageDisplay.Add("Täysi terveys");
563        }
564        voimaMittari.LowerLimit += delegate { LopetaPeli(); };
565
566        ProgressBar voimaPalkki = new ProgressBar(300, 30);
567        voimaPalkki.BindTo(voimaMittari);
568        Add(voimaPalkki);
569
570
571        voimaPalkki.X = Screen.Right - 700;
572        voimaPalkki.Y = Screen.Top - 100;
573        voimaPalkki.Angle = Angle.RightAngle;
574        voimaPalkki.BarColor = Color.Green;
575        voimaPalkki.Angle = Angle.FromDegrees(0);
576        voimaPalkki.Image = LoadImage("tyhjapalkki");
577        voimaPalkki.BarImage = LoadImage("taysipalkki");
578
579        Label voimaTeksti = new Label(" Terveys: ");
580        voimaTeksti.X = Screen.Right - 900;
581        voimaTeksti.Y = Screen.Top - 100;
582        voimaTeksti.TextColor = Color.White;
583        Add(voimaTeksti);
584    }
585
586    void LopetaPeli()
587    {
588        pelaaja1.Destroy();
589        MediaPlayer.Stop();
590       
591        HighScoreWindow topIkkuna = new HighScoreWindow(
592                             "Parhaat pisteet",
593                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
594                             topLista, pisteLaskuri.Value);
595        topIkkuna.Closed += Lol;
596        Add(topIkkuna);
597
598    }
599    void Lol(Window sender)
600    {
601        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
602        pisteLaskuri.Reset();
603        pisteet = 0;
604        ClearAll();
605        Begin();
606    }
607}
Note: See TracBrowser for help on using the repository browser.