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

Revision 1764, 12.1 KB checked in by vihakuli, 10 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   
43   
44
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    }
139
140    void Lopeta()
141    {
142        Exit();
143    }
144
145    void TeeUkko()
146    {
147        ukko = new PlatformCharacter(80, 80);
148        ukko.X = spawn.X;
149        ukko.Y = spawn.Y + 1;
150        ukko.LinearDamping = 0.99;
151        ukko.Restitution = 0;
152        ukko.CanMoveOnAir = true;
153        AddCollisionHandler(ukko, UkkoTormasi);
154        Add(ukko);
155        Camera.Follow(ukko);
156        ukko.LeftWalkingAnimation = new Animation(UkonKuvat);
157        UkonKuvaPeilattu = Image.Mirror(UkonKuvat);
158        ukko.RightWalkingAnimation = new Animation(UkonKuvaPeilattu);
159        ukko.RightIdleAnimation = new Animation(Ukkoidlaa);
160        ukko.LeftIdleAnimation = new Animation(Ukkoidlaa);
161    }
162
163    void UkkoTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
164    {        if (kohde.Color == Color.Red)
165        {
166            KorkeaHyppyAika.Reset();           
167            MessageDisplay.Add(KorkeaHyppyAika.CurrentTime.ToString());
168            KorkeaHyppyAika.Start();
169            powerJump = true;
170        }
171
172        if (kohde.Color == Color.White)
173        {
174            NopeaJuoksuAika.Reset();
175        }
176
177        if (kohde.Shape == Shape.Star)
178        {
179            kohde.Destroy();
180            pisteet = pisteet + 1;
181            teksti.Text = pisteet.ToString() + "/" + MaxPisteet.ToString();
182
183            if (pisteet == MaxPisteet)
184            {
185                ClearAll();
186                valikonKohdat.Clear();
187                kohta3 = new Label("Kenttä suoritettu!");
188                kohta3.Position = new Vector(0, 120);
189                voitit = 1;
190                peliPaattyi("voitto");
191            }
192        }
193
194        if (kohde.Color == Color.OrangeRed)
195        {
196            ClearAll();
197            valikonKohdat.Clear();
198            KohtaHavisit = new Label("Hävisit kentän!");
199            KohtaHavisit.Position = new Vector(0, 120);
200            //valikonKohdat.Add(KohtaHavisit);
201            havisit = 1;
202            peliPaattyi("havio");
203        }
204    }
205
206    void TeeKentta()
207    {
208        TileMap ruudut = TileMap.FromFile(valittuMaa);
209        ruudut.SetTileMethod('=', LuoPalikka);
210        ruudut.SetTileMethod('-', LuoHyppyPalikka);
211        ruudut.SetTileMethod(':', LuoNopeusPalikka);
212        ruudut.SetTileMethod('*', LuoTahtiPalikka);
213        ruudut.SetTileMethod('s', LuoSpawn);
214        ruudut.SetTileMethod('!', LuoHavioPalikka);
215        ruudut.SetTileMethod('b', LuoVihollinen);
216        //ruudut.Insert(ruudunLeveys, ruudunKorkeus);
217        ruudut.Execute(ruudunLeveys, ruudunKorkeus);
218        Gravity = new Vector(0.0, -800.0);
219        teksti.Text = pisteet.ToString() + "/" + MaxPisteet.ToString();
220    }
221
222    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
223    {
224        spawnVihollinen = new GameObject(40.0, 40.0);
225        spawnVihollinen.Position = paikka;
226        TeeVihollinen(spawnVihollinen.X, spawnVihollinen.Y);
227        //Add(spawnVihollinen);
228    }
229
230    void peliPaattyi(string tulos)
231    {
232        aikaLaskuri.Stop();
233        maanTallennus = valittuMaa + ".xml";
234        maanTallennus = maanTallennus.Substring(5); 
235       
236        if (tulos == "voitto")
237        {
238            if (!DataStorage.Exists(maanTallennus))
239            {
240               
241                DataStorage.Save<ScoreList>(topLista, maanTallennus);
242            }
243
244            LoadState tilanne = DataStorage.BeginLoad(maanTallennus);
245            tilanne.Load<ScoreList>(topLista, "default");
246            tilanne.EndLoad();
247           
248            HighScoreWindow topIkkuna = new HighScoreWindow("Runner top times " + valittuMaa + " maalle",
249                "Parhaat pisteet", "Gz dude, pääsit listalle pisteillä %p!!! Syötä nimesi: ", topLista, aikaaKulunut);
250            topIkkuna.Width = 500;
251            topIkkuna.List.Width = 500;
252            topIkkuna.Closed += TallennaPisteet;
253            Add(topIkkuna);
254        }
255
256        else
257        {
258            ClearAll();
259            HighScoreWindow topIkkuna = new HighScoreWindow("Pelin nimi tai jotain",
260                              "Parhaat pisteet",
261                              topLista);
262            topIkkuna.Closed += TallennaPisteet;
263            Add(topIkkuna);
264        }
265    }
266
267    void TallennaPisteet(Window sender)
268    {
269        DataStorage.Save<ScoreList>(topLista, maanTallennus);
270        Valikko();
271    }
272
273    void LuoHavioPalikka(Vector paikka, double leveys, double korkeus)
274    {
275        PhysicsObject havioPalikka = PhysicsObject.CreateStaticObject(40.0, 40.0);
276        havioPalikka.Position = paikka;
277        havioPalikka.Color = Color.OrangeRed;
278        Add(havioPalikka);
279
280    }
281
282    void LuoSpawn(Vector paikka, double leveys, double korkeus)
283    {
284        spawn = PhysicsObject.CreateStaticObject(50.0, 50.0);
285        spawn.Position = paikka;
286        spawn.Color = Color.Green;
287        Add(spawn); 
288    }
289
290    void LuoPalikka(Vector paikka, double leveys, double korkeus)
291    {
292        PhysicsObject palikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
293        palikka.Position = paikka;
294        palikka.Shape = Shape.Rectangle;
295        palikka.Color = Color.Black;
296        Add(palikka);
297    }
298
299    void LuoHyppyPalikka(Vector paikka, double leveys, double korkeus)
300    {
301        PhysicsObject hyppyPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
302        hyppyPalikka.Position = paikka;
303        hyppyPalikka.Shape = Shape.Rectangle;
304        hyppyPalikka.Color = Color.Red;
305        Add(hyppyPalikka);
306    }
307
308    void LuoNopeusPalikka(Vector paikka, double leveys, double korkeus)
309    {
310        PhysicsObject nopeusPalikka = PhysicsObject.CreateStaticObject(50.0, 50.0);
311        nopeusPalikka.Position = paikka;
312        nopeusPalikka.Shape = Shape.Rectangle;
313        nopeusPalikka.Color = Color.White;
314        Add(nopeusPalikka);
315    }
316
317    void LuoTahtiPalikka(Vector paikka, double levets, double korkeus)
318    {
319        PhysicsObject tahtiPalikka = PhysicsObject.CreateStaticObject(35.0, 35.0);
320        tahtiPalikka.Position = paikka;
321        tahtiPalikka.Shape = Shape.Star;
322        tahtiPalikka.Color = Color.Yellow;
323        MaxPisteet = MaxPisteet + 1;
324        Add(tahtiPalikka);
325    }
326
327    void LuoAikaLaskuri()
328    {
329       
330       
331        aikaLaskuri.Start();
332       
333        aikaNaytto = new Label();
334        aikaNaytto.TextColor = Color.White;
335        aikaNaytto.DecimalPlaces = 1;
336        aikaNaytto.X = Screen.Left / 2;
337        aikaNaytto.Y = Screen.Top - 20;
338        //aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
339        Add(aikaNaytto);
340       
341    }
342
343    void aikaLaskuri_Trigger(Timer sender)
344    {
345        aikaaKulunut = aikaaKulunut + sender.SecondCounter.Value;
346        aikaNaytto.Text = aikaaKulunut.ToString("0.00");
347    }
348
349    void napit()
350    {
351        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu vasemmalle", -liiku, "vasen");
352        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaUkkoa, "Pelaaja liikkuu oikealle", liiku, "oikea");
353        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppy, "Ukko Hyppää");
354        Keyboard.Listen(Key.Escape, ButtonState.Pressed, peliPaattyi, "Poistu","havio");
355    }
356
357    void LiikutaUkkoa(double liiku, string suunta)
358    {
359       
360        double asd = NopeaJuoksuAika.CurrentTime;
361        if (asd < 3)
362        {
363            if (suunta == "vasen")
364            {
365                liiku = liiku - 300;
366                ukko.Walk(liiku);
367            }
368            if (suunta == "oikea")
369            {
370                liiku = liiku + 300;
371                ukko.Walk(liiku);
372            }
373        }
374       
375        ukko.Walk(liiku);
376    }
377
378    void Hyppy()
379    {
380        if (powerJump == true)
381        {
382            ukko.Jump(800.0);
383            powerJump = false; 
384        }
385        ukko.Jump(500.0);
386    }
387
388    void TeeVihollinen(double x, double y)
389    {
390        vihollinen = new PhysicsObject(40.0, 40.0);
391        vihollinen.X = x;
392        vihollinen.Y = y;
393        vihollinen.Image = vihollisenKuva;
394        vihollinen.Hit(new Vector(-600,0));
395        vihollinen.IgnoresGravity = true;
396        vihollinen.LinearDamping = 1;
397        AddCollisionHandler(vihollinen, VihuTormasi);
398        Add(vihollinen);
399    }
400
401    void VihuTormasi(PhysicsObject tormaaja, PhysicsObject kohde)
402    {
403        vihollinen.Velocity = -vihollinen.Velocity;
404    }
405
406}
Note: See TracBrowser for help on using the repository browser.