source: 2012/24/NikiV/JungleRun/JungleRun/JungleRun/JungleRun.cs @ 3130

Revision 3130, 13.5 KB checked in by nieekrva, 10 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class JungleRun : PhysicsGame
10{
11    ScoreList topLista = new ScoreList(10, false, 0);
12    // muut attribuutit
13
14
15    // alustuksia jne.
16
17
18
19    Image paikallaanVasemmalle = LoadImage("kokeilu");
20    Image paikallaanOikealle;
21
22    Image[] kavelyVasemmalle = LoadImages("kokeilu");
23    Image[] kavelyOikealle;
24
25    DoubleMeter voimaMittari;
26
27    int pelaajanTerveys = 10;
28
29    int kentanVaihto = 1;
30
31    const double nopeus = 200;
32    const double hyppyNopeus = 1000;
33    const int RUUDUN_KOKO = 50;
34
35    IntMeter pisteLaskuri;
36
37    PlatformCharacter pelaaja1;
38
39    Image pelaajanKuva = LoadImage("kokeilu");
40    Image tahtiKuva = LoadImage("tahti");
41    Image sydanKuva = LoadImage("sydan");
42    Image maaKuva = LoadImage("maapala");
43    Image temppeliKuva = LoadImage("temppeliosa");
44    Image övihu = LoadImage("ötökkä");
45    Image rahaKuva = LoadImage("raha");
46    Image pomoKuva = LoadImage("pomo");
47
48    SoundEffect maaliAani = LoadSoundEffect("maali");
49
50    public override void Begin()
51    {
52        paikallaanOikealle = Image.Mirror(paikallaanVasemmalle);
53        kavelyOikealle = Image.Mirror(kavelyVasemmalle);
54        if (DataStorage.Exists("pisteet.xml"))
55            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
56       
57
58        // ...
59
60        MultiSelectWindow valikko = new MultiSelectWindow("Jungle Run",
61"Aloita peli", "Parhaat pisteet", "Lopeta");
62        valikko.ItemSelected += PainettiinValikonNappia;
63        valikko.Color = Color.Green;
64
65        Add(valikko);
66    }
67
68    void luoKentta(string kenttaTiedostonNimi)
69    {
70       
71        LuoLaskuri();
72        TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi);
73        kentta.SetTileMethod('#', lisaaTaso);
74        kentta.SetTileMethod('*', lisaaTahti);
75        kentta.SetTileMethod('N', lisaaPelaaja);
76        kentta.SetTileMethod('s', lisaasydan);
77        kentta.SetTileMethod('m', LisaaMaa);
78        kentta.SetTileMethod('o', LisaaOsa);
79        kentta.SetTileMethod('v', Lisaavihu);
80        kentta.SetTileMethod('r', Lisaaraha);
81        kentta.SetTileMethod('M', LisaaMaali);
82        kentta.SetTileMethod('P', Lisaapomo);
83        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
84        Level.CreateBorders();
85
86       
87        Gravity = new Vector(0, -1000);
88
89        LuoMittarit();
90        lisaaNappaimet();
91
92        Camera.Follow(pelaaja1);
93        Camera.ZoomFactor = 1.2;
94        Camera.StayInLevel = true;
95
96        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
97
98    }
99
100    void LisaaMaali(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
103        maali.Position = paikka;
104        maali.Tag = "maali";
105        maali.Image = LoadImage("maaliKuva");
106        Add(maali);
107    }
108
109    void lisaaTaso(Vector paikka, double leveys, double korkeus)
110    {
111        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
112        taso.Position = paikka;
113        taso.Color = Color.Green;
114        Add(taso);
115    }
116
117    void lisaaTahti(Vector paikka, double leveys, double korkeus)
118    {
119        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
120        tahti.IgnoresCollisionResponse = true;
121        tahti.Position = paikka;
122        tahti.Image = tahtiKuva;
123        tahti.Tag = "tahti";
124        Add(tahti);
125    }
126
127    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
128    {
129        pelaaja1 = new PlatformCharacter(leveys, korkeus + 20);
130        pelaaja1.Position = paikka;
131        pelaaja1.Mass = 4.0;
132        pelaaja1.Image = pelaajanKuva;
133        pelaaja1.Weapon = new PlasmaCannon(20, 5);
134        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
135
136        pelaaja1.RightIdleAnimation = new Animation(paikallaanVasemmalle);
137        pelaaja1.LeftIdleAnimation = new Animation(paikallaanOikealle);
138
139        pelaaja1.RightWalkingAnimation = new Animation(kavelyVasemmalle);
140        pelaaja1.LeftWalkingAnimation = new Animation(kavelyOikealle);
141        AddCollisionHandler(pelaaja1, "ötökkä", PelaajaOsuu);
142        AddCollisionHandler(pelaaja1, "sydan", PelaajaTormasiSydameen);
143        AddCollisionHandler(pelaaja1, "raha", CollisionHandler.AddMeterValue(pisteLaskuri, 1));
144        AddCollisionHandler(pelaaja1, "raha", CollisionHandler.DestroyTarget);
145        AddCollisionHandler(pelaaja1, "maali", PelaajaMaalissa);
146
147        Add(pelaaja1);
148
149    }
150
151    void lisaaNappaimet()
152    {
153        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
154        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
155        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
156
157        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
158        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
159        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
160        Keyboard.Listen(Key.A, ButtonState.Down, AmmuAseella, "Ammu");
161        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
162
163        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
164        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
165        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
166
167        ControllerOne.Listen(Button.Y, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
168        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "Ammu");
169        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1,
170LiikutaAsetta, "Liikuta asetta tattia pyörittämällä.");
171
172        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
173    }
174
175    void liikuta(PlatformCharacter hahmo, double nopeus)
176    {
177        hahmo.Walk(nopeus);
178    }
179
180    void hyppaa(PlatformCharacter hahmo, double nopeus)
181    {
182        if (hahmo.Jump(nopeus))
183            MediaPlayer.Play("12 Raita 12");
184    }
185
186
187    void lisaasydan(Vector paikka, double leveys, double korkeus)
188    {
189        PhysicsObject sydan = PhysicsObject.CreateStaticObject(leveys, korkeus);
190        sydan.IgnoresCollisionResponse = true;
191        sydan.Position = paikka;
192        sydan.Image = sydanKuva;
193        sydan.Tag = "sydan";
194
195
196        Add(sydan);
197
198
199    }
200
201    void Lisaaraha(Vector paikka, double leveys, double korkeus)
202    {
203        PhysicsObject raha = PhysicsObject.CreateStaticObject(leveys, korkeus);
204        raha.IgnoresCollisionResponse = true;
205        raha.Position = paikka;
206        raha.Image = rahaKuva;
207        raha.Tag = "raha";
208        Add(raha);
209    }
210
211    void PelaajaTormasiSydameen(PhysicsObject hahmo, PhysicsObject kohde)
212    {
213        maaliAani.Play();
214        MessageDisplay.Add("Keräsit sydämmen!");
215        kohde.Destroy();
216        ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.2);
217
218        if (voimaMittari.Value < 10)
219        {
220            voimaMittari.Value++;
221        }
222    }
223
224    void LisaaMaa(Vector paikka, double leveys, double korkeus)
225    {
226        PhysicsObject maa = PhysicsObject.CreateStaticObject(leveys, korkeus);
227        maa.Position = paikka;
228        maa.Image = maaKuva;
229        maa.Tag = "maapala";
230        Add(maa);
231
232    }
233
234
235    void LuoMittarit()
236    {
237        voimaMittari = new DoubleMeter(10);
238        voimaMittari.MaxValue = 10;
239        ProgressBar voimaPalkki = new ProgressBar(150, 10);
240        voimaPalkki.BindTo(voimaMittari);
241        Add(voimaPalkki);
242
243        voimaPalkki.X = Screen.Right - 150;
244        voimaPalkki.Y = Screen.Top - 20;
245        voimaPalkki.Angle = Angle.RightAngle;
246        voimaPalkki.BarColor = Color.Green;
247        voimaPalkki.BorderColor = Color.White;
248        voimaPalkki.Angle = Angle.FromDegrees(180);
249
250        // Kun voima loppuu, kutsutaan VoimaLoppui-aliohjelmaa
251        voimaMittari.LowerLimit += VoimaLoppui;
252
253
254
255        Keyboard.Listen(Key.Space, ButtonState.Pressed,
256                        VahennaVoimia, "Vähennä pelaajan voimia");
257    }
258
259    void VahennaVoimia()
260    {
261        voimaMittari.Value--;
262    }
263
264    void VoimaLoppui(double mittarinArvo)
265    {
266         pelaaja1.Destroy();
267        ParhaatPisteet();
268       
269    }
270
271    void ParhaatPisteet()
272    {
273        HighScoreWindow topIkkuna = new HighScoreWindow(
274                             "Parhaat pisteet",
275                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
276                             topLista, pisteLaskuri.Value);
277        topIkkuna.Closed += TallennaPisteet;
278        Add(topIkkuna);
279    }
280
281    void LisaaOsa(Vector paikka, double leveys, double korkeus)
282    {
283        PhysicsObject temppeliosa = PhysicsObject.CreateStaticObject(leveys, korkeus);
284        temppeliosa.Position = paikka;
285        temppeliosa.Image = temppeliKuva;
286        temppeliosa.Tag = "temppeliosa";
287        Add(temppeliosa);
288
289    }
290
291    void Lisaavihu(Vector paikka, double leveys, double korkeus)
292    {
293        PhysicsObject vihu = new PhysicsObject(leveys, 0.375 * korkeus);
294        vihu.Shape = Shape.Circle;
295        vihu.Position = new Vector(paikka.X, paikka.Y - korkeus / 2 + (vihu.Height / 2));
296        vihu.Image = övihu;
297        vihu.Tag = "ötökkä";
298        List<Vector> polku = new List<Vector>();
299        polku.Add(new Vector(paikka.X - leveys, vihu.Y + 2));
300        polku.Add(new Vector(paikka.X + leveys, vihu.Y + 2));
301        vihu.CanRotate = true;
302        PathFollowerBrain satunnaisAivot = new PathFollowerBrain(polku.ToArray());
303        satunnaisAivot.Speed = 100;
304        satunnaisAivot.Loop = true;
305        //satunnaisAivot.ChangeMovementSeconds = 0.1;
306        vihu.Brain = satunnaisAivot;
307        satunnaisAivot.Active = true;
308
309        Add(vihu);
310    }
311
312
313    void PainettiinValikonNappia(int valinta)
314    {
315        switch (valinta)
316        {
317            case 0:
318                AloitaPeli();
319                break;
320            case 1:
321                ParhaatPisteet();
322                break;
323            case 2:
324                Exit();
325                break;
326        }
327    }
328
329    void AloitaPeli()
330    {
331       
332
333        SeuraavaKentta(1);
334
335    }
336
337    void AmmuAseella()
338    {
339        PhysicsObject ammus = pelaaja1.Weapon.Shoot();
340
341        if (ammus != null)
342        {
343            ammus.Size *= 3;
344            ammus.Color = Color.Blue;
345        }
346    }
347
348    void LiikutaAsetta(AnalogState tatinTila)
349    {
350        pelaaja1.Weapon.Angle = tatinTila.StateVector.Angle;
351
352    }
353
354    void PelaajaOsuu(PhysicsObject pelaaja, PhysicsObject kohde)
355    {
356        voimaMittari.Value--;
357    }
358
359
360    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
361    {
362        ammus.Destroy();
363        Explosion rajahdys = new Explosion(10);
364        rajahdys.Position = ammus.Position;
365        Add(rajahdys);
366        if (kohde.Tag == "ötökkä")
367        {
368            kohde.Destroy();
369        }
370    }
371
372
373
374    void LuoLaskuri()
375    {
376        pisteLaskuri = new IntMeter(0);
377
378        Label pisteNaytto = new Label();
379        pisteNaytto.X = Screen.Left + 100;
380        pisteNaytto.Y = Screen.Top - 100;
381        pisteNaytto.TextColor = Color.Black;
382        pisteNaytto.Color = Color.White;
383
384        pisteNaytto.BindTo(pisteLaskuri);
385        Add(pisteNaytto);
386
387        Label pisteTeksti = new Label("Pisteitä: ");
388        pisteTeksti.X = Screen.Left + 50;
389        pisteTeksti.Y = Screen.Top - 100;
390        pisteTeksti.TextColor = Color.Black;
391        pisteTeksti.Color = Color.White;
392        Add(pisteTeksti);
393    }
394
395    void TallennaPisteet(Window sender)
396    {
397        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
398        ClearAll();
399        AloitaPeli();
400    }
401    void SeuraavaKentta(int kentanNro)
402    {
403        ClearAll();
404
405
406
407        if (kentanNro == 1) luoKentta("kentta1");
408        else if (kentanNro == 2) luoKentta("kentta2");
409        else if (kentanNro == 3) luoKentta("kentta3");
410        else if (kentanNro == 4) luoKentta("kentta4");
411        else if (kentanNro == 4) Exit();
412    }
413    void LuoKentta(string kenttaTiedostonNimi)
414    {
415        TileMap ruudut = TileMap.FromFile(kenttaTiedostonNimi);
416        //tässä luodaan kenttä tekstitiedostosta
417    }
418
419    void PelaajaMaalissa(PhysicsObject pelaaja, PhysicsObject maali)
420    {
421        kentanVaihto++;
422        SeuraavaKentta(kentanVaihto);
423    }
424    void Lisaapomo(Vector paikka, double leveys, double korkeus)
425    {
426        PhysicsObject pomo = new PhysicsObject(leveys, korkeus *2);
427        pomo.Shape = Shape.Circle;
428        pomo.Position = new Vector(paikka.X, paikka.Y - korkeus / 2 + (pomo.Height / 2));
429        pomo.Image = pomoKuva;
430        pomo.Tag = "pomo";
431        List<Vector> polku = new List<Vector>();
432        polku.Add(new Vector(paikka.X - leveys, pomo.Y + 2));
433        polku.Add(new Vector(paikka.X + leveys, pomo.Y + 2));
434        pomo.CanRotate = false;
435        //PathFollowerBrain satunnaisAivot = new PathFollowerBrain(polku.ToArray());
436        //satunnaisAivot.Speed = 100;
437        //satunnaisAivot.Loop = true;
438        ////satunnaisAivot.ChangeMovementSeconds = 0.1;
439        //pomo.Brain = satunnaisAivot;
440        //satunnaisAivot.Active = true;
441
442        Add(pomo);
443    }
444
445}
Note: See TracBrowser for help on using the repository browser.