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

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