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

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