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

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