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

Revision 6269, 12.6 KB checked in by tolappal, 6 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        LuoAikaLaskuri();
17        AjastinPiikit();
18    }
19
20   
21
22    // "Räjähdyst"juuba
23    ExplosionSystem es;
24
25    // Alkuvalikko
26    void Valikko()
27    {
28        ClearAll();
29        MultiSelectWindow alkuValikko = new MultiSelectWindow("Alkuvalikko",
30        "Pelaa peliä", "Lopeta");
31        Add(alkuValikko);
32        alkuValikko.ItemSelected += PainettiinValikonNappia;
33    }
34
35    // Menu
36    void PainettiinValikonNappia(int valinta)
37    {
38        switch (valinta)
39        {
40            case 0:
41                AloitaPeli();
42                break;
43            case 1:
44                Exit();
45                break;
46        }
47    }
48
49    void LopetaPeli()
50    {
51        Keyboard.DisableAll();
52        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "");
53    }
54
55
56    // Tawaraa
57    void AloitaPeli()
58    {
59
60
61        Gravity = new Vector(0, -800);
62        Level.CreateBorders(1.0, true);
63        Level.Background.Color = Color.Black;
64
65        Camera.ZoomToLevel();
66
67        // Veri-effectin tippuminen
68        Wind = new Vector(0, -300);
69        es = new ExplosionSystem(LoadImage("veri"), 3000);
70        es.MaxLifetime = 15;
71        es.MinLifetime = 10;
72        es.MinScale = 20;
73        es.MaxScale = 30;
74        es.MaxVelocity = 30;
75        es.MinVelocity = 5;
76        es.MaxAcceleration = 40;
77        es.MinAcceleration = 30;
78        es.IgnoreWind = false;
79        Add(es);
80
81        CollisionShapeParameters parameters = new CollisionShapeParameters();
82        parameters.DistanceGridSpacing = 1;
83        parameters.MaxVertexDistance = 1;
84
85        PhysicsObject paa = new PhysicsObject(35, 40, Shape.Circle, parameters);
86        paa.CollisionIgnoreGroup = 1;
87        paa.Color = Color.Silver;
88        Add(paa);
89
90        paa.MaxVelocity = 500;
91
92        // Tästä voi vaihtaa koko hahmon (vartalon) kokoa
93        // paa.Width = ruumiinosien paksuus (suurempi luku = ohuempia)
94        // paa.Height = ruumiinosien pituus ( pienempi = lyhyempiä)
95        PhysicsObject vartalo = new PhysicsObject(paa.Width / 2.75, paa.Height * 2.25, Shape.Rectangle, parameters);
96        vartalo.Position = paa.Position + new Vector(0, -paa.Height / 2 - vartalo.Height / 2);
97        vartalo.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
98        Add(vartalo);
99        AxleJoint vartaloLiitos = new AxleJoint(paa, vartalo, new Vector(vartalo.X, vartalo.Top));
100        vartaloLiitos.Softness = 0.6;
101        Add(vartaloLiitos);
102
103        AddCollisionHandler(paa, "piikki", delegate(PhysicsObject p, PhysicsObject piikki)
104        {
105            es.AddEffect(p.Position, 50);
106            vartaloLiitos.Destroy();
107            LopetaPeli();
108        });
109
110        // Kädet
111        PhysicsObject vasenKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
112        vasenKasi.Angle = vartalo.Angle + Angle.FromDegrees(-15);
113        vasenKasi.Top = vartalo.Top;
114        vasenKasi.Right = vartalo.Left;
115        vasenKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
116        Add(vasenKasi);
117        AxleJoint vasenKasiLiitos = new AxleJoint(vartalo, vasenKasi, new Vector(vartalo.Left, vartalo.Top));
118        vasenKasiLiitos.Softness = 0.6;
119        vasenKasi.CollisionIgnoreGroup = 2;
120        Add(vasenKasiLiitos);
121
122        AddCollisionHandler(vasenKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
123        {
124            es.AddEffect(vasenKasiLiitos.AxlePoint, 50);
125            vasenKasiLiitos.Destroy();
126        });
127
128        PhysicsObject oikeaKasi = new PhysicsObject(vartalo.Width, vartalo.Height / 1.4, Shape.Rectangle, parameters);
129        oikeaKasi.Angle = vartalo.Angle + Angle.FromDegrees(15);
130        oikeaKasi.Top = vartalo.Top;
131        oikeaKasi.Left = vartalo.Right;
132        oikeaKasi.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Ivory, Color.Charcoal);
133        Add(oikeaKasi);
134        AxleJoint oikeaKasiLiitos = new AxleJoint(vartalo, oikeaKasi, new Vector(vartalo.Right, vartalo.Top));
135        oikeaKasiLiitos.Softness = 0.6;
136        oikeaKasi.CollisionIgnoreGroup = 2;
137        Add(oikeaKasiLiitos);
138
139        AddCollisionHandler(oikeaKasi, "piikki", delegate(PhysicsObject kasi, PhysicsObject piikki)
140        {
141            es.AddEffect(oikeaKasiLiitos.AxlePoint, 50);
142            oikeaKasiLiitos.Destroy();
143        });
144
145        // Jalat
146        PhysicsObject vasenJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
147        vasenJalka.Angle = vartalo.Angle + Angle.FromDegrees(-15);
148        vasenJalka.Top = vartalo.Bottom;
149        vasenJalka.Right = vartalo.Left;
150        vasenJalka.Image = Image.FromGradient((int)paa.Width, (int)paa.Height, Color.Charcoal, Color.Ivory);
151        Add(vasenJalka);
152        AxleJoint vasenJalkaLiitos = new AxleJoint(vartalo, vasenJalka, new Vector(vartalo.Left, vartalo.Bottom));
153        vasenJalkaLiitos.Softness = 0.6;
154        vasenJalka.CollisionIgnoreGroup = 1;
155        Add(vasenJalkaLiitos);
156
157        AddCollisionHandler(vasenJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
158        {
159            es.AddEffect(vasenJalkaLiitos.AxlePoint, 50);
160            vasenJalkaLiitos.Destroy();
161        });
162
163        PhysicsObject oikeaJalka = new PhysicsObject(vartalo.Width, vartalo.Height, Shape.Rectangle, parameters);
164        oikeaJalka.Angle = vartalo.Angle + Angle.FromDegrees(15);
165        oikeaJalka.Top = vartalo.Bottom; 
166        oikeaJalka.Left = vartalo.Right;
167        oikeaJalka.Image = Image.FromGradient((int)vartalo.Width, (int)vartalo.Height, Color.Charcoal, Color.Ivory);
168       
169        Add(oikeaJalka);
170        AxleJoint oikeaJalkaLiitos = new AxleJoint(vartalo, oikeaJalka, new Vector(vartalo.Right, vartalo.Bottom));
171        oikeaJalkaLiitos.Softness = 0.6;
172        oikeaJalka.CollisionIgnoreGroup = 1;
173        Add(oikeaJalkaLiitos);
174
175        AddCollisionHandler(oikeaJalka, "piikki", delegate(PhysicsObject jalka, PhysicsObject piikki)
176        {
177            es.AddEffect(oikeaJalkaLiitos.AxlePoint, 50);
178            oikeaJalkaLiitos.Destroy();
179        });
180
181        AddCollisionHandler(vartalo, "piikki", delegate(PhysicsObject v, PhysicsObject piikki)
182        {
183            es.AddEffect(v.Position, 300);
184            oikeaKasiLiitos.Destroy();
185            vasenKasiLiitos.Destroy();
186            vasenJalkaLiitos.Destroy();
187            oikeaJalkaLiitos.Destroy();
188            vartaloLiitos.Destroy();
189            vasenJalka.Hit(RandomGen.NextVector(100, 500));
190            oikeaJalka.Hit(RandomGen.NextVector(100, 500));
191            oikeaKasi.Hit(RandomGen.NextVector(100, 500));
192            vasenKasi.Hit(RandomGen.NextVector(100, 500));
193            LopetaPeli();
194        });
195
196
197        // Näppäimet
198        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liiku vasemmalle", paa, new Vector(-110, 0));
199        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liiku oikealle", paa, new Vector(110, 0));
200        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liiku ylös", paa, new Vector(0, 160));
201        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liiku alas", paa, new Vector(0, -50));
202        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
203        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
204
205
206        // "Supermies" moodi
207        //vasenJalka.Oscillate(Vector.UnitX, 2, 1);
208        //oikeaJalka.Oscillate(Vector.UnitX, 2, 1);
209        //vartalo.Oscillate(Vector.UnitX, 2, 1);
210        //Gravity = new Vector(0, -50);
211
212       
213    }
214
215
216    // Aikalaskuri
217    void LuoAikaLaskuri()
218    {
219        Timer aikaLaskuri = new Timer();
220        aikaLaskuri.Interval = 25;
221        aikaLaskuri.Timeout += Ilmoitus;
222        aikaLaskuri.Start();
223
224        Label aikaNaytto = new Label();
225        aikaNaytto.TextColor = Color.Silver;
226        aikaNaytto.DecimalPlaces = 1;
227        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
228        Add(aikaNaytto);
229    }
230
231    void Ilmoitus()
232    {
233        MessageDisplay.Add("Vielä menee!");
234    }
235
236    void AjastinPiikit()
237    {
238    // Ajastin piikeille
239        Timer ajastin = new Timer();
240        ajastin.Interval = RandomGen.NextInt(1, 2);
241        ajastin.Timeout += Piikit1;
242        ajastin.Start();
243
244        Timer ajastin2 = new Timer();
245        ajastin2.Interval = RandomGen.NextInt(2, 5);
246        ajastin2.Timeout += Piikit2;
247        ajastin2.Start();
248
249        Timer ajastin3 = new Timer();
250        ajastin3.Interval = RandomGen.NextInt(1, 6);
251        ajastin3.Timeout += Piikit3;
252        ajastin3.Start();
253
254        Timer ajastin4 = new Timer();
255        ajastin4.Interval = RandomGen.NextInt(4, 9);
256        ajastin4.Timeout += Piikit4;
257        ajastin4.Start();
258
259        Timer ajastin5 = new Timer();
260        ajastin4.Interval = RandomGen.NextInt(6, 12);
261        ajastin4.Timeout += Piikit5;
262        ajastin4.Start();
263    }
264
265
266    // Piikkien spawnit
267    void Piikit1()
268    {
269        LuoPiikki1(RandomGen.NextDouble(Level.Left, Level.Right), 340);
270    }
271
272    void Piikit2()
273    {
274        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 340);
275        LuoPiikki2(RandomGen.NextDouble(Level.Left, Level.Right), 340);
276    }
277
278    void Piikit3()
279    {
280        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
281        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
282        LuoPiikki3(RandomGen.NextDouble(Level.Left, Level.Right), 340);
283    }
284
285    void Piikit4()
286    {
287        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
288        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
289        LuoPiikki4(RandomGen.NextDouble(Level.Left, Level.Right), 340);
290    }
291
292    void Piikit5()
293    {
294        LuoVaikeaPiikki(RandomGen.NextDouble(Level.Left, Level.Right), 340);
295        LuoVaikeaPiikki(RandomGen.NextDouble(Level.Left, Level.Right), 340);
296    }
297
298
299    // Piikit
300    void LuoPiikki1(double x, double y)
301    {
302        PhysicsObject Piikki1 = new PhysicsObject(20, 100);
303        Piikki1.Image = LoadImage("piikki1");
304        Piikki1.Position = new Vector(x, y);
305        Piikki1.Tag = "piikki";
306        Piikki1.IgnoresCollisionResponse = true;
307        Add(Piikki1);
308        AddCollisionHandler(Piikki1, CollisionHandler.DestroyObject);
309        // HC modi - poista ylläoleva rivi
310    }
311
312    void LuoPiikki2(double x, double y)
313    {
314        PhysicsObject Piikki2 = new PhysicsObject(20, 100);
315        Piikki2.Image = LoadImage("piikki2");
316        Piikki2.Position = new Vector(x, y);
317        Piikki2.Tag = "piikki";
318        Piikki2.IgnoresCollisionResponse = true;
319        Add(Piikki2);
320        AddCollisionHandler(Piikki2, CollisionHandler.DestroyObject);
321        // HC modi - poista ylläoleva rivi
322    }
323
324    void LuoPiikki3(double x, double y)
325    {
326        PhysicsObject Piikki3 = new PhysicsObject(20, 100);
327        Piikki3.Image = LoadImage("piikki1");
328        Piikki3.Position = new Vector(x, y);
329        Piikki3.Tag = "piikki";
330        Piikki3.IgnoresCollisionResponse = true;
331        Add(Piikki3);
332        AddCollisionHandler(Piikki3, CollisionHandler.DestroyObject);
333        // HC modi - poista ylläoleva rivi
334    }
335
336    void LuoPiikki4(double x, double y)
337    {
338        PhysicsObject Piikki4 = new PhysicsObject(20, 100);
339        Piikki4.Image = LoadImage("piikki2");
340        Piikki4.Position = new Vector(x, y);
341        Piikki4.Tag = "piikki";
342        Piikki4.IgnoresCollisionResponse = true;
343        Add(Piikki4);
344        AddCollisionHandler(Piikki4, CollisionHandler.DestroyObject);
345        // HC modi - poista ylläoleva rivi
346    }
347
348    // "Erikoispiikki"
349    void LuoVaikeaPiikki(double x, double y)
350    {
351        PhysicsObject LuoVaikeaPiikki = new PhysicsObject(25, 125);
352        LuoVaikeaPiikki.Image = LoadImage("piikki3");
353        LuoVaikeaPiikki.Position = new Vector(x, y);
354        LuoVaikeaPiikki.Tag = "piikki";
355        LuoVaikeaPiikki.IgnoresCollisionResponse = true;
356        Add(LuoVaikeaPiikki);
357        //AddCollisionHandler(Piikki5, CollisionHandler.DestroyObject);
358        // Ez modi - poista ylläoleva rivi --> No piercing
359    }
360
361    void Liikuta(PhysicsObject pallo, Vector suunta)
362    {
363        pallo.Hit(suunta);
364    }
365
366}
Note: See TracBrowser for help on using the repository browser.