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

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