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

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