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

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