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

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