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

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