source: 2015/26/TopiL/Wanha 2012/Spike Fall/Spike Fall/Spike Fall/Spike_Fall.cs @ 6371

Revision 6371, 15.7 KB checked in by tolappal, 5 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
9public class Spike_Fall : PhysicsGame
10{
11
12    public override void Begin()
13    {
14        SetWindowSize(1280, 1024, true);
15        Valikko();
16    }
17
18   
19
20    // "Räjähdys"juuba
21    ExplosionSystem es;
22
23    // Alkuvalikko
24    void Valikko()
25    {
26        ClearAll();
27        MultiSelectWindow alkuValikko = new MultiSelectWindow("Alkuvalikko",
28        "Pelaa peliä", "Lopeta");
29        Add(alkuValikko);
30        alkuValikko.ItemSelected += PainettiinValikonNappia;
31    }
32
33    // Menu
34    void PainettiinValikonNappia(int valinta)
35    {
36        switch (valinta)
37        {
38            case 0:
39                AloitaPeli();
40                break;
41            case 1:
42                Exit();
43                break;
44        }
45    }
46
47    // Hävitty peli
48    void LopetaPeli()
49    {
50        Keyboard.DisableAll();
51        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
52        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, null);
53    }
54
55
56    // Tawaraa
57    void AloitaPeli()
58    {
59        ClearAll();
60       
61
62        Timer.SingleShot(1, LuoAikaLaskuri);
63        Timer.SingleShot(1, AjastinPiikit);
64        Timer.SingleShot(1, AjastinKisu);
65
66        Gravity = new Vector(0, -800);
67
68        Level.CreateBorders(1.0, true);
69        Level.Background.Color = Color.Black;
70
71        Camera.ZoomToLevel();
72
73
74        // Veri-effectin tippuminen
75        Wind = new Vector(0, -300);
76        es = new ExplosionSystem(LoadImage("veri"), 3000);
77        es.MaxLifetime = 15;
78        es.MinLifetime = 10;
79        es.MinScale = 20;
80        es.MaxScale = 30;
81        es.MaxVelocity = 30;
82        es.MinVelocity = 5;
83        es.MaxAcceleration = 40;
84        es.MinAcceleration = 30;
85        es.IgnoreWind = false;
86        Add(es);
87
88        CollisionShapeParameters parameters = new CollisionShapeParameters();
89        parameters.DistanceGridSpacing = 1;
90        parameters.MaxVertexDistance = 1;
91
92        PhysicsObject paa = new PhysicsObject(35, 40, Shape.Circle, parameters);
93        paa.CollisionIgnoreGroup = 1;
94        paa.Color = Color.Silver;
95        Add(paa);
96
97        paa.MaxVelocity = 500;
98
99        // Tästä voi vaihtaa koko hahmon (vartalon) kokoa
100        // paa.Width = ruumiinosien paksuus (suurempi luku = ohuempia)
101        // paa.Height = ruumiinosien pituus ( pienempi = lyhyempiä)
102        PhysicsObject vartalo = new PhysicsObject(paa.Width / 2.75, paa.Height * 2.25, Shape.Rectangle, parameters);
103        vartalo.Position = paa.Position + new Vector(0, -paa.Height / 2 - vartalo.Height / 2);
104        vartalo.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
105        Add(vartalo);
106        AxleJoint vartaloLiitos = new AxleJoint(paa, vartalo, new Vector(vartalo.X, vartalo.Top));
107        vartaloLiitos.Softness = 0.05;
108        Add(vartaloLiitos);
109
110        AddCollisionHandler(paa, "piikki", delegate(PhysicsObject p, PhysicsObject piikki)
111        {
112            es.AddEffect(p.Position, 50);
113            vartaloLiitos.Destroy();
114            LopetaPeli();
115        });
116
117        // Kädet
118        PhysicsObject vasenKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 4, Shape.Rectangle, parameters);
119        vasenKasi.Angle = vartalo.Angle + Angle.FromDegrees(-15);
120        vasenKasi.Top = vartalo.Top;
121        vasenKasi.Right = vartalo.Left;
122        vasenKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
123        Add(vasenKasi);
124        AxleJoint vasenKasiLiitos = new AxleJoint(vartalo, vasenKasi, new Vector(vartalo.Left, vartalo.Top));
125        vasenKasiLiitos.Softness = 0.6;
126        vasenKasi.CollisionIgnoreGroup = 2;
127        Add(vasenKasiLiitos);
128
129        AddCollisionHandler(vasenKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
130        {
131            es.AddEffect(vasenKasiLiitos.AxlePoint, 50);
132            vasenKasiLiitos.Destroy();
133        });
134
135
136 
137
138
139
140
141        PhysicsObject vasenKasiKammen = new PhysicsObject(vartalo.Width, vartalo.Height / 2.5, Shape.Rectangle, parameters);
142        vasenKasiKammen.Angle = vartalo.Angle + Angle.FromDegrees(-15);
143        vasenKasiKammen.Top = vartalo.Top;
144        vasenKasiKammen.Right = vartalo.Left;
145        vasenKasiKammen.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
146        Add(vasenKasiKammen);
147        AxleJoint vasenKasiKammenLiitos = new AxleJoint(vasenKasi, vasenKasiKammen, new Vector(0, vasenKasiKammen.Height / 2));
148        vasenKasiKammenLiitos.Softness = 0.05;
149        vasenKasiKammen.CollisionIgnoreGroup = 2;
150        Add(vasenKasiKammenLiitos);
151
152        AddCollisionHandler(vasenKasiKammen, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
153        {
154            es.AddEffect(vasenKasiKammenLiitos.AxlePoint, 50);
155            vasenKasiKammenLiitos.Destroy();
156        });
157
158
159
160
161
162
163
164        PhysicsObject oikeaKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
165        oikeaKasi.Angle = vartalo.Angle + Angle.FromDegrees(15);
166        oikeaKasi.Top = vartalo.Top;
167        oikeaKasi.Left = vartalo.Right;
168        oikeaKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
169        Add(oikeaKasi);
170        AxleJoint oikeaKasiLiitos = new AxleJoint(vartalo, oikeaKasi, new Vector(vartalo.Right, vartalo.Top));
171        oikeaKasiLiitos.Softness = 0.6;
172        oikeaKasi.CollisionIgnoreGroup = 2;
173        Add(oikeaKasiLiitos);
174
175        AddCollisionHandler(oikeaKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
176        {
177            es.AddEffect(oikeaKasiLiitos.AxlePoint, 50);
178            oikeaKasiLiitos.Destroy();
179        });
180
181        // Jalat
182        PhysicsObject vasenJalka = new PhysicsObject(vartalo.Width, vartalo.Height / 1.1, Shape.Rectangle, parameters);
183        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-15);
184        vasenJalka.Top = vartalo.Bottom;
185        vasenJalka.Right = vartalo.Left;
186        vasenJalka.Image = Image.FromGradient((int)paa.Width, (int)paa.Height, Color.Charcoal, Color.Ivory);
187        Add(vasenJalka);
188        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vartalo.Left, vartalo.Bottom));
189        vasenJalkaLiitos.Softness = 0.5;
190        vasenJalka.CollisionIgnoreGroup = 1;
191        Add(vasenJalkaLiitos);
192
193        AddCollisionHandler(vasenJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
194        {
195            es.AddEffect(vasenJalkaLiitos.AxlePoint, 50);
196            vasenJalkaLiitos.Destroy();
197        });
198
199        PhysicsObject oikeaJalka = new PhysicsObject(vartalo.Width, vartalo.Height / 1.1, Shape.Rectangle, parameters);
200        oikeaJalka.Angle = vartalo.Angle + Angle.FromDegrees(15);
201        oikeaJalka.Top = vartalo.Bottom; 
202        oikeaJalka.Left = vartalo.Right;
203        oikeaJalka.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Charcoal, Color.Ivory);
204       
205        Add(oikeaJalka);
206        AxleJoint oikeaJalkaLiitos = new AxleJoint(vartalo, oikeaJalka, new Vector(vartalo.Right, vartalo.Bottom));
207        oikeaJalkaLiitos.Softness = 0.5;
208        oikeaJalka.CollisionIgnoreGroup = 1;
209        Add(oikeaJalkaLiitos);
210
211        AddCollisionHandler(oikeaJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
212        {
213            es.AddEffect(oikeaJalkaLiitos.AxlePoint, 50);
214            oikeaJalkaLiitos.Destroy();
215        });
216
217        AddCollisionHandler(vartalo, "piikki", delegate(PhysicsObject v, PhysicsObject piikki)
218        {
219            es.AddEffect(v.Position, 300);
220            oikeaKasiLiitos.Destroy();
221            vasenKasiLiitos.Destroy();
222            vasenKasiKammenLiitos.Destroy();
223            vasenJalkaLiitos.Destroy();
224            oikeaJalkaLiitos.Destroy();
225            vartaloLiitos.Destroy();
226            vasenJalka.Hit(RandomGen.NextVector(100, 500));
227            oikeaJalka.Hit(RandomGen.NextVector(100, 500));
228            oikeaKasi.Hit(RandomGen.NextVector(100, 500));
229            vasenKasi.Hit(RandomGen.NextVector(100, 500));
230            vasenKasiKammen.Hit(RandomGen.NextVector(100, 500));
231            LopetaPeli();
232           
233        });
234
235
236        //PhysicsObject Kisu = new PhysicsObject(100, 100);
237        //Kisu.Image = LoadImage("Kisu");
238        //Kisu.Tag = "Kisu";
239        //Add(Kisu);
240       
241        // Näppäimet
242        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liiku vasemmalle", paa, new Vector(-110, 0));
243        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liiku oikealle", paa, new Vector(110, 0));
244        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liiku ylös", paa, new Vector(0, 160));
245        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liiku alas", paa, new Vector(0, -50));
246
247        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liiku vasemmalle", paa, new Vector(-110, 0));
248        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liiku oikealle", paa, new Vector(110, 0));
249        Keyboard.Listen(Key.W, ButtonState.Down, Liikuta, "Liiku ylös", paa, new Vector(0, 160));
250        Keyboard.Listen(Key.S, ButtonState.Down, Liikuta, "Liiku alas", paa, new Vector(0, -50));
251
252
253        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
254        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
255        Keyboard.Listen(Key.R, ButtonState.Pressed, AloitaPeli, null);
256
257
258        // "Supermies" moodi
259        //vasenJalka.Oscillate(Vector.UnitX, 2, 1);
260        //oikeaJalka.Oscillate(Vector.UnitX, 2, 1);
261        //vartalo.Oscillate(Vector.UnitX, 2, 1);
262        //Gravity = new Vector(0, -50);
263
264
265       
266    }
267
268    // Aikalaskuri
269    void LuoAikaLaskuri()
270    {
271        Timer aikaLaskuri = new Timer();
272        aikaLaskuri.Start();
273       
274        Timer.SingleShot(5.0, Ilmoitus1);
275        Timer.SingleShot(8.0, Ilmoitus2);
276        Timer.SingleShot(11.0, Ilmoitus3);
277        Timer.SingleShot(16.0, Ilmoitus4);
278
279
280        Label aikaNaytto = new Label();
281        aikaNaytto.TextColor = Color.Silver;
282        aikaNaytto.Font = Font.DefaultLargeBold;
283        aikaNaytto.DecimalPlaces = 1;
284        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
285        Add(aikaNaytto);
286    }
287
288    // Ajastetut "ilmoitukset"
289    void Ilmoitus1()
290    {
291        MessageDisplay.Add("Alku hyvin, kaikki hyvin?");
292    }
293
294    void Ilmoitus2()
295    {
296        MessageDisplay.Add("No problemos?");
297    }
298
299    void Ilmoitus3()
300    {
301        MessageDisplay.Add("No problemos!");
302    }
303
304    void Ilmoitus4()
305    {
306        MessageDisplay.Add("No hablo ingles.");
307    }
308
309
310
311
312    // Piikkien luominen
313    void LuoPiikki1(double x, double y)
314    {
315        PhysicsObject Piikki1 = new PhysicsObject(20, 100);
316        Piikki1.Image = LoadImage("piikki1");
317        Piikki1.Position = new Vector(x, y);
318        Piikki1.Tag = "piikki";
319        Piikki1.IgnoresCollisionResponse = true;
320        Add(Piikki1);
321        AddCollisionHandler(Piikki1, CollisionHandler.DestroyObject);
322        // Laita ylläoleva rivi kommentiksi = piercing
323    }
324
325    void LuoPiikki2(double x, double y)
326    {
327        PhysicsObject Piikki2 = new PhysicsObject(20, 100);
328        Piikki2.Image = LoadImage("piikki2");
329        Piikki2.Position = new Vector(x, y);
330        Piikki2.Tag = "piikki";
331        Piikki2.IgnoresCollisionResponse = true;
332        Add(Piikki2);
333        AddCollisionHandler(Piikki2, CollisionHandler.DestroyObject);
334        // Laita ylläoleva rivi kommentiksi = piercing
335    }
336
337    void LuoPiikki3(double x, double y)
338    {
339        PhysicsObject Piikki3 = new PhysicsObject(20, 100);
340        Piikki3.Image = LoadImage("piikki1");
341        Piikki3.Position = new Vector(x, y);
342        Piikki3.Tag = "piikki";
343        Piikki3.IgnoresCollisionResponse = true;
344        Add(Piikki3);
345        AddCollisionHandler(Piikki3, CollisionHandler.DestroyObject);
346        // Laita ylläoleva rivi kommentiksi = piercing
347    }
348
349    void LuoPiikki4(double x, double y)
350    {
351        PhysicsObject Piikki4 = new PhysicsObject(20, 100);
352        Piikki4.Image = LoadImage("piikki2");
353        Piikki4.Position = new Vector(x, y);
354        Piikki4.Tag = "piikki";
355        Piikki4.IgnoresCollisionResponse = true;
356        Add(Piikki4);
357        AddCollisionHandler(Piikki4, CollisionHandler.DestroyObject);
358        // Laita ylläoleva rivi kommentiksi = piercing
359    }
360
361    void LuoPiikki5(double x, double y)
362    {
363        PhysicsObject Piikki5 = new PhysicsObject(25, 100);
364        Piikki5.Image = LoadImage("piikki3");
365        Piikki5.Position = new Vector(x, y);
366        Piikki5.Tag = "piikki";
367        Piikki5.IgnoresCollisionResponse = true;
368        Add(Piikki5);
369        //AddCollisionHandler(Piikki5, CollisionHandler.DestroyObject);
370        // Ez modi - poista ylläoleva kommentti "rivi" --> No piercing
371    }
372
373
374    // Piikkien spawnit
375    void Piikit1()
376    {
377        LuoPiikki1(RandomGen.NextDouble(Level.Left, Level.Right), 330);
378    }
379
380    void Piikit2()
381    {
382        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 330);
383        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 330);
384    }
385
386    void Piikit3()
387    {
388        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 330);
389        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 330);
390        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 330);
391    }
392
393    void Piikit4()
394    {
395        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 330);
396        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 330);
397        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 330);
398    }
399
400    void Piikit5()
401    {
402        LuoPiikki5(RandomGen.NextDouble(Level.Left, Level.Right), 330);
403        LuoPiikki5(RandomGen.NextDouble(Level.Left, Level.Right), 330);
404    }
405
406
407    // Piikkien ajastimet
408    void AjastinPiikit()
409    {
410        Timer ajastin1 = new Timer();
411        ajastin1.Interval = RandomGen.NextInt(1, 2);
412        ajastin1.Timeout += Piikit1;
413        ajastin1.Start();
414
415        Timer ajastin2 = new Timer();
416        ajastin2.Interval = RandomGen.NextInt(2, 5);
417        ajastin2.Timeout += Piikit2;
418        ajastin2.Start();
419
420        Timer ajastin3 = new Timer();
421        ajastin3.Interval = RandomGen.NextInt(1, 6);
422        ajastin3.Timeout += Piikit3;
423        ajastin3.Start();
424
425        Timer ajastin4 = new Timer();
426        ajastin4.Interval = RandomGen.NextInt(4, 9);
427        ajastin4.Timeout += Piikit4;
428        ajastin4.Start();
429
430        Timer ajastin5 = new Timer();
431        ajastin5.Interval = RandomGen.NextInt(6, 11);
432        ajastin5.Timeout += Piikit5;
433        ajastin5.Start();
434    }
435
436    // Kisu osio
437    void LuoKisu(double x, double y)
438    {
439        PhysicsObject LuoKisu = new PhysicsObject(80, 80);
440        LuoKisu.Image = LoadImage("Kisu");
441        LuoKisu.Position = new Vector(x, y);
442        LuoKisu.Tag = "Kisu";
443        LuoKisu.IgnoresCollisionResponse = true;
444        Add(LuoKisu);
445        //AddCollisionHandler(LuoKisu, CollisionHandler.DestroyObject);
446    }
447
448    void Kisu()
449    {
450        LuoKisu(RandomGen.NextDouble(Level.Left, Level.Right), 340);
451    }
452
453    void AjastinKisu()
454    {
455        Timer ajastinKisu = new Timer();
456        ajastinKisu.Interval = RandomGen.NextInt(1, 2);
457        ajastinKisu.Timeout += Kisu;
458        ajastinKisu.Start();
459    }
460
461
462    void Liikuta(PhysicsObject paa, Vector suunta)
463    {
464        paa.Hit(suunta);
465    }
466
467}
Note: See TracBrowser for help on using the repository browser.