source: 2011/23/vihakuli/Runner/Runner/Runner/Peli.cs @ 1832

Revision 1832, 18.9 KB checked in by vihakuli, 9 years ago (diff)
Line 
1using System;
2using System.IO;
3using System.Collections.Generic;
4using Jypeli;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Jypeli.Effects;
8using Jypeli.Widgets;
9
10public class Peli : PhysicsGame
11{
12
13    #region attribuutit
14    PlatformCharacter ukko;
15    Image[] UkonKuvat = LoadImages("ukko01", "ukko02", "ukko03");
16    Image[] UkonKuvaPeilattu;
17    Image[] Ukkoidlaa = LoadImages("ukkoidlaa0");
18    Image vihollisenKuva = LoadImage("vihu");
19    Image ammusLoota = LoadImage("ammusLoota");
20    Image speedLootaVasen = LoadImage("speedPalikka");
21    Image speedLootaOikea;
22    Image jumpLoota = LoadImage("jumpPalikka");
23    Image Palikka = LoadImage("Palikka");
24    Image devil = LoadImage("Devil");
25    Image taustaKuva = LoadImage("tausta");
26    Image kivi = LoadImage("kivi");
27    Image checkpoin = LoadImage("CheckPoint");
28    double liiku = 400;
29    int pisteet = 0;
30    int MaxPisteet = 0;
31    const int ruudunLeveys = 50;
32    const int ruudunKorkeus = 50;
33    Timer KorkeaHyppyAika;
34    Timer NopeaJuoksuAika;
35    Label teksti;
36    Label kohta3;
37    Label KohtaHavisit;
38    List<Label> valikonKohdat = new List<Label>();
39    List<Label> MaaValikko = new List<Label>();
40    GameObject spawnVihollinen;
41    PhysicsObject spawn;
42    int havisit = 0;
43    int voitit = 0;
44    string[] maat;
45    string valittuMaa = "Maat\\maa1.txt";
46    Timer aikaLaskuri;
47    double aikaaKulunut = 0.0;
48    ScoreList topLista = new ScoreList(10, true, 999.9);
49    string maanTallennus;
50    Label aikaNaytto;
51    bool powerJump = false;
52    bool powerRun = false;
53    bool KYYKKY = false;
54    Label POWERRUN;
55    Label POWERJUMP;
56    Label AMMUKSET;
57    Label HP;
58    PhysicsObject ammus;
59    int ammukset = 0;
60    Vector ukonkokoKyykky = new Vector(50,50);
61    Vector ukonkokoDefault = new Vector(80, 80);
62    Vector ukonPaikka = new Vector(0, 0);
63    int elamat = 3;
64    #endregion
65
66
67    public override void Begin()
68    {
69        SetWindowSize(800, 600);
70        KorkeaHyppyAika = new Timer();
71        NopeaJuoksuAika = new Timer();
72        aikaLaskuri = new Timer();
73        aikaLaskuri.Interval = 0.1;
74        aikaLaskuri.Trigger += new Timer.TriggerHandler(aikaLaskuri_Trigger);
75        Level.BackgroundColor = Color.MediumPurple;
76        speedLootaOikea = Image.Mirror(speedLootaVasen);
77        Valikko(); 
78    }
79
80    void Valikko()
81    {
82        ClearAll();
83        NopeaJuoksuAika.Start();
84       
85        MaxPisteet = 0;
86        pisteet = 0;
87
88        Label kohta1 = new Label("Aloita peli");
89        kohta1.Position = new Vector(0, 40);
90        valikonKohdat.Add(kohta1);
91
92        Label kohta2 = new Label("Lopeta");
93        kohta2.Position = new Vector(0, -40);
94        valikonKohdat.Add(kohta2);
95
96        Label valitseMaa = new Label("Valitse maa");
97        valitseMaa.Position = new Vector(0, 0);
98        valikonKohdat.Add(valitseMaa);
99
100        KohtaHavisit = new Label("Hävisit kentän!");
101        KohtaHavisit.Position = new Vector(0, 120);
102
103        kohta3 = new Label("Kenttä suoritettu!");
104        kohta3.Position = new Vector(0, 120);
105
106        if (havisit == 1)
107        {
108            valikonKohdat.Add(kohta3);
109            kohta3.Text = "Hävisit kentän!";
110        }
111
112        if (voitit == 1)
113        {
114            valikonKohdat.Add(kohta3);
115            kohta3.Text = "Voitit kentän!";
116        }
117
118
119        foreach (Label valikonKohta in valikonKohdat)
120        {
121            Add(valikonKohta);
122            voitit = 0;
123            havisit = 0;
124        }
125
126        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
127        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
128        Mouse.ListenOn(valitseMaa, MouseButton.Left, ButtonState.Pressed, ValikkoMaa, null);
129        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaPeli, null);
130        Mouse.IsCursorVisible = true;
131        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
132    }
133
134    void ValikkoMaa()
135    {
136        ClearAll();
137        maat = Directory.GetFiles("Maat");
138       
139        int y = 240;
140        foreach (string maa in maat)
141        {
142            Label kohta = new Label(maa);
143            kohta.Position = new Vector(0, y);
144            MaaValikko.Add(kohta);
145            y -= 40;
146            Add(kohta);
147            Mouse.ListenOn(kohta, MouseButton.Left, ButtonState.Pressed, ValitseMaa, null, maa);
148        }
149    }
150
151    void ValitseMaa(string valittumaa)
152    {
153        valittuMaa = valittumaa;
154        Valikko();
155    }
156
157    void AloitaPeli()
158    {
159        ClearAll();
160        MaxPisteet = 0;
161        pisteet = 0;
162        voitit = 0;
163        havisit = 0;
164        ammukset = 0;
165        elamat = 3;
166        aikaaKulunut = 0;
167        aikaLaskuri.Stop();
168        aikaLaskuri.Start();
169        voitit = 0;
170        havisit = 0;
171        teksti = new Label("teksti");
172        HP = new Label(elamat.ToString() + " elämää");
173        HP.Position = new Vector(Screen.Right - 350, Screen.Top - 30);
174        Add(HP);
175        LuoAikaLaskuri();
176        TeeKentta();
177        TeeUkko(ukonkokoDefault, spawn.Position);
178        napit();
179        teksti.X = Screen.Right - 100;
180        teksti.Y = Screen.Top - 30;
181        teksti.TextColor = Color.Black;
182        Add(teksti);
183
184        POWERJUMP = new Label("PowerJump");
185        POWERJUMP.Position = new Vector(Screen.Left + 80, Screen.Top - 30);
186        Add(POWERJUMP);
187
188        POWERRUN = new Label("PowerRun");
189        POWERRUN.Position = new Vector(Screen.Left + 80, Screen.Top - 60);
190        Add(POWERRUN);
191
192        AMMUKSET = new Label(ammukset + " panosta");
193        AMMUKSET.Position = new Vector(Screen.Left + 600, Screen.Top - 30);
194        Add(AMMUKSET);
195    }
196
197    void Lopeta()
198    {
199        Exit();
200    }
201
202    void TeeUkko(Vector ukonkoko, Vector paikka)
203    {
204        ukko = new PlatformCharacter(ukonkoko.X, ukonkoko.Y);
205        ukko.Position = paikka;
206        ukko.LinearDamping = 0.99;
207        ukko.Restitution = 0;
208        ukko.CanMoveOnAir = true;
209        AddCollisionHandler(ukko, UkkoTormasi);
210        Add(ukko);
211        Camera.Follow(ukko);
212        ukko.LeftWalkingAnimation = new Animation(UkonKuvat);
213        UkonKuvaPeilattu = Image.Mirror(UkonKuvat);
214        ukko.RightWalkingAnimation = new Animation(UkonKuvaPeilattu);
215        ukko.RightIdleAnimation = new Animation(Ukkoidlaa);
216        ukko.LeftIdleAnimation = new Animation(Ukkoidlaa);
217        ukko.Weapon = new PlasmaCannon(100, 100);
218        ukko.Weapon.IsVisible = false;
219        ukko.Weapon.AttackSound = null;
220    }
221
222    void UkkoTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
223    {       
224        if (kohde.Image == jumpLoota)
225        {
226            KorkeaHyppyAika.Reset();           
227            MessageDisplay.Add(KorkeaHyppyAika.CurrentTime.ToString());
228            KorkeaHyppyAika.Start();
229            powerJump = true;
230        }
231
232        if (kohde.Image == speedLootaVasen || kohde.Image == speedLootaOikea)
233        {
234            NopeaJuoksuAika.Reset();
235            powerRun = true;
236        }
237
238        if (kohde.Shape == Shape.Star)
239        {
240            kohde.Destroy();
241            pisteet = pisteet + 1;
242            teksti.Text = pisteet.ToString() + "/" + MaxPisteet.ToString();
243
244            if (pisteet == MaxPisteet)
245            {
246                ClearAll();
247                valikonKohdat.Clear();
248                voitit = 1;
249                peliPaattyi("voitto");
250            }
251        }
252
253        if (kohde.Image == devil)
254        {
255            Tilanne();
256        }
257
258        if (kohde.Image == vihollisenKuva)
259        {
260            Tilanne();
261        }
262
263        if (kohde.Image == ammusLoota)
264        {
265            kohde.Destroy();
266            ammukset = ammukset + 5;
267        }
268
269        if (kohde.Image == checkpoin) 
270        {
271            spawn.Position = new Vector(kohde.X, kohde.Y);
272            kohde.Destroy();
273        }
274
275        if (kohde.Shape == Shape.Heart)
276        {
277            elamat++;
278            HP.Text = elamat.ToString() + " elämää";
279            kohde.Destroy();
280        }
281    }
282
283    void TeeKentta()
284    {
285        TileMap ruudut = TileMap.FromFile(valittuMaa);
286        ruudut.SetTileMethod('=', LuoPalikka);
287        ruudut.SetTileMethod('-', LuoHyppyPalikka);
288        ruudut.SetTileMethod('<', LuoNopeusPalikkaVasen);
289        ruudut.SetTileMethod('>', LuoNopeusPalikkaOikea);
290        ruudut.SetTileMethod('*', LuoTahtiPalikka);
291        ruudut.SetTileMethod('s', LuoSpawn);
292        ruudut.SetTileMethod('!', LuoHavioPalikka);
293        ruudut.SetTileMethod('b', LuoVihollinen);
294        ruudut.SetTileMethod('a', LuoAmmukset);
295        ruudut.SetTileMethod('c', LuoCheckPoint);
296        ruudut.SetTileMethod('h', LuoHealtPoint);
297        ruudut.Execute(ruudunLeveys, ruudunKorkeus);
298        Gravity = new Vector(0.0, -800.0);
299        teksti.Text = pisteet.ToString() + "/" + MaxPisteet.ToString();
300    }
301
302    void LuoHealtPoint(Vector paikka, double leveys, double korkeus)
303    {
304        PhysicsObject hp = PhysicsObject.CreateStaticObject(25, 25);
305        hp.Shape = Shape.Heart;
306        hp.Position = paikka;
307        hp.Color = Color.Red;
308        Add(hp);
309    }
310
311    void Tilanne()
312    {
313        if (elamat > 0)
314        {
315            ukko.Destroy();
316            TeeUkko(new Vector(80, 80), spawn.Position);
317            elamat--;
318        }
319
320        else
321        {
322            havisit = 1;
323            peliPaattyi("havio");
324        }
325    }
326
327    void LuoCheckPoint(Vector paikka, double leveys, double korkeus)
328    {
329        PhysicsObject CheckPoint = PhysicsObject.CreateStaticObject(50, 50);
330        CheckPoint.Image = checkpoin;
331        CheckPoint.Position = paikka;
332        Add(CheckPoint);
333    }
334
335    void LuoAmmukset(Vector paikka, double leveys, double korkeus)
336    {
337        PhysicsObject ammusPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
338        ammusPalikka.Position = paikka;
339        ammusPalikka.Image = ammusLoota;
340        Add(ammusPalikka);
341    }
342
343    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
344    {
345        spawnVihollinen = new GameObject(40.0, 40.0);
346        spawnVihollinen.Position = paikka;
347        TeeVihollinen(spawnVihollinen.X, spawnVihollinen.Y);
348    }
349
350    void peliPaattyi(string tulos)
351    {
352        aikaLaskuri.Stop();
353        maanTallennus = valittuMaa + ".xml";
354        maanTallennus = maanTallennus.Substring(5);
355        string asd = aikaNaytto.Text;
356        double.TryParse(asd, out aikaaKulunut);
357       
358        if (tulos == "voitto")
359        {
360            if (!DataStorage.Exists(maanTallennus))
361            {
362               
363                DataStorage.Save<ScoreList>(topLista, maanTallennus);
364            }
365
366            LoadState tilanne = DataStorage.BeginLoad(maanTallennus);
367            tilanne.Load<ScoreList>(topLista, "default");
368            tilanne.EndLoad();
369           
370            HighScoreWindow topIkkuna = new HighScoreWindow("Runner top times " + valittuMaa + " maalle",
371                "Parhaat pisteet", "Gz dude, pääsit listalle pisteillä %p!!! Syötä nimesi: ", topLista, aikaaKulunut);
372            topIkkuna.Width = 500;
373            topIkkuna.List.Width = 500;
374            topIkkuna.Closed += TallennaPisteet;
375            Add(topIkkuna);
376        }
377
378        else
379        {
380            if (!DataStorage.Exists(maanTallennus))
381            {
382
383                DataStorage.Save<ScoreList>(topLista, maanTallennus);
384            }
385
386            LoadState tilanne = DataStorage.BeginLoad(maanTallennus);
387            tilanne.Load<ScoreList>(topLista, "default");
388            tilanne.EndLoad();
389
390            ClearAll();
391            HighScoreWindow topIkkuna = new HighScoreWindow("Runner",
392                              "Top times",
393                              topLista);
394            topIkkuna.Width = 500;
395            topIkkuna.List.Width = 500;
396            topIkkuna.Closed += TallennaPisteet;
397            Add(topIkkuna);
398            havisit = 1;
399        }
400    }
401
402    void TallennaPisteet(Window sender)
403    {
404        DataStorage.Save<ScoreList>(topLista, maanTallennus);
405
406        Valikko();
407    }
408
409    void LuoHavioPalikka(Vector paikka, double leveys, double korkeus)
410    {
411        PhysicsObject havioPalikka = PhysicsObject.CreateStaticObject(40.0, 40.0);
412        havioPalikka.Position = paikka;
413        havioPalikka.Image = devil;
414        havioPalikka.CollisionIgnoreGroup = 1;
415        Add(havioPalikka);
416
417    }
418
419    void LuoSpawn(Vector paikka, double leveys, double korkeus)
420    {
421        spawn = PhysicsObject.CreateStaticObject(50.0, 50.0);
422        spawn.Position = paikka;
423        spawn.Color = Color.Black;
424        spawn.CollisionIgnoreGroup = 1;
425    }
426
427    void LuoPalikka(Vector paikka, double leveys, double korkeus)
428    {
429        PhysicsObject palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
430        palikka.Position = paikka;
431        palikka.Shape = Shape.Rectangle;
432        palikka.Image = Palikka;
433        palikka.CollisionIgnoreGroup = 1;
434        Add(palikka);
435    }
436
437    void LuoHyppyPalikka(Vector paikka, double leveys, double korkeus)
438    {
439        PhysicsObject hyppyPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
440        hyppyPalikka.Position = paikka;
441        hyppyPalikka.Shape = Shape.Rectangle;
442        hyppyPalikka.Image = jumpLoota;
443        hyppyPalikka.CollisionIgnoreGroup = 1;
444        Add(hyppyPalikka);
445    }
446
447    void LuoNopeusPalikkaVasen(Vector paikka, double leveys, double korkeus)
448    {
449        PhysicsObject nopeusPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
450        nopeusPalikka.Position = paikka;
451        nopeusPalikka.Shape = Shape.Rectangle;
452        nopeusPalikka.Image = speedLootaVasen;
453        nopeusPalikka.CollisionIgnoreGroup = 1;
454        Add(nopeusPalikka);
455    }
456
457    void LuoNopeusPalikkaOikea(Vector paikka, double leveys, double korkeus)
458    {
459        PhysicsObject nopeusPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
460        nopeusPalikka.Position = paikka;
461        nopeusPalikka.Shape = Shape.Rectangle;
462        nopeusPalikka.Image = speedLootaOikea;
463        nopeusPalikka.CollisionIgnoreGroup = 1;
464        Add(nopeusPalikka);
465    }
466
467    void LuoTahtiPalikka(Vector paikka, double levets, double korkeus)
468    {
469        PhysicsObject tahtiPalikka = PhysicsObject.CreateStaticObject(35.0, 35.0);
470        tahtiPalikka.Position = paikka;
471        tahtiPalikka.Shape = Shape.Star;
472        tahtiPalikka.Color = Color.Yellow;
473        MaxPisteet = MaxPisteet + 1;
474        Add(tahtiPalikka);
475    }
476
477    void LuoAikaLaskuri()
478    {
479        aikaLaskuri.Start();
480        aikaNaytto = new Label();
481        aikaNaytto.TextColor = Color.White;
482        aikaNaytto.DecimalPlaces = 1;
483        aikaNaytto.X = Screen.Left / 2;
484        aikaNaytto.Y = Screen.Top - 20;
485        Add(aikaNaytto);
486    }
487
488    void aikaLaskuri_Trigger(Timer sender)
489    {
490        aikaaKulunut = aikaaKulunut + sender.SecondCounter.Value;
491        aikaNaytto.Text = aikaaKulunut.ToString("0.00");
492
493        if(powerJump == true)
494            POWERJUMP.TextColor = Color.White;
495        if (powerJump == false)
496            POWERJUMP.TextColor = Color.Black;
497        if(powerRun == true)
498            POWERRUN.TextColor = Color.White;
499        if (powerRun == false)
500            POWERRUN.TextColor = Color.Black;
501        if (KYYKKY == true)
502            ukko.Size = new Vector(50.0, 50.0);
503        if (KYYKKY == false)
504            ukko.Size = new Vector(80.0, 80.0);
505        AMMUKSET.Text = ammukset + " panosta";
506        HP.Text = elamat.ToString() + " elämää";
507    }
508
509    void napit()
510    {
511        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu vasemmalle", -liiku, "vasen");
512        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu oikealle", liiku, "oikea");
513        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppy, "Ukko Hyppää");
514        Keyboard.Listen(Key.Down, ButtonState.Down, Kyykky, "Ukko menee kyykkyyn", ukko);
515        Keyboard.Listen(Key.Down, ButtonState.Released, antiKyykky, null);
516        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, "Restart");
517       
518        Keyboard.Listen(Key.Escape, ButtonState.Pressed, peliPaattyi, "Poistu","havio");
519        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Pelaaja ampuuu aseellaan");
520
521        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu vasemmalle", -liiku, "vasen");
522        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu oikealle", liiku, "oikea");
523        ControllerOne.Listen(Button.B, ButtonState.Pressed, Hyppy, "Ukko Hyppää");
524        ControllerOne.Listen(Button.RightStick, ButtonState.Pressed, Ammu, "Pelaaja heittää kiven");
525        ControllerOne.Listen(Button.Start, ButtonState.Pressed, peliPaattyi, "Poistu", "havio");
526    }
527
528    void Ammu()
529    {
530        if (ammukset > 0)
531        {
532            ammus = ukko.Weapon.Shoot();
533            ammus.Image = kivi;
534            ammus.Size *= 3;
535            ammukset--;
536        }
537    }
538
539    void LiikutaUkkoa(double liiku, string suunta)
540    {
541        double asd = NopeaJuoksuAika.CurrentTime;
542        if (asd < 3)
543        {
544            if (suunta == "vasen")
545                {
546                    liiku = liiku - 300;
547                    ukko.Walk(liiku);
548                }
549            if (suunta == "oikea")
550                {
551                    liiku = liiku + 300;
552                    ukko.Walk(liiku);
553                }
554        }
555
556        if (asd > 3)
557        {
558            ukko.Walk(liiku);
559            powerRun = false;
560        }
561    }
562
563    void Hyppy()
564    {
565        if (powerJump == true)
566        {
567            ukko.Jump(800.0);
568            powerJump = false;
569        }
570
571        if (powerJump == false)
572        {
573            POWERJUMP.TextColor = Color.Black;
574            ukko.Jump(500.0);
575        }
576    }
577
578    void Kyykky(PlatformCharacter UKKO)
579    {
580        KYYKKY = true;
581    }
582
583    void antiKyykky()
584    {
585        KYYKKY = false;
586    }
587
588    void TeeVihollinen(double x, double y)
589    {
590        PhysicsObject vihollinen = new PhysicsObject(40.0, 40.0);
591        vihollinen.X = x;
592        vihollinen.Y = y;
593        vihollinen.Image = vihollisenKuva;
594        vihollinen.Hit(new Vector(600,0));
595        vihollinen.IgnoresGravity = true;
596        vihollinen.IgnoresCollisionResponse = true;
597        vihollinen.LinearDamping = 1;
598        vihollinen.CanRotate = false;
599        vihollinen.Restitution = 1;
600        AddCollisionHandler(vihollinen, VihuTormasi);
601        Add(vihollinen);
602    }
603
604    void VihuTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
605    {
606        if (kohde == ammus)
607        {
608            tormaaja.Destroy();
609            kohde.Destroy();
610        }       
611       
612        tormaaja.Angle = Angle.FromDegrees(0);
613        tormaaja.Velocity = -tormaaja.Velocity;
614    }
615}
Note: See TracBrowser for help on using the repository browser.