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

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