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

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