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

Revision 1447, 12.5 KB checked in by samipunn, 10 years ago (diff)

Mislelaunch valmis

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