source: 2012/24/MikkoL/JormaKalevi/JormaKalevi/JormaKalevi/JormaKalevi.cs @ 3043

Revision 3043, 23.2 KB checked in by mijoliim, 7 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
9class Vihu : PhysicsObject
10{
11    public IntMeter elamaLaskuri = new IntMeter(3, 0, 100);
12
13    public Vihu(double leveys, double korkeus, bool staattinen)
14        : base(leveys, korkeus)
15    {
16        if (staattinen) this.MakeStatic();
17        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
18    }   
19}
20
21public class JormaKalevi : PhysicsGame
22{
23    const double nopeus = 48;
24    const double hyppyNopeus = 160;
25    const int RUUDUN_KOKO = 8;
26
27    PlatformCharacter jorma;
28
29    //Kenttanumero
30    int kentanNumero = 1;
31
32    //Elamat
33    IntMeter pelaajanElamat;
34    IntMeter elamat = new IntMeter(100);
35
36    //Ammus
37    Vector aseenSuunta = new Vector(1, 0);
38
39    //Valikot
40    List<Label> valikko1 = new List<Label>();
41
42    //Pelaaja
43    Image pelaajaIdle0 = LoadImage("pelaajaIdle0");
44    Image pelaajaIdle1;
45    Image pelaajaIdle2 = LoadImage("pelaajaIdle2");
46    Image pelaajaIdle3;
47    Image pelaajaIdle4 = LoadImage("pelaajaIdle4");
48    Image pelaajaIdle5;
49    Image[] pelaajaRun00 = LoadImages("pelaajaIdle0", "pelaajaRun");
50    Image[] pelaajaRun01;
51    Image[] pelaajaRun02 = LoadImages("pelaajaIdle2", "pelaajaRun2");
52    Image[] pelaajaRun03;
53    Image[] pelaajaRun04 = LoadImages("pelaajaIdle4", "pelaajaRun4");
54    Image[] pelaajaRun05;
55    Animation pelaajaRun0;
56    Animation pelaajaRun1;
57    Animation pelaajaRun2;
58    Animation pelaajaRun3;
59    Animation pelaajaRun4;
60    Animation pelaajaRun5;
61
62    //Hazardit
63    Image piikkiKuva1 = LoadImage("piikki1");
64    Image piikkiKuva2 = LoadImage("piikki2");
65
66    //Elamamittari
67    Image rastiKuva = LoadImage("rasti");
68    Image sydanKuva = LoadImage("sydan");
69
70    //TODO: Musiikit
71
72    //TODO: Aaniefektit
73    SoundEffect lisariAani = LoadSoundEffect("1-up");
74    SoundEffect rajahdysAani = LoadSoundEffect("explosion");
75    SoundEffect osumaAani = LoadSoundEffect("hurt");
76    SoundEffect hyppyAani = LoadSoundEffect("jump");
77    SoundEffect ampumisAani = LoadSoundEffect("shoot");
78
79    public override void Begin()
80    {
81        SetWindowSize(720, 720, false);
82        alkuvalikko();
83    }
84
85    //Valikot
86    void alkuvalikko()
87    {
88        ClearAll();
89        //kentanNumero = 1;
90
91        Level.Background.CreateGradient(Color.Blue, Color.DarkBlue);
92
93        Label kohta1 = new Label("Pelaa");
94        kohta1.Position = new Vector(0, 40);
95        kohta1.Font = Font.DefaultLargeBold;
96        valikko1.Add(kohta1);
97
98        Label kohta2 = new Label("Poistu");
99        kohta2.Position = new Vector(0, -40);
100        kohta2.Font = Font.DefaultLargeBold;
101        valikko1.Add(kohta2);
102
103        foreach (Label kohta in valikko1)
104        {
105            Add(kohta);
106        }
107
108        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Alku, null);
109        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
110        Mouse.IsCursorVisible = true;
111        Mouse.ListenMovement(1.0, valikonLiikkuminen, null);
112        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
113        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, null);
114        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Alku, null);
115    }
116    void gameover()
117    {
118        Label game_over = new Label(150, 50);
119        game_over.Text = "Game Over";
120        game_over.TextColor = Color.White;
121        game_over.BorderColor = Color.Transparent;
122        game_over.Color = Color.Black;
123        Add(game_over);
124        Timer.SingleShot(4, uusiPeli);
125    }
126    void uusiPeli()
127    {
128        MultiSelectWindow valikko = new MultiSelectWindow("Game Over", "Uusi peli", "Takaisin päävalikkoon");
129        valikko.DefaultCancel = 1;
130        valikko.ItemSelected += uusiPeliToiminta;
131        Add(valikko);
132    }
133    void uusiPeliToiminta(int valinta)
134    {
135        switch (valinta)
136        {
137            case 0:
138                Alku();
139                break;
140            case 1:
141                alkuvalikko();
142                break;
143        }
144    }
145    void takaisinValikkoon()
146    {
147        MultiSelectWindow valikko = new MultiSelectWindow("Pause", "Jatka peliä", "Takaisin päävalikkoon");
148        valikko.ItemSelected += takaisinValikkoonToiminta;
149        Add(valikko);
150    }
151    void takaisinValikkoonToiminta(int valinta)
152    {
153        switch (valinta)
154        {
155            case 0:
156                //Ei mitaan
157                break;
158            case 1:
159                alkuvalikko();
160                break;
161        }
162    }
163    void valikonLiikkuminen(AnalogState hiirenTila)
164    {
165        foreach (Label kohta in valikko1)
166        {
167            if (Mouse.IsCursorOn(kohta))
168            {
169                kohta.TextColor = Color.White;
170            }
171            else
172            {
173                kohta.TextColor = Color.Black;
174            }
175
176        }
177    }
178
179    //Kentan luonti
180    void Alku()
181    {
182        ClearGameObjects();
183        ClearControls();
184
185        kentanNumero = 1;
186
187        Gravity = new Vector(0, -240);
188
189        luoKentta("debug");
190        lisaaNappaimet();
191        lisaaLaskuri();
192        elamat.Value = 100;
193
194        Camera.Follow(jorma);
195        Camera.ZoomFactor = 6;
196        Camera.StayInLevel = true;
197    }
198    void luoKentta(string level)
199    {
200        TileMap kentta = TileMap.FromLevelAsset(level);
201        kentta.SetTileMethod('#', lisaaTaso);
202        kentta.SetTileMethod('^', lisaaPiikki1);
203        kentta.SetTileMethod('V', lisaaPiikki2);
204        kentta.SetTileMethod('J', lisaaPelaaja);
205        kentta.SetTileMethod('_', tippuvaTaso);
206        kentta.SetTileMethod('-', liikkuvaTaso);
207        kentta.SetTileMethod('|', liikkuvaTaso2);
208        kentta.SetTileMethod('M', maali);
209        kentta.SetTileMethod('1', lisari);
210        kentta.SetTileMethod('<', nuoliTykkiVasen);
211        kentta.SetTileMethod('>', nuoliTykkiOikea);
212        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
213        Level.CreateBorders();
214        Level.Background.CreateGradient(Color.DarkCyan, Color.Blue);
215    }
216    void kentanLataus()
217    {
218        ClearGameObjects();
219        ClearControls();
220        ClearTimers();
221
222        lisaaLaskuri();
223
224        if (kentanNumero == 1) luoKentta("debug");
225        else if (kentanNumero == 2) luoKentta("debug2");
226        else if (kentanNumero == 3) luoKentta("debug3");
227        lisaaNappaimet();
228
229        Camera.Follow(jorma);
230        Camera.ZoomFactor = 6;
231        Camera.StayInLevel = true;
232    }
233    void maalissa(PhysicsObject maali, PhysicsObject kohde)
234    {
235        if (kohde.Tag.ToString() == "")
236        {
237            kentanNumero = kentanNumero + 1;
238            kohde.Destroy();
239            Timer.SingleShot(2, kentanLataus);
240        }
241    }
242
243    //Tasot
244    void lisaaTaso(Vector paikka, double leveys, double korkeus)
245    {
246        luoPerusTaso(paikka, leveys, korkeus, "taso", null);
247    }
248    void tippuvaTaso(Vector paikka, double leveys, double korkeus)
249    {
250        luoTippuvaTaso(paikka, leveys, korkeus, "tippuvaTaso", null);
251    }
252    void liikkuvaTaso(Vector paikka, double leveys, double korkeus)
253    {
254        luoLiikkuvaTaso(paikka, leveys, korkeus, "liikkuvaTaso", 15, 0, null);
255    }
256    void liikkuvaTaso2(Vector paikka, double leveys, double korkeus)
257    {
258        luoLiikkuvaTaso(paikka, leveys, korkeus, "liikkuvaTaso2", 0, 15, null);
259    }
260    void maali(Vector paikka, double leveys, double korkeus)
261    {
262        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
263        maali.Position = paikka;
264        maali.Color = Color.White;
265        maali.Tag = "maali";
266        AddCollisionHandler(maali, maalissa);
267        Add(maali);
268    }
269
270    //Hazardit (piikit, viholliset yms.)
271    void lisaaPiikki1(Vector paikka, double leveys, double korkeus)
272    {
273        luoPiikki(paikka, leveys, korkeus, piikkiKuva1);
274    }
275    void lisaaPiikki2(Vector paikka, double leveys, double korkeus)
276    {
277        luoPiikki(paikka, leveys, korkeus, piikkiKuva2);
278    }
279    void luoPiikki(Vector paikka, double leveys, double korkeus, Image kuva)
280    {
281        PhysicsObject piikki = PhysicsObject.CreateStaticObject(7, 8);
282        piikki.IgnoresCollisionResponse = true;
283        piikki.Position = paikka;
284        piikki.Image = kuva;
285        piikki.Tag = "hazardi";
286        Add(piikki);
287    }
288    void nuoliTykkiVasen(Vector paikka, double leveys, double korkeus)
289    {
290        luoTykki(paikka, leveys, korkeus, "vasen");
291    }
292    void nuoliTykkiOikea(Vector paikka, double leveys, double korkeus)
293    {
294        luoTykki(paikka, leveys, korkeus, "oikea");
295    }
296    void tykkiAmmunta(Vihu tykki, string suunta)
297    {
298        if (suunta.ToString() == "vasen")
299        {
300            Vector ammusSuunta = new Vector(-100, 0);
301            if (tykki.X >= jorma.X && tykki.X - 8*9 <= jorma.X && tykki.Top >= jorma.Y && tykki.Bottom <= jorma.Y)
302            {
303                luoVihuAmmus(ammusSuunta, tykki);
304            }
305        }
306        if (suunta.ToString() == "oikea")
307        {
308            Vector ammusSuunta = new Vector(100, 0);
309
310            if (tykki.X <= jorma.X && tykki.X - 8*9 <= jorma.X && tykki.Top >= jorma.Y && tykki.Bottom <= jorma.Y)
311            {
312                luoVihuAmmus(ammusSuunta, tykki);
313            }
314        }
315    }
316    void luoVihuAmmus(Vector suunta, Vihu tykki)
317    {
318        ampumisAani.Play();
319        PhysicsObject ammus = new PhysicsObject(3, 1);
320        ammus.IgnoresGravity = true;
321        ammus.IgnoresCollisionResponse = true;
322        ammus.Color = Color.Red;
323        ammus.Shape = Shape.Diamond;
324        ammus.Position = tykki.Position;
325        ammus.Tag = "hazardi";
326        AddCollisionHandler(ammus, vihuAmmus);
327        Add(ammus, -1);
328        ammus.Hit(suunta);
329    }
330    void vihuAmmus(PhysicsObject ammus, PhysicsObject kohde)
331    {
332        if (kohde.Tag.ToString() == "vihu" || (kohde.Tag.ToString() == ""))
333        {
334            //Ei mitaan
335        }
336        else ammus.Destroy();
337        rajahdys(ammus);
338    }
339    void luoTykki(Vector paikka, double leveys, double korkeus, string suunta)
340    {
341        Vihu tykki = new Vihu(leveys, korkeus, true);
342        tykki.Position = paikka;
343        tykki.Color = Color.Red;
344        tykki.Tag = "vihu";
345        tykki.elamaLaskuri.Value = 5;
346        Add(tykki);
347
348        Timer ajastin = new Timer();
349        ajastin.Interval = 0.2;
350        ajastin.Timeout += delegate
351        {
352            if (tykki.IsDestroyed == true) ajastin.Stop();
353            if (tykki.IsDestroyed == true) rajahdysAani.Play();
354            tykkiAmmunta(tykki, suunta);
355        };
356        ajastin.Start();
357    }
358
359    //Lisäri
360    void lisari(Vector paikka, double leveys, double korkeus)
361    {
362        PhysicsObject lisari = PhysicsObject.CreateStaticObject(7, 7);
363        lisari.IgnoresCollisionResponse = true;
364        lisari.Position = paikka;
365        lisari.Color = Color.LightGreen;
366        lisari.Tag = "1-Up";
367        AddCollisionHandler(lisari, lisarinSaanti);
368        Add(lisari);
369    }
370    void lisarinSaanti(IPhysicsObject lisari, PhysicsObject kohde)
371    {
372        if (kohde.Tag.ToString() == "")
373        {
374            lisariAani.Play();
375            pelaajanElamat.Value = pelaajanElamat.Value + 1;
376            lisari.Destroy();
377        }
378    }
379
380    //Pelaajan ja nappainten lisäys, pelaajan liikkuminen ja tormays, pelaajan muut ominaisuudet
381    void lisaaPelaaja(Vector paikka, double leveys, double korkeus)
382    {
383        jorma = new PlatformCharacter(7, 7);
384        jorma.Position = paikka;
385        jorma.Restitution = 0;
386        jorma.KineticFriction = 0;
387        jorma.Mass = 4.0;
388        pelaajaIdle1 = Image.Mirror(pelaajaIdle0);
389        pelaajaRun01 = Image.Mirror(pelaajaRun00);
390        pelaajaIdle3 = Image.Mirror(pelaajaIdle2);
391        pelaajaRun03 = Image.Mirror(pelaajaRun02);
392        pelaajaIdle5 = Image.Mirror(pelaajaIdle4);
393        pelaajaRun05 = Image.Mirror(pelaajaRun04);
394        pelaajaRun0 = new Animation(pelaajaRun00);
395        pelaajaRun1 = new Animation(pelaajaRun01);
396        pelaajaRun2 = new Animation(pelaajaRun02);
397        pelaajaRun3 = new Animation(pelaajaRun03);
398        pelaajaRun4 = new Animation(pelaajaRun04);
399        pelaajaRun5 = new Animation(pelaajaRun05);
400        pelaajanSuunta("x")
401;
402
403        AddCollisionHandler(jorma, kasittelePelaajanTormays);
404        Add(jorma, -1);
405    }
406    void pelaajanSuunta(string suunta)
407    {
408        if (suunta.ToString() == "x") pelaajanSuunta2(pelaajaIdle0, pelaajaIdle1, pelaajaRun0, pelaajaRun1);
409        else if (suunta.ToString() == "ylos") pelaajanSuunta2(pelaajaIdle2, pelaajaIdle3, pelaajaRun2, pelaajaRun3);
410        else if (suunta.ToString() == "alas") pelaajanSuunta2(pelaajaIdle4, pelaajaIdle5, pelaajaRun4, pelaajaRun5);
411    }
412    void pelaajanSuunta2(Image idle1, Image idle2, Animation run1, Animation run2)
413    {
414        jorma.RightIdleAnimation = idle1;
415        jorma.LeftIdleAnimation = idle2;
416        jorma.RightWalkingAnimation = run1;
417        jorma.LeftWalkingAnimation = run2;
418        jorma.RightWalkingAnimation.FPS = 12;
419        jorma.LeftWalkingAnimation.FPS = 12;
420    }
421    void lisaaNappaimet()
422    {
423        //Pelaajan ohjaus
424        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
425        Keyboard.Listen(Key.Escape, ButtonState.Pressed, takaisinValikkoon, "Pause");
426        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", jorma, -nopeus);
427        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", jorma, nopeus);
428        Keyboard.Listen(Key.Z, ButtonState.Pressed, hyppaa, "Hyppää", jorma, hyppyNopeus);
429
430        //Aseen ohjaus
431        Keyboard.Listen(Key.X, ButtonState.Pressed, Ammu, "Ammu");
432        Keyboard.Listen(Key.Left, ButtonState.Down, MuutaAseenSuunta, "Tähtää vasemmalle", new Vector(-1, 0));
433        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaAseenSuunta, "Tähtää alas", new Vector(0, -1));
434        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaAseenSuunta, "Tähtää ylös", new Vector(0, 1));
435        Keyboard.Listen(Key.Right, ButtonState.Down, MuutaAseenSuunta, "Tähtää oikealle", new Vector(1, 0));
436
437        Keyboard.Listen(Key.Left, ButtonState.Down, pelaajanSuunta, null, "x");
438        Keyboard.Listen(Key.Down, ButtonState.Down, pelaajanSuunta, null, "alas");
439        Keyboard.Listen(Key.Up, ButtonState.Down, pelaajanSuunta, null, "ylos");
440        Keyboard.Listen(Key.Right, ButtonState.Down, pelaajanSuunta, null, "x");
441
442        //Reset
443        Keyboard.Listen(Key.R, ButtonState.Pressed, reset, "Reset");
444
445        //EX BACKS
446        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
447        ControllerOne.Listen(Button.Back, ButtonState.Pressed, takaisinValikkoon, "Pause");
448        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Liiku vasemmalle", jorma, -nopeus);
449        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Liiku oikealle", jorma, nopeus);
450        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Hyppää", jorma, hyppyNopeus);
451        ControllerOne.Listen(Button.B, ButtonState.Pressed, Ammu, "Ammu");
452        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, MuutaAseenSuunta, "Tähtää vasemmalle", new Vector(-1, 0));
453        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, MuutaAseenSuunta, "Tähtää oikealle", new Vector(1, 0));
454        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, MuutaAseenSuunta, "Tähtää ylös", new Vector(0, 1));
455        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, MuutaAseenSuunta, "Tähtää alas", new Vector(0, -1));
456
457        ControllerOne.Listen(Button.LeftStick, ButtonState.Pressed, reset, "Reset");
458    }
459    void liikuta(PlatformCharacter hahmo, double nopeus)
460    {
461        hahmo.Walk(nopeus);
462    }
463    void hyppaa(PlatformCharacter hahmo, double nopeus)
464    {
465        hahmo.Jump(nopeus);
466    }
467    void reset()
468    {
469        kuolema();
470    }
471    void kuolema()
472    {
473        ControllerOne.Vibrate(10, 10, 10, 10, 0.3);
474
475        rajahdysAani.Play();
476        ClearControls();
477        ClearTimers();
478
479        jorma.Destroy();
480        pelaajanElamat.Value = pelaajanElamat - 1;
481        if (pelaajanElamat.Value == 0)
482        {
483            Timer.SingleShot(4, gameover);
484        }
485        else Timer.SingleShot(4, kentanLataus);
486        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(25, 0));
487        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(-25, 0));
488        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(0, 25));
489        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y), new Vector(0, -25));
490
491        kuolinAnimaatio(new Vector(jorma.Position.X + 20, jorma.Position.Y), new Vector(25, 0));
492        kuolinAnimaatio(new Vector(jorma.Position.X - 20, jorma.Position.Y), new Vector(-25, 0));
493        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y + 20), new Vector(0, 25));
494        kuolinAnimaatio(new Vector(jorma.Position.X, jorma.Position.Y - 20), new Vector(0, -25));
495        kuolinAnimaatio(new Vector(jorma.Position.X + 10, jorma.Position.Y + 10), new Vector(20, 20));
496        kuolinAnimaatio(new Vector(jorma.Position.X - 10, jorma.Position.Y - 10), new Vector(-20, -20));
497        kuolinAnimaatio(new Vector(jorma.Position.X - 10, jorma.Position.Y + 10), new Vector(-20, 20));
498        kuolinAnimaatio(new Vector(jorma.Position.X + 10, jorma.Position.Y - 10), new Vector(20, -20));
499    }
500    void kasittelePelaajanTormays(PhysicsObject hahmo, PhysicsObject kohde)
501    {
502        if (kohde.Tag.ToString() == "hazardi")
503        {
504            kuolema();
505        }
506    }
507
508    //Tippuvat ja liikkuvat tasot
509    void tasonLiikkuminen(PhysicsObject taso, double x, double y)
510    {
511        if (taso.Velocity == new Vector(x - x - x, y - y - y))
512        {
513            taso.Velocity = new Vector(x, y);
514        }
515        else if (taso.Velocity == new Vector(x, y))
516        {
517            taso.Velocity = new Vector(x - x - x, y - y - y);
518        }
519    }
520    void tippuvaTasoTormays(PhysicsObject taso, PhysicsObject kohde)
521    {
522        if (kohde.Tag.ToString() == "")
523        {
524            ajastettuTippuminen(taso);
525        }
526    }
527    void ajastettuTippuminen(PhysicsObject taso)
528    {
529        Timer ajastin = new Timer();
530        ajastin.Interval = 0.06;
531        ajastin.Timeout += delegate { ajastettuTippuminen2(taso); };
532        ajastin.Start(1);
533    }
534    void ajastettuTippuminen2(PhysicsObject taso)
535    {
536        double y;
537        y = RandomGen.NextDouble(-25, 25);
538        taso.IgnoresGravity = false;
539        taso.IgnoresCollisionResponse = true;
540        taso.Mass = 100;
541        taso.Velocity = new Vector(0, y);
542
543    }
544
545    //Objektien (ei tappava) luonti
546    void luoLiikkuvaTaso(Vector paikka, double leveys, double korkeus, string tag, double x, double y, Image kuva)
547    {
548        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
549        taso.Position = paikka;
550        taso.Color = Color.DarkGray;
551        taso.Image = kuva;
552        taso.Tag = tag;
553        Add(taso);
554        taso.Velocity = new Vector(x, y);
555        Timer ajastin = new Timer();
556        ajastin.Interval = 2.1;
557        ajastin.Timeout += delegate { tasonLiikkuminen(taso, x, y); };
558        ajastin.Start();
559    } //Paljon parametreja :O
560    void luoPerusTaso(Vector paikka, double leveys, double korkeus, string tag, Image kuva)
561    {
562        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
563        taso.Position = paikka;
564        taso.Color = Color.Green;
565        taso.Image = kuva;
566        taso.Tag = tag;
567        Add(taso);
568    }
569    void luoTippuvaTaso(Vector paikka, double leveys, double korkeus, string tag, Image kuva)
570    {
571        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
572        taso.Position = paikka;
573        taso.Color = Color.Black;
574        taso.Image = kuva;
575        AddCollisionHandler(taso, tippuvaTasoTormays);
576        taso.Tag = tag;
577        Add(taso, -1);
578    }
579    void kuolinAnimaatio(Vector paikka, Vector nopeus)
580    {
581        PhysicsObject pallo = PhysicsObject.CreateStaticObject(7, 7, Shape.Circle);
582        pallo.Position = paikka;
583        pallo.Velocity = nopeus;
584        pallo.Color = Color.White;
585        Timer ajastin = new Timer();
586        ajastin.Interval = 0.001;
587        ajastin.Timeout += delegate { kuolinAnimaatio2(pallo); };
588        ajastin.Start();
589        Add(pallo, 3);
590    }
591    void kuolinAnimaatio2(PhysicsObject pallo)
592    {
593        if (pallo.Color == Color.White) pallo.Color = Color.Transparent;
594        else if (pallo.Color == Color.Transparent) pallo.Color = Color.White;
595    }
596
597    //Aseen toiminta
598    void Ammu()
599    {
600        ampumisAani.Play();
601        PhysicsObject ammus = new PhysicsObject(3, 1);
602        ammus.Angle = aseenSuunta.Angle;
603        ammus.IgnoresGravity = true;
604        ammus.IgnoresCollisionResponse = true;
605        ammus.Position = jorma.Position - new Vector(0,1);
606        ammus.Color = Color.White;
607        ammus.Shape = Shape.Diamond;
608        ammus.Tag = "ammus";
609        ammus.Hit(100 * aseenSuunta);
610        AddCollisionHandler(ammus, aseTormays);
611        AddCollisionHandler<PhysicsObject, Vihu>(ammus, AmmusTormasiVihuun);
612        Add(ammus, -2);
613    }
614    void AmmusTormasiVihuun(PhysicsObject ammus, Vihu vihu)
615    {
616        osumaAani.Play();
617        vihu.elamaLaskuri.Value--;
618    }
619    void MuutaAseenSuunta(Vector suunta)
620    {
621        aseenSuunta = suunta;
622
623
624    }
625    void aseTormays(PhysicsObject ammus, PhysicsObject kohde)
626    {
627        if (kohde.Tag.ToString() != "")
628        {
629            rajahdys(ammus);
630            ammus.Destroy();
631        }
632        //if (kohde.Tag.ToString() == "Vihu")
633        //{
634        //    rajahdys(ammus);
635        //}
636        //else if ((kohde.Tag.ToString() != "") && (kohde.Tag.ToString() != "Vihu"))
637        //{
638        //    rajahdys(ammus);
639        //    ammus.Destroy();
640        //}
641    }
642    void rajahdys(PhysicsObject ammus)
643    {
644        Explosion rajahdys = new Explosion(3);
645        rajahdys.Sound = null;
646        rajahdys.Position = ammus.Position;
647        rajahdys.Force = 0;
648        Add(rajahdys, 1);
649    }
650
651    //Elamat
652    void lisaaLaskuri()
653    {
654        pelaajanElamat = elamaLaskuri();
655        rastiSydan(16, 16, rastiKuva, 67, 38.5); //Rasti
656        rastiSydan(20, 20, sydanKuva, 48, 38.5); //Sydan
657    }
658    IntMeter elamaLaskuri()
659    {
660        elamat.MaxValue = 999;
661        Label naytto = new Label();
662        naytto.BindTo(elamat);
663        naytto.Position = new Vector(Screen.Left + 97, Screen.Top - 40);
664        naytto.TextColor = Color.White;
665        naytto.Color = Color.Transparent;
666        naytto.BorderColor = Color.Transparent;
667        Add(naytto);
668        return elamat;
669    }
670    void rastiSydan(double x, double y, Image kuva, double x2, double y2)
671    {
672        Label rs = new Label(x, y);
673        rs.Image = kuva;
674        rs.Text = "";
675        rs.Position = new Vector(Screen.Left + x2, Screen.Top - y2);
676        Add(rs);
677    }
678}
Note: See TracBrowser for help on using the repository browser.