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

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