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

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