source: 2010/30/samipunn/Misle Launch/Peli.cs @ 1412

Revision 1412, 10.3 KB checked in by samipunn, 10 years ago (diff)

Misle launch

Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6
7public class Peli : PhysicsGame
8{
9    double ohjusOdotus = 3.5;
10
11    Image maastonKuva = LoadImage("kentta");
12
13    Timer Laskuri1;
14    Timer Laskuri2;
15    Timer polttoaine1;
16    Timer polttoaine2;
17
18    PhysicsObject laukaisualusta2;
19    PhysicsObject laukaisualusta1;
20    PhysicsObject ohjus1;
21    PhysicsObject ohjus2;
22    double kaantyyOikealle = 5;
23    double kaantyyVasemmalle = -5;
24    double OhjuksenAloitusKorkeus = -340;
25
26   
27    Label testikentta1;
28    Label testikentta2;
29
30    BarGauge voimaPalkki1;
31    BarGauge voimaPalkki2;
32
33
34     DoubleMeter voimaMittari1;
35     DoubleMeter voimaMittari2;
36
37    bool ohjus1sammutettu = false;
38    bool ohjus2sammutettu = false;
39
40    Image OhjuksenKuva = LoadImage("Ohjus");
41    Image SavunKuva = LoadImage("Savu");
42    Image LiekinKuva = LoadImage("Liekki");
43
44    protected override void Begin()
45    {
46       
47       
48        voimaMittari1 = new DoubleMeter(10000);
49        voimaMittari1.MaxValue = 10000;
50        voimaPalkki1 = new BarGauge(13, 150);
51        voimaPalkki1.BindTo(voimaMittari1);
52        voimaPalkki1.X = -320;
53        voimaPalkki1.Y = -500;
54        voimaPalkki1.Angle = Angle.Degrees(90);
55        Add(voimaPalkki1);
56
57        voimaMittari2 = new DoubleMeter(10000);
58        voimaMittari2.MaxValue = 10000;
59        voimaPalkki2 = new BarGauge(13, 150);
60        voimaPalkki2.BindTo(voimaMittari2);
61        voimaPalkki2.X = 320;
62        voimaPalkki2.Y = -500;
63        voimaPalkki2.Angle = Angle.Degrees(90); 
64        Add(voimaPalkki2);
65
66
67
68        testikentta1 = new Label();
69        testikentta2 = new Label();
70
71        testikentta1.X = Screen.Left + 100;
72        testikentta1.Y = Screen.Top - 100;
73        testikentta2.X = Screen.Right - 100;
74        testikentta2.Y = Screen.Top - 100;
75        Add(testikentta1);
76        Add(testikentta2);
77       
78       
79
80       
81        Laskuri1 = LuoAikaLaskuri(-150, 0);
82        Laskuri2 = LuoAikaLaskuri(150, 0);
83       
84
85        laukaisualusta1 = PhysicsObject.CreateStaticObject (60, 20);
86        laukaisualusta1.Shape = Shapes.Rectangle;
87        laukaisualusta1.X = -400;
88        laukaisualusta1.Y = -377;
89        laukaisualusta1.Color = Color.Black;
90        Add(laukaisualusta1);
91
92       
93        laukaisualusta2 = PhysicsObject.CreateStaticObject(60, 20);
94        laukaisualusta2.Shape = Shapes.Rectangle;
95        laukaisualusta2.X = 400;
96        laukaisualusta2.Y = -373;
97        laukaisualusta2.Color = Color.Black;
98        Add(laukaisualusta2);
99       
100
101        Shape shape = Shapes.FromImage(maastonKuva);
102        PhysicsObject maasto = PhysicsObject.CreateStaticObject(1200, 400, shape );
103        maasto.Image = maastonKuva;
104        maasto.Y = Level.Bottom + maasto.Height / 2.5;
105        Add(maasto);
106
107        LuoReunat();
108        Camera.ZoomToLevel();
109        Camera.StayInLevel = true;
110
111        ohjus1 = LuoOhjus(-400, OhjuksenAloitusKorkeus);
112        ohjus2 = LuoOhjus(400, OhjuksenAloitusKorkeus);
113
114        polttoaine1 = LuoPolttoaineLaskuri(ohjus1);
115        testikentta1.BindTo(polttoaine1.SecondCounter);
116        polttoaine2 = LuoPolttoaineLaskuri(ohjus2);
117        testikentta2.BindTo(polttoaine2.SecondCounter);
118
119       
120        AsetaOhjaimet();
121
122        Painovoima();
123        Ilmanvastus();
124    }
125
126    private PhysicsObject LuoOhjus(double x, double y)
127    {
128        PhysicsObject ohjus = new PhysicsObject(10, 40);
129        ohjus.Shape = Shapes.Rectangle;
130        ohjus.X = x;
131        ohjus.Y = y;
132        AddCollisionHandler(ohjus, Tormays);
133        ohjus.Image = OhjuksenKuva;
134        Add(ohjus);
135     
136        return ohjus;
137    }
138
139    private void nollaaOhjus(PhysicsObject ohjus, double x, double y)
140    {
141        ohjus.X = x;
142        ohjus.Y = y;
143        ohjus.Stop();
144        ohjus.Angle = new Angle();
145        if (ohjus.Tag == ohjus1)
146        {
147            ohjus1sammutettu = false;
148        }
149        else if (ohjus.Tag == ohjus2)
150        {
151            ohjus2sammutettu = false;
152        }
153        Add(ohjus);
154    }
155
156    void Sammuta(Timer ajastin) 
157    {
158        if (ajastin.Tag == ohjus1)
159        {
160            ohjus1sammutettu = true;
161        }
162        if (ajastin.Tag == ohjus2)
163        {
164            ohjus2sammutettu = true;
165        }
166
167        ajastin.Reset();
168        ajastin.Stop();
169    }
170
171    void AsetaOhjaimet()
172    {
173        Keyboard.Listen(Key.Z, ButtonState.Down, OhjusKaantyy, "Kaanna Ohjusta Vasemmalle", ohjus1, kaantyyVasemmalle);
174        Keyboard.Listen(Key.Z, ButtonState.Released, OhjusKaantyy, null, ohjus1,0.0);
175        Keyboard.Listen(Key.A, ButtonState.Down, OhjusKaantyy, "Kaanna Ohjusta Oikealle", ohjus1, kaantyyOikealle);
176        Keyboard.Listen(Key.A, ButtonState.Released, OhjusKaantyy, null, ohjus1,0.0);
177
178        Keyboard.Listen(Key.Up, ButtonState.Down, Ohjus2Kaantyy, "Kaanna Ohjusta2 Vasemmalle", ohjus2, kaantyyVasemmalle);
179        Keyboard.Listen(Key.Up, ButtonState.Released, Ohjus2Kaantyy, null, ohjus2, 0.0);
180        Keyboard.Listen(Key.Down, ButtonState.Down, Ohjus2Kaantyy, "Kaanna Ohjusta2 Oikealle", ohjus2, kaantyyOikealle);
181        Keyboard.Listen(Key.Down, ButtonState.Released, Ohjus2Kaantyy, null, ohjus2, 0.0);
182
183        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
184        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
185
186    }
187    void OhjusKaantyy(PhysicsObject ohjus, double nopeus)
188    {
189        Angle valiaik = ohjus.Angle;
190        valiaik.Degree += nopeus;
191        ohjus.Angle = valiaik;
192    }
193
194    void Ohjus2Kaantyy(PhysicsObject ohjus2, double nopeus)
195    {
196        Angle valiaik = ohjus2.Angle;
197        valiaik.Degree += nopeus;
198        ohjus2.Angle = valiaik;
199    }
200    void Paivitys()
201    {
202        if (!ohjus1sammutettu) ohjus1.Push(Vector.FromLengthAndAngle(1500, ohjus1.Angle + Angle.RightAngle));
203        if (!ohjus2sammutettu) ohjus2.Push(Vector.FromLengthAndAngle(1500, ohjus2.Angle + Angle.RightAngle));
204       
205    }
206
207    void Painovoima()
208    {
209        Gravity = new Vector(0.0, -800.0);
210    }
211
212    void Ilmanvastus()
213    {
214       ohjus1.LinearDamping = 0.9;
215       ohjus2.LinearDamping = 0.9;
216    }
217    protected override void Update(Time time)
218    {
219        Paivitys();
220        base.Update(time);
221    }
222
223    void LuoReunat()
224    {
225        Level.CreateBottomBorder();
226        Level.CreateTopBorder();
227        Level.CreateLeftBorder();
228        Level.CreateRightBorder();
229       
230   
231    }
232
233    void Tormays(PhysicsObject ohjus, PhysicsObject kohde)
234    {
235        Remove(ohjus);
236        Explosion rajahdys = new Explosion(60);
237        rajahdys.Position = ohjus.Position;
238        rajahdys.Speed = 300.0;
239        rajahdys.Force = 300;       
240        Add(rajahdys);
241
242        if (ohjus == ohjus1)   
243        {
244            KaynnistaLaskuri(Laskuri1, ohjusOdotus);
245            ohjus1sammutettu = false;
246            polttoaine1.Reset();
247            polttoaine1.Stop();       
248        }
249
250        if (ohjus == ohjus2)
251        {
252            KaynnistaLaskuri(Laskuri2, ohjusOdotus);
253            ohjus2sammutettu = false;
254            polttoaine2.Reset();
255            polttoaine2.Stop();
256        }
257        if (kohde == laukaisualusta1)
258        {
259            voimaMittari1.Value -= 1000;
260        }
261
262        if (kohde == laukaisualusta2)
263        {
264            voimaMittari2.Value -= 1000;
265        }
266
267        if (voimaMittari1.Value<= 0 )
268        {
269            Exit();
270        }
271
272        if (voimaMittari2.Value <= 0)
273        {
274            Exit();
275        }
276
277        if (voimaMittari1.Value <= 5000)
278        {
279
280            Flames liekki = new Flames(SavunKuva, 50, Angle.Degrees(-90));
281            liekki.Position = new Vector(-400, -370);
282            Add(liekki);
283
284        }
285
286        if (voimaMittari2.Value <= 5000)
287        {
288
289            Flames liekki = new Flames(SavunKuva, 50, Angle.Degrees(-90));
290            liekki.Position = new Vector(400, -370);
291            Add(liekki);
292
293        }
294
295        if (voimaMittari1.Value <= 2000)
296        {
297
298            Flames liekki = new Flames(LiekinKuva, 50, Angle.Degrees(-90));
299            liekki.Position = new Vector(-395, -370);
300            Add(liekki);
301
302        }
303
304        if (voimaMittari2.Value <= 2000)
305        {
306
307            Flames liekki = new Flames(LiekinKuva, 50, Angle.Degrees(-90));
308            liekki.Position = new Vector(395, -370);
309            Add(liekki);
310
311        }
312   
313   
314   
315   
316    }
317
318
319
320   
321
322    Timer LuoPolttoaineLaskuri(PhysicsObject ohjus)
323    {
324        Timer polttoaine = new Timer();
325        polttoaine.Interval = 5.3;
326        polttoaine.Start();
327        polttoaine.Tag = ohjus;
328        polttoaine.Trigger += Sammuta;
329        return polttoaine;
330           
331    }
332
333
334    Timer LuoAikaLaskuri(double x, double y)
335    {
336        DoubleMeter alaspainLaskuri = new DoubleMeter(ohjusOdotus);
337
338        Timer aikaLaskuri = new Timer();
339        aikaLaskuri.Interval = 0.1;
340        aikaLaskuri.Trigger += LaskeAlaspain;
341        aikaLaskuri.Tag = alaspainLaskuri;
342        //Add(aikaLaskuri);
343
344        Label aikaNaytto = new Label();
345        aikaNaytto.TextColor = Color.White;
346        aikaNaytto.DecimalPlaces = 1;
347        aikaNaytto.BindTo(alaspainLaskuri);
348        aikaNaytto.X = x;
349        aikaNaytto.Y = y;
350        Add(aikaNaytto);
351
352        return aikaLaskuri;
353    }
354
355    void KaynnistaLaskuri(Timer timer, double aikaaJaljella)
356    {
357        DoubleMeter alaspainLaskuri = (DoubleMeter)(timer.Tag);
358        alaspainLaskuri.Value = aikaaJaljella;
359        timer.Start();
360    }
361
362    void LaskeAlaspain(Timer timer)
363    {
364        DoubleMeter alaspainLaskuri = (DoubleMeter)(timer.Tag);
365        alaspainLaskuri.Value -= 0.1;
366
367        if (alaspainLaskuri.Value <= 0)
368        {
369           
370            timer.Stop();
371
372            if (timer == Laskuri1)
373            {
374                nollaaOhjus(ohjus1, -400, OhjuksenAloitusKorkeus);
375                polttoaine1.Reset();
376                polttoaine1.Start();
377            }
378
379            if (timer == Laskuri2)
380            {
381                nollaaOhjus(ohjus2, 400, OhjuksenAloitusKorkeus);
382                polttoaine2.Reset();
383                polttoaine2.Start();
384            }
385           
386           
387        }
388    }
389
390   
391
392
393}
394
Note: See TracBrowser for help on using the repository browser.