source: 2012/JAO/jouni/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 2835

Revision 2732, 11.0 KB checked in by anonymous, 9 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Tasohyppelypeli1 : PhysicsGame
10{
11    int kenttaNro = 1;
12    int lkm;
13    const double nopeus = 200;
14    int lautannopeus = 6;
15    const double hyppyNopeus = 900;
16    const int RUUDUN_KOKO = 40;
17    ScoreList topLista = new ScoreList(10,true, 999);
18    IntMeter pisteLaskuri;
19    PlatformCharacter pelaaja1;
20    Timer aikaLaskuri;
21    Image taustaKuva = LoadImage("hello");
22    Image pelaajanKuva = LoadImage("BadHelloKitty");
23    Image tahtiKuva = LoadImage("heart");
24
25    SoundEffect maaliAani = LoadSoundEffect("maali");
26
27    public override void Begin()
28    {
29       
30        //if (DataStorage.Exists("pisteet3.xml"))
31            //topLista = DataStorage.Load<ScoreList>(topLista, "pisteet3.xml");
32        Valikko();
33    }
34    void AloitaPeli(int kentta)
35    {
36        ClearAll();
37        lkm = 0;
38        Gravity = new Vector(0, -1000);
39        if (kentta == 1) luoKentta("kentta1.txt");
40        else if (kentta == 2) luoKentta("kentta2.txt");
41        else
42        {
43            kentta = 1;
44            Valikko();
45        }
46
47        //luoKentta(kentta);
48        Level.Background.Image = taustaKuva;
49       
50        LuoLaskuri();
51        lisaaNappaimet();
52        LuoAikaLaskuri();
53        Camera.Follow(pelaaja1);
54        Camera.ZoomFactor = 1.3;
55        Camera.StayInLevel = true;
56        Timer suuntavaihtuu = new Timer();
57        suuntavaihtuu.Interval = 5;
58        suuntavaihtuu.Timeout += vaihdasuuntaa;
59        suuntavaihtuu.Start();
60    }
61    void vaihdasuuntaa() 
62    {
63        lautannopeus = -lautannopeus;
64    }
65    void kenttavalikko() 
66    {
67        ClearAll();
68        Level.BackgroundColor = Color.White;
69        Level.Background.Image = taustaKuva;
70        Camera.ZoomToLevel();
71        Level.Background.ScaleToLevelFull();
72        MultiSelectWindow valikko = new MultiSelectWindow("valitse kenttä",
73            "kenttä 1", "kenttä 2", "takaisin");
74        valikko.ItemSelected += PainettiinkenttaValikonNappia;
75        Add(valikko);
76        Mouse.IsCursorVisible = true;
77    }
78    void PainettiinkenttaValikonNappia(int valinta)
79    {
80        switch (valinta)
81        {
82            case 0:
83                AloitaPeli(kenttaNro);
84                break;
85            case 1:
86                kenttaNro = 2;
87                AloitaPeli(kenttaNro);
88                break;
89            case 2:
90                Valikko();
91                break;
92        }
93    }
94    void Valikko()
95    {
96       
97        ClearAll();
98        Level.BackgroundColor = Color.White;
99        Level.Background.Image = taustaKuva;
100        Camera.ZoomToLevel();
101        Level.Background.ScaleToLevelFull();
102        MultiSelectWindow valikko = new MultiSelectWindow("Tervetuloa peliin",
103            "Aloita peli", "valitse kenttä", "Parhaat pisteet", "Lopeta");
104        valikko.ItemSelected += PainettiinValikonNappia;
105        Add(valikko);
106        Mouse.IsCursorVisible = true;
107        //Camera.ZoomFactor = 1.2;
108        //Camera.StayInLevel = true;
109
110 
111    }
112    void PainettiinValikonNappia(int valinta)
113    {
114        switch (valinta)
115        {
116            case 0:
117                 AloitaPeli(kenttaNro);
118                break;
119            case 1:
120                 kenttavalikko();
121                break;
122            case 2:
123                ParhaatPisteet();
124                break;
125            case 3:
126                Exit();
127                break;
128        }
129    } 
130    void LuoAikaLaskuri()
131    {
132        aikaLaskuri = new Timer();
133        aikaLaskuri.Start();
134
135        Label aikaNaytto = new Label();
136        aikaNaytto.TextColor = Color.Turquoise;
137        aikaNaytto.DecimalPlaces = 1;
138        aikaNaytto.X = Screen.Left + 100;
139        aikaNaytto.Y = Screen.Top - 140;
140        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
141        Add(aikaNaytto);
142    }
143    void LuoLaskuri()
144    {
145        pisteLaskuri = new IntMeter(0);
146
147        Label pisteNaytto = new Label();
148        pisteNaytto.X = Screen.Left + 100;
149        pisteNaytto.Y = Screen.Top - 100;
150        pisteNaytto.TextColor = Color.Red;
151       
152        pisteLaskuri.MaxValue = lkm;
153       
154        pisteLaskuri.UpperLimit += laskuriYlarajassa;
155        pisteNaytto.BindTo(pisteLaskuri);
156        Add(pisteNaytto);
157    }
158    void laskuriYlarajassa(int arvo)
159    {
160        aikaLaskuri.Pause();
161        HighScoreWindow topIkkuna = new HighScoreWindow(
162                             "Parhaat pisteet",
163                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
164                             topLista, aikaLaskuri.CurrentTime);
165        topIkkuna.Closed += TallennaPisteet;
166        Add(topIkkuna);
167    }
168    void ParhaatPisteet()
169    {
170        MultiSelectWindow parhaatPisteetValikko = new MultiSelectWindow("valitse kenttä",
171            "kenttä 1", "kenttä 2", "takaisin");
172        parhaatPisteetValikko.ItemSelected += PainettiinparhaatPisteetValikonNappia;
173        Add(parhaatPisteetValikko);
174
175        /*HighScoreWindow topIkkuna = new HighScoreWindow(
176                              "Parhaat pisteet",
177                              topLista);
178        topIkkuna.Closed += TallennaPisteet;
179        Add(topIkkuna);*/
180    }
181
182    void PainettiinparhaatPisteetValikonNappia(int valinta)
183    {
184        switch (valinta)
185        {
186            case 0:
187                naytaParhaatPisteet(1);
188                break;
189            case 1:
190                naytaParhaatPisteet(2);
191                break;
192            case 2:
193                Valikko();
194                break;
195        }
196    }
197
198    void naytaParhaatPisteet(int kentta)
199    {
200        if (DataStorage.Exists("pisteet" + kentta + ".xml"))
201            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet" + kentta + ".xml");
202        else
203            topLista = new ScoreList(10, true, 999);
204        HighScoreWindow topIkkuna = new HighScoreWindow(
205                              "Parhaat pisteet",
206                              topLista);
207        topIkkuna.Closed += delegate { kenttaNro = 1; Valikko(); };
208        Add(topIkkuna);
209    }
210
211    void TallennaPisteet(Window sender)
212    {
213        DataStorage.Save<ScoreList>(topLista, "pisteet" + kenttaNro + ".xml");
214        kenttaNro = kenttaNro + 1;
215        AloitaPeli(kenttaNro);
216    }
217    void luoKentta(string tied)
218    {
219        if (DataStorage.Exists("pisteet" + kenttaNro + ".xml"))
220            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet" + kenttaNro + ".xml");
221        else
222            topLista = new ScoreList(10, true, 999);
223
224        TileMap kentta = TileMap.FromFile(tied);
225        kentta.SetTileMethod('#', lisaaTaso);
226        kentta.SetTileMethod('*', lisaaTahti);
227        kentta.SetTileMethod('$', lisaalautta1);
228        kentta.SetTileMethod('.', lisaalattia);
229        kentta.SetTileMethod('%', lisaalautta2);
230        kentta.SetTileMethod('N', lisaaPelaaja);
231        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
232        Level.CreateBorders();
233        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
234    }
235
236    void lisaaTaso(Vector paikka, double leveys, double korkeus)
237    {
238        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
239        taso.Position = paikka;
240        taso.Color = Color.LightPink;
241        Add(taso);
242    }
243    void lisaalattia(Vector paikka, double leveys, double korkeus)
244    {
245        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
246        taso.Position = paikka;
247        taso.Color = Color.ForestGreen;
248        Add(taso);
249    }
250    void lisaalautta1(Vector paikka, double leveys, double korkeus)
251    {
252        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
253        taso.Position = paikka;
254        taso.Color = Color.LightPink;
255        Add(taso);
256        Timer lautta1timer = new Timer();
257        lautta1timer.Interval = 0.1;
258        lautta1timer.Timeout += delegate {lauttaliikkuu(taso);};
259        lautta1timer.Start();
260    }
261    void lauttaliikkuu(PhysicsObject lautta) 
262    {
263        lautta.X += lautannopeus;
264    }
265    void lisaalautta2(Vector paikka, double leveys, double korkeus)
266    {
267        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
268        taso.Position = paikka;
269        taso.Color = Color.LightPink;
270        Add(taso);
271        Timer lautta2timer = new Timer();
272        lautta2timer.Interval = 0.1;
273        lautta2timer.Timeout += delegate { lautta2liikkuu(taso); };
274        lautta2timer.Start();
275    }
276    void lautta2liikkuu(PhysicsObject lautta)
277    {
278        lautta.X += -lautannopeus;
279    }
280
281    void lisaaTahti(Vector paikka, double leveys, double korkeus)
282    {
283        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
284        tahti.IgnoresCollisionResponse = true;
285        tahti.Position = paikka;
286        tahti.Image = tahtiKuva;
287        tahti.Tag = "tahti";
288        lkm++;
289        Add(tahti);
290    }
291
292    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
293    {
294        pelaaja1 = new PlatformCharacter(leveys, korkeus);
295        pelaaja1.Position = paikka;
296        pelaaja1.Mass = 4.0;
297        pelaaja1.Image = pelaajanKuva;
298        AddCollisionHandler(pelaaja1, kasittelePelaajanTormays);
299        Add(pelaaja1);
300    }
301
302    void lisaaNappaimet()
303    {
304        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
305        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
306        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
307
308        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
309        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
310        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
311
312        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
313
314        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
315        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
316        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
317
318        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
319    }
320
321    void liikuta(PlatformCharacter hahmo, double nopeus)
322    {
323        hahmo.Walk(nopeus);
324    }
325
326    void hyppaa(PlatformCharacter hahmo, double nopeus)
327    {
328        hahmo.Jump(nopeus);
329    }
330
331    void kasittelePelaajanTormays(PhysicsObject hahmo, PhysicsObject kohde)
332    {
333        if (kohde.Tag.ToString() == "tahti")
334        {
335            maaliAani.Play();
336            MessageDisplay.Add("Keräsit sydämmen!");
337            kohde.Destroy();
338            pisteLaskuri.Value++;
339        }
340    }
341}
Note: See TracBrowser for help on using the repository browser.