source: 2015/30/SonjaH/GorillaPeli2/GorillaPeli2/GorillaPeli2/GorillaPeli2.cs @ 7085

Revision 7085, 11.2 KB checked in by soonhuot, 4 years ago (diff)

Uusi versio apinapelistä.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9///@author Sonja Huotari
10///@version 8.12.2015
11/// <summary>
12/// Pelissä kerätään banaaneita ja väistellään öljytynnyreitä.
13/// </summary>
14public class GorillaPeli2 : PhysicsGame
15{
16    Vector nopeusVasemmalle = new Vector(-200, 0);
17    Vector nopeusOikealle = new Vector(200, 0);
18    PlatformCharacter gorilla;
19    DoubleMeter elamaLaskuri;
20    private Vector[] vaikeus = new Vector[6];
21    private int index = 0;
22
23
24
25    /// <summary>
26    /// Pelin pääohjelma.
27    /// </summary>
28    public override void Begin()
29    {
30        // Vaikeutetaan peliä ajan kuluessa
31        for (int i = 0; i < 6; i++)
32        {
33            vaikeus[i] = new Vector(0, -40 - (i * 20));
34        }
35        LuoKentta();
36        LuoGorilla(200);
37        LuoOhjetekstikentta();
38
39        LuoOhjaimet();
40        LuoPistelaskuri();
41        LuoElamaLaskuri();
42     
43        AloitaPeli();
44        VoititPelin();
45    }
46
47    ///<summary>
48    ///Aliohjelma, jossa luodaan kentän vaikeustason muutos.
49    /// </summary>
50    private void LisaaVaikeustasoa()
51    {
52        Timer aikaLaskuri = new Timer();
53        aikaLaskuri.Start();
54        aikaLaskuri.Interval = 30;
55        aikaLaskuri.Timeout += delegate { if (index == vaikeus.Length) aikaLaskuri.Stop(); Gravity = vaikeus[index]; index++; };
56    }
57
58    /// <summary>
59    /// Aliohjelma, jossa luodaan kenttä.
60    /// </summary>
61    private void LuoKentta()
62    {
63
64        Camera.ZoomToLevel();
65
66        PhysicsObject oikeaReuna = Level.CreateRightBorder();
67        oikeaReuna.X = Screen.Right + 100;
68        oikeaReuna.Y = Screen.Right - 650;
69        oikeaReuna.Restitution = 1.0;
70        oikeaReuna.IsVisible = false;
71
72        PhysicsObject vasenReuna = Level.CreateLeftBorder();
73        vasenReuna.X = Screen.Left - 100;
74        vasenReuna.Y = Screen.Left + 550;
75        vasenReuna.Restitution = 1.0;
76        vasenReuna.IsVisible = false;
77
78        PhysicsObject alaReuna = Level.CreateBottomBorder();
79        alaReuna.X = 0;
80        alaReuna.Y = Camera.Y - Level.Height / 2 - 20;
81        alaReuna.Restitution = 1.0;
82        alaReuna.IsVisible = false;
83
84        Level.Background.CreateGradient(Color.LightCyan, Color.Azure);
85
86        Camera.ZoomToLevel();
87    }
88
89    private void LuoElamaLaskuri()
90    {
91        elamaLaskuri = new DoubleMeter(10);
92        elamaLaskuri.MaxValue = 10;
93
94        ProgressBar elamaPalkki = new ProgressBar(200, 30);
95        elamaPalkki.X = Screen.Right - 200;
96        elamaPalkki.Y = Screen.Top - 100;
97        elamaPalkki.BindTo(elamaLaskuri);
98        elamaPalkki.BarColor = Color.Black;
99        elamaPalkki.BarImage = LoadImage("heart_health");
100
101        Add(elamaPalkki);
102    }
103
104    /// <summary>
105    /// Aliohjelma, joka lopettaa pelin.
106    /// </summary>
107    /// <param name="Gorilla">Gorilla</param>
108    private void ElamaLoppui(PhysicsObject Gorilla)
109    {
110        gorilla.Destroy();
111
112        MessageDisplay.Add("Hävisit, hää hää");
113        MessageDisplay.X = Screen.Right;
114        MessageDisplay.Y = Screen.Top + 200;
115        MessageDisplay.Color = Color.Transparent;
116        MessageDisplay.TextColor = Color.Black;
117        MessageDisplay.BorderColor = Color.Transparent;
118        MessageDisplay.BackgroundColor = Color.Transparent;
119    }
120
121    ///<summary>
122    ///Aliohjelma, jossa luodaan ohjetekstikenttä.
123    /// </summary>
124    private void LuoOhjetekstikentta()
125    {
126        Label ohjetekstikentta = new Label(1000.0, 600.0, "Syö banaanit ja väistele alueen omistavan\n palmuöljyyrityksen tappavia tynnyreitä.");
127        ohjetekstikentta.X = Screen.Right - 700.0;
128        ohjetekstikentta.Y = Screen.Top - 200.0;
129        ohjetekstikentta.Color = Color.Transparent;
130        ohjetekstikentta.TextColor = Color.Black;
131        ohjetekstikentta.BorderColor = Color.Transparent;
132        ohjetekstikentta.Font = Font.DefaultLargeBold;
133
134        Add(ohjetekstikentta);
135
136        Timer ajastin = new Timer();
137        ajastin.Interval = 7.0; // Kuinka usein ajastin "laukeaa" sekunneissa
138        ajastin.Timeout += delegate { PoistaOhjetekstikentta(ohjetekstikentta); }; // Aliohjelma, jota kutsutaan 7 sekunnin päästä aloituksetsta
139        ajastin.Start();
140    }
141
142    /// <summary>
143    /// Aliohjelma, joka poistaa ohjetekstikentän.
144    /// </summary>
145    /// <param name="ohjetekstikentta">tekstikenttä joka poistetaan</param>
146    private void PoistaOhjetekstikentta(Label ohjetekstikentta)
147    {
148        ohjetekstikentta.Destroy();
149    }
150   
151    ///<summary>
152    ///Aliohjelma, jossa aloitetaan peli.
153    /// </summary>
154    private void AloitaPeli()
155    {
156        // Luodaan banaaneja.
157        Timer ajastinBanaani = new Timer();
158        ajastinBanaani.Interval = 2.0;
159        ajastinBanaani.Timeout += LisaaBanaaneja;
160        ajastinBanaani.Start();
161
162        // Luodaan pommeja.
163        Timer ajastinPommi = new Timer();
164        ajastinPommi.Interval = 1.5;
165        ajastinPommi.Timeout += LisaaPommeja;
166        ajastinPommi.Start();
167
168        Gravity = new Vector(0, -400);
169    }
170
171    /// <summary>
172    /// Aliohjelma, kun 10 banskua on kerätty.
173    /// </summary>
174    private void VoititPelin()
175    {
176        MessageDisplay.Add("Voitit pelin, gorillan masu on nyt täynnä :)");
177        MessageDisplay.X = Screen.Right;
178        MessageDisplay.Y = Screen.Top + 200;
179        MessageDisplay.Color = Color.Transparent;
180        MessageDisplay.TextColor = Color.Black;
181        MessageDisplay.BorderColor = Color.Transparent;
182        MessageDisplay.BackgroundColor = Color.Transparent;
183
184
185
186    }
187
188    /// <summary>
189    /// Aliohjelma, jossa luodaan banaani.
190    /// </summary>
191    /// <param name="bananinLeveys">Banaanin leveys</param>
192    /// <param name="banaaniKorkeus">Banaanin korkeus</param>
193    /// <param name="y">Banaanin y-koordinaatti</param>
194    /// <returns>Banaani</returns>
195    private PhysicsObject LuoBanaani(double leveys, double korkeus, double y)
196    {
197        PhysicsObject banaani = new PhysicsObject(40, 60, Shape.Rectangle);
198        banaani.Image = LoadImage("bansku");
199        banaani.X = RandomGen.NextDouble(Level.Left, Level.Right);
200        banaani.Y = y;
201        banaani.Restitution = 0.0;
202        banaani.CollisionIgnoreGroup = 1;
203        banaani.Color = Color.Yellow;
204
205        banaani.IgnoresExplosions = true;
206
207        Add(banaani);
208        AddCollisionHandler(banaani, BanaaniTormasi);
209        return banaani;
210    }
211   
212    /// <summary>
213    /// Aliohjelma,jossa luodaan törmäys banaanin ja gorillan välillä.
214    /// </summary>
215    /// <param name="banaani">banaani</param>
216    /// <param name="kohde">gorilla</param>
217    private void BanaaniTormasi(PhysicsObject banaani, PhysicsObject kohde)
218    {
219        if (kohde.Tag.ToString() == "gorilla")
220        {
221            pisteLaskuri.Value += 1;
222        }
223
224        if (pisteLaskuri.Value == 10.0)
225        {
226            VoititPelin();
227        }
228        banaani.Destroy();
229    }
230    IntMeter pisteLaskuri;
231
232    /// <summary>
233    /// ALiohjelma, jossa luodaan pistelaskuri.
234    /// </summary>
235    private void LuoPistelaskuri()
236    {
237        pisteLaskuri = new IntMeter(0);
238         
239
240        Label pisteNaytto = new Label();
241        pisteNaytto.X = Screen.Left + 100;
242        pisteNaytto.Y = Screen.Top - 100;
243        pisteNaytto.TextColor = Color.Black;
244        pisteNaytto.Color = Color.White;
245        pisteNaytto.Title = "Pisteet";
246       
247
248        pisteNaytto.BindTo(pisteLaskuri);
249        Add(pisteNaytto);
250    }
251
252
253    /// <summary>
254    /// Aliohjelma, jossa luodaan monta banaania.
255    /// </summary>
256    private void LisaaBanaaneja()
257    {
258        LuoBanaani(53, 81, Level.Top);
259    }
260
261    /// <summary>
262    /// Aliohjelma, jossa luodaan pommi.
263    /// </summary>
264    /// <param name="pomminLeveys">Pommin leveys</param>
265    /// <param name="pomminKorkeus">Pommin korkeus</param>
266    /// <param name="x">pommin x-koordinaatti</param>
267    /// <param name="y">pommin y-koordinaatti</param>
268    /// <returns>Pommi</returns>
269    private PhysicsObject LuoPommi(double pomminLeveys, double pomminKorkeus, double x, double y)
270    {
271
272        PhysicsObject pommi = new PhysicsObject(pomminLeveys, pomminKorkeus, Shape.Circle);
273        pommi.Image = LoadImage("pommiKuva");
274        pommi.X = RandomGen.NextDouble(Level.Left, Level.Right);
275        pommi.Y = Level.Top - 10.0;
276        pommi.Color = Color.Black;
277        pommi.Restitution = 0.0;
278        pommi.CollisionIgnoreGroup = 1;
279        pommi.Tag = "pommi";
280
281        Add(pommi);
282        AddCollisionHandler(pommi, PommiOsui);
283        return pommi;
284    }
285
286    /// <summary>
287    /// Aliohjelma, jossa luodaan monta pommia.
288    /// </summary>
289    private void LisaaPommeja()
290    {
291        LuoPommi(45.0, 70.0, 100, Level.Top);
292    }
293
294    /// <summary>
295    /// Aliohjelma, jossa luodaan gorilla.
296    /// </summary>
297    /// <param name="x">Gorillan x-koordinaatti</param>
298    /// <returns>Gorilla</returns>
299    private void LuoGorilla(double x)
300    {
301        gorilla = new PlatformCharacter(200, 200, Shape.Rectangle);
302        gorilla.Image = LoadImage("orangutan");
303        gorilla.Shape = Shape.Circle;
304        gorilla.Color = Color.Blue;
305        gorilla.X = x;
306        gorilla.Y = Level.Bottom + 60;
307        gorilla.Tag = "gorilla";
308
309        Add(gorilla);
310        //AddCollisionHandler(gorilla, "pommi", PommiOsui);
311    }
312
313    /// <summary>
314    /// Asetetaan gorillalle ohjaimet.
315    /// </summary>
316    private void LuoOhjaimet()
317    {
318
319        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Pelaaja: Liikuta gorillaa vasemmalle", gorilla, -900.0);
320        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Pelaaja: Liikuta gorillaa oiekalle", gorilla, 900.0);
321        Keyboard.Listen(Key.Up, ButtonState.Released, Hyppaa, null, gorilla);
322
323        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
324    }
325
326    /// <summary>
327    /// Aliohjelma, jossa käsitellään pommin törmäys gorillaan.
328    /// </summary>
329    /// <param name="pommi">Pommi</param>
330    /// <param name="kohde">Törmäyksen kohde</param>
331    private void PommiOsui(PhysicsObject pommi, PhysicsObject kohde)
332    {
333        Explosion rajahdys = new Explosion(200);
334        rajahdys.Position = pommi.Position;
335        rajahdys.UseShockWave = false;
336
337        Add(rajahdys);
338
339        if ((string)kohde.Tag == "gorilla")
340        {
341            elamaLaskuri.Value -= 2;
342
343
344            if (elamaLaskuri.Value <= 0)
345            {
346                ElamaLoppui(gorilla);
347            }
348        }
349        pommi.Destroy();     
350
351    }
352
353
354    /// <summary>
355    /// Aliohjelma jossa asetetaan gorillalle nopeus.
356    /// </summary>
357    /// <param name="gorilla">Gorilla</param>
358    /// <param name="nopeus">GOrillan nopeus</param>
359    private void AsetaNopeus(PlatformCharacter gorilla, double nopeus)
360    {
361       
362        gorilla.Walk(nopeus);
363
364    }
365
366    /// <summary>
367    /// Aliohjelma jossa luodaan gorillalle hyppy-ominaisuus.
368    /// </summary>
369    /// <param name="gorilla">Gorilla</param>
370    private void Hyppaa(PlatformCharacter gorilla)
371    {
372        gorilla.Jump(700);
373    }
374}
375
Note: See TracBrowser for help on using the repository browser.