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

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