source: 2015/24/OskariL/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1/Tasohyppelypeli1.cs @ 7703

Revision 7703, 11.1 KB checked in by karkaite, 7 years ago (diff)
Line 
1using Jypeli;
2using Jypeli.Controls;
3using Jypeli.Widgets;
4using Jypeli.Effects;
5using Jypeli.Content;
6using Jypeli.Assets;
7using Jypeli.GameObjects;
8
9public class Tasohyppelypeli1 : PhysicsGame
10{
11    const double nopeus = 10000;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    PlatformCharacter pelaaja1;
15    PlatformCharacter pelaaja2;
16
17    Image pelaajanKuva = LoadImage("Pulla");
18    Image pelaajan2Kuva = LoadImage("putin kännetty");
19    Image tahtiKuva = LoadImage("pacman");
20    Image parsakaaliKuva = LoadImage("parsakaali");
21    Image samppanjaKuva = LoadImage("samppanja");
22
23    SoundEffect maaliAani = LoadSoundEffect("maali");
24    IntMeter pisteLaskuri;
25
26    bool peliKaynnissa = true;
27
28    Timer liikutusajastin;
29
30    EasyHighScore topLista = new EasyHighScore();
31    int kenttaNro = 4;
32
33    public override void Begin()
34    {
35        LataaKentta();
36    }
37
38    void SeuraavaKentta()
39    {
40        kenttaNro++;
41        LataaKentta();
42    }
43    void LataaKentta()
44    {
45        ClearAll();
46        if (kenttaNro > 7)
47        {
48         Exit();
49        }
50        LuoKentta();
51        LisaaNappaimet();
52        Gravity = new Vector(0, -1900);
53
54        LuoPistelaskuri();
55        if (kenttaNro > 3)
56        {     
57           
58            Level.Background.CreateGradient(Color.ForestGreen, Color.Aquamarine);
59    }
60        Camera.Follow(pelaaja1);
61        Camera.ZoomFactor = 3.5;
62        Camera.StayInLevel = false;
63
64        liikutusajastin = new Timer();
65        liikutusajastin.Interval = 0.01;
66        liikutusajastin.Timeout += delegate
67        {
68            SiirraPelaajaaOikeammalle(pelaaja1);
69            SiirraPelaajaaOikeammalle(pelaaja2);
70        };
71        liikutusajastin.Start();
72
73        peliKaynnissa = true;
74    }
75
76    void SiirraPelaajaaOikeammalle(PlatformCharacter hahmo)
77    {
78        hahmo.Push(new Vector(nopeus, 0.0));
79
80    }
81    void LuoKentta()
82    {
83        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kartta" +kenttaNro);
84        ruudut.SetTileMethod(Color.Black, LisaaTaso);
85        ruudut.SetTileMethod(Color.DarkCyan, LisaaTahti);
86        ruudut.SetTileMethod(Color.Red, LisaaPelaaja);
87        ruudut.SetTileMethod(Color.Cyan, LisaaVihollinen);
88        ruudut.SetTileMethod(Color.Orange, LisaaPahis);
89        ruudut.SetTileMethod(Color.YellowGreen, LuoParsakaali);
90        ruudut.SetTileMethod(Color.Gold, LisaaPommi);
91        ruudut.SetTileMethod(Color.DarkAzure, LisaaPelaaja2);
92        ruudut.SetTileMethod(Color.Azure, LisaaSamppanja);
93        ruudut.SetTileMethod(Color.BloodRed, LisaaMaali);
94        ruudut.SetTileMethod(Color.DarkCyan, LisaaKuusikulmio);
95        ruudut.Optimize(Color.Black);
96        ruudut.Execute(20, 20);
97
98        Level.CreateLeftBorder();
99        Level.CreateTopBorder();
100        Level.CreateBottomBorder();
101        PhysicsObject oikeaReuna = Level.CreateRightBorder();
102        oikeaReuna.Tag = "oikea";
103
104        Level.Background.CreateGradient(Color.Aqua, Color.Azure);
105    }
106    void LisaaKuusikulmio(Vector paikka, double leveys, double korkeus)
107    {
108        PhysicsObject kuusikulmio = new PhysicsObject(leveys, korkeus);
109        kuusikulmio.Position = paikka;
110        kuusikulmio.Shape = Shape.Hexagon;
111        kuusikulmio.Color = Color.DarkRed;
112        kuusikulmio.Tag = "kuusikulmio";
113
114
115    }
116    void LisaaMaali(Vector paikka, double leveys, double korkeus)
117    {
118        PhysicsObject maali = new PhysicsObject(leveys, korkeus);
119        maali.Position = paikka;
120        maali.Shape = Shape.Heart;
121        maali.Color = Color.BloodRed;
122        maali.Tag = "maali";
123        maali.IgnoresCollisionResponse = true;
124        maali.IgnoresGravity = true;
125        maali.IgnoresExplosions = true;
126
127        Add(maali);
128    }
129    void LisaaTaso(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
132        taso.Position = paikka;
133        taso.Color = new Color(4, 146, 208);
134        taso.Tag = "seina";
135
136        Add(taso);
137    }
138    void LisaaTahti(Vector paikka, double leveys, double korkeus)
139    {
140        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
141        tahti.IgnoresCollisionResponse = true;
142        tahti.Position = paikka;
143        tahti.Image = tahtiKuva;
144        tahti.Tag = "tahti";
145        Add(tahti);
146    }
147    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
148    {
149        pelaaja1 = new PlatformCharacter(leveys, korkeus);
150        pelaaja1.Position = paikka;
151        pelaaja1.Mass = 3.25;
152        pelaaja1.Image = pelaajanKuva;
153        AddCollisionHandler(pelaaja1, "seina", TormaaTasoon);
154        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
155        AddCollisionHandler(pelaaja1, "vihu", TormaaTasoon);
156        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
157        AddCollisionHandler(pelaaja1, "pommi", Rajahdys);
158        AddCollisionHandler(pelaaja1, "samppanja", TormaaSamppanjaan);
159        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
160        pelaaja1.Tag = "pelaaja";
161        Add(pelaaja1);
162
163    }
164    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
165    {
166        pelaaja2 = new PlatformCharacter(leveys, korkeus);
167        pelaaja2.Position = paikka;
168        pelaaja2.Mass = 0.1;
169        pelaaja2.Image = pelaajan2Kuva;
170        AddCollisionHandler(pelaaja2, "seina", TormaaTasoon);
171        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
172        AddCollisionHandler(pelaaja2, "vihu", TormaaTasoon);
173        AddCollisionHandler(pelaaja2, "oikea", TormaaOikeaanReunaan);
174        AddCollisionHandler(pelaaja2, "pommi", Rajahdys);
175        AddCollisionHandler(pelaaja2, "samppanja", TormaaSamppanjaan);
176        AddCollisionHandler(pelaaja2, "maali", TormaaMaaliin);
177        pelaaja2.Tag = "pelaaja";
178
179        Add(pelaaja2);
180    }
181    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
182    {
183        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
184        vihollinen.Color = Color.Azure;
185        vihollinen.Shape = Shape.Octagon;
186        vihollinen.Position = paikka;
187        vihollinen.IgnoresGravity = true;
188        vihollinen.CanRotate = true;
189        vihollinen.Oscillate(new Vector(1, 1), korkeus * 1.5, 0.4);
190
191        Add(vihollinen);
192
193    }
194    void LisaaPommi(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject pommi = new PhysicsObject(leveys, korkeus);
197        pommi.Color = Color.Black;
198        pommi.Shape = Shape.Triangle;
199        pommi.Position = paikka;
200        pommi.IgnoresGravity = true;
201        pommi.CanRotate = true;
202        pommi.Tag = "pommi";
203
204        Add(pommi);
205
206
207    }
208    void LisaaPahis(Vector paikka, double leveys, double korkeus)
209    {
210
211        PhysicsObject pahis = new PhysicsObject(leveys, korkeus);
212        pahis.Color = Color.DarkRed;
213        pahis.Shape = Shape.Diamond;
214        pahis.Position = paikka;
215        pahis.IgnoresGravity = true;
216        pahis.CanRotate = true;
217        pahis.Oscillate(new Vector(0, 1), korkeus * 1.5, 0.3);
218
219        Add(pahis);
220
221    }
222    void LuoParsakaali(Vector paikka, double leveys, double korkeus)
223    {
224        PhysicsObject parsakaali = PhysicsObject.CreateStaticObject(leveys, korkeus);
225        parsakaali.IgnoresCollisionResponse = true;
226        parsakaali.Position = paikka;
227        parsakaali.Image = parsakaaliKuva;
228        parsakaali.Tag = "tahti";
229        Add(parsakaali);
230
231    }
232    void LisaaSamppanja(Vector paikka, double leveys, double korkeus)
233    {
234
235        PhysicsObject samppanja = PhysicsObject.CreateStaticObject(leveys, korkeus);
236        samppanja.IgnoresCollisionResponse = true;
237        samppanja.Position = paikka;
238        samppanja.Image = samppanjaKuva;
239        samppanja.Tag = "samppanja";
240        Add(samppanja);
241
242
243    }
244    void LisaaNappaimet()
245    {
246
247        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
248        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
249        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
250        Keyboard.Listen(Key.Space, ButtonState.Pressed, Begin, "Aloita alusta");
251
252        Keyboard.Listen(Key.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
253        Keyboard.Listen(Key.Space, ButtonState.Pressed, Begin, "Aloita alusta");
254        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
255    }
256    void Liikuta(PlatformCharacter hahmo, double nopeus)
257    {
258        hahmo.Walk(nopeus);
259    }
260    void Hyppaa(PlatformCharacter hahmo, double nopeus)
261    {
262        hahmo.ForceJump(nopeus);
263    }
264
265    void TormaaParsakaaliin(PhysicsObject hahmo, PhysicsObject tahti)
266    {
267        maaliAani.Play();
268        pisteLaskuri.Value += 3;
269        MessageDisplay.Add("Pooping-whirling!!!");
270        tahti.Destroy();
271    }
272
273    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject parsakaali)
274    {
275        maaliAani.Play();
276        pisteLaskuri.Value += 1;
277        MessageDisplay.Add("Toppest kek.");
278        parsakaali.Destroy();
279    }
280    void LuoPistelaskuri()
281    {
282        pisteLaskuri = new IntMeter(0);
283
284        Label pisteNaytto = new Label();
285        pisteNaytto.X = Screen.Left + 350;
286        pisteNaytto.Y = Screen.Top - 150;
287        pisteNaytto.TextColor = Color.Black;
288        pisteNaytto.Color = Color.Transparent;
289        pisteNaytto.Title = "Pisteet:";
290        pisteNaytto.BindTo(pisteLaskuri);
291        Add(pisteNaytto);
292    }
293
294    void TormaaMaaliin(PhysicsObject tormaaja, PhysicsObject maali)
295    {
296        SeuraavaKentta();
297    }
298
299    void TormaaTasoon(PhysicsObject tormaaja, PhysicsObject kohde)
300    {
301
302        if (peliKaynnissa)
303        {
304            MessageDisplay.Add("Kuolit! :(");
305
306            Keyboard.Disable(Key.Up);
307            liikutusajastin.Stop();
308            peliKaynnissa = false;
309
310            topLista.EnterAndShow(pisteLaskuri.Value);
311
312            LataaKentta();
313        }
314
315
316    }
317
318    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
319    {
320        if (pisteLaskuri.Value > 1500)
321        {
322            topLista.Show();
323            MessageDisplay.Add("Pääsit kentän läpi");
324            Timer.SingleShot(5.0, Continue);
325            liikutusajastin.Stop();
326            pisteLaskuri.Value += 10;
327            Begin();
328        }
329        else if (pisteLaskuri.Value < 1500)
330        {
331            topLista.Show();
332            MessageDisplay.Add("Hävisit! :)");
333            Begin();
334
335        }
336    }
337    void TormaaSamppanjaan(PhysicsObject tormaaja, PhysicsObject samppanja)
338    {
339        MessageDisplay.Add("Samppanjaa!!! =]");
340        pisteLaskuri.Value += 15;
341        samppanja.Destroy();
342    }
343    void Rajahdys(PhysicsObject hahmo, PhysicsObject pommi)
344    {
345        Explosion rajahdys = new Explosion(100);
346        rajahdys.Position = pommi.Position;
347        rajahdys.Speed = 150.0;
348        rajahdys.Force = 32;
349        rajahdys.ShockwaveColor = new Color(4, 140, 228);
350        Add(rajahdys);
351
352    }
353
354}
Note: See TracBrowser for help on using the repository browser.