source: 2011/23/iltakuop/Blocks/Blocks/Blocks/Peli.cs @ 1839

Revision 1839, 26.1 KB checked in by tipan, 10 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
9
10class Taso2 : PhysicsObject
11{
12    public int hitPoints = 2;
13    public Taso2()
14        : base(40, 10)
15    {
16        MakeStatic();
17    }
18
19
20}
21
22
23
24
25
26public class Peli : PhysicsGame
27{
28    int mailanNopeus = 600;
29    int pallonNopeus = 300;
30    int äläLuoPalloa = 0;
31    int isoMaila = 0;
32    int pieniMaila = 0;
33    int isoPallo = 0;
34    int pieniPallo = 0;
35    //Vector nopeusVasen = new Vector(-600, 0);
36
37    PhysicsObject pallo;
38    PhysicsObject maila;
39    PhysicsObject tnt;
40    PhysicsObject elämä;
41
42    PhysicsObject alaReuna;
43    int kenttäNro = 1;
44    int kenttäMäärä = 10;
45
46    int palloolemassa;
47    const int RUUDUN_KOKO = 5;
48
49    Image palloKuva = LoadImage("Pallo");
50    Image tntKuva = LoadImage("TNT");
51    Image tasoKuva = LoadImage("Palikka");
52    Image taso2Kuva = LoadImage("Vahvistettu palikka");
53    Image taso2Kuva2 = LoadImage("Vahvistettu palikka2");
54    Image tasoTuhoutumatonKuva = LoadImage("Tuhoutumaton");
55    Image tasoTuhoutumatonKuvaPysty = LoadImage("TuhoutumatonPysty");
56    Image taustaKuva = LoadImage("Taustakuva1");
57    Image taustaKuva2 = LoadImage("Taustakuva2");
58    Image taustaKuva3 = LoadImage("Taustakuva3");
59    Image mailanKuva = LoadImage("Maila");
60    Image elämänKuva = LoadImage("elämä");
61
62    List<Image> kuvat = new List<Image>();
63    int pisteet;
64    int elämät = 3;
65    int randomKentät = 0;
66    int ySuuntaKorjattu = 0;
67    IntMeter pisteetL;
68    IntMeter elämätL;
69
70    Label päälläPois;
71
72    List<Label> valikonKohdat;
73    List<PhysicsObject> tasot = new List<PhysicsObject>();
74    List<PhysicsObject> taso2t = new List<PhysicsObject>();
75    List<PhysicsObject> tntt = new List<PhysicsObject>();
76    List<PhysicsObject> tasoTuhoutumatont = new List<PhysicsObject>();
77
78   
79
80    public override void Begin()
81    {
82        for (int i = 1; i < 10; i++)
83        {
84            kuvat.Add(LoadImage("Power" + i));
85        }
86
87        Valikko();
88    }
89
90    void Valikko()
91    {
92       
93        äläLuoPalloa = 1;
94        ClearAll();
95        Level.Background.Image = taustaKuva3;
96        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
97        Camera.ZoomToLevel(1);
98
99        valikonKohdat = new List<Label>();
100
101        Label kohta1 = new Label("Aloita uusi peli");
102        kohta1.Position = new Vector(-80, 40);
103        valikonKohdat.Add(kohta1);
104
105        Label kohta2 = new Label("Asetukset");
106        kohta2.Position = new Vector(-80, -40);
107        valikonKohdat.Add(kohta2);
108
109        Label kohta3 = new Label("Lopeta");
110        kohta3.Position = new Vector(80, -40);
111        valikonKohdat.Add(kohta3);
112
113        Label kohta4 = new Label("Ohjeet");
114        kohta4.Position = new Vector(80, 40);
115        valikonKohdat.Add(kohta4);
116
117        foreach (Label valikonKohta in valikonKohdat)
118        {
119            Add(valikonKohta);
120        }
121
122        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
123        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Asetukset, null);
124        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
125        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Ohjeet, null);
126
127        Mouse.IsCursorVisible = true;
128        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
129        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
130    }
131
132    void ValikossaLiikkuminen(AnalogState hiirenTila)
133    {
134        foreach (Label kohta in valikonKohdat)
135        {
136            if (Mouse.IsCursorOn(kohta))
137            {
138                kohta.TextColor = Color.Red;
139            }
140            else
141            {
142                kohta.TextColor = Color.Black;
143            }
144
145        }
146    }
147
148    void ValikossaLiikkuminen2(AnalogState hiirenTila)
149    {
150        foreach (Label kohta in valikonKohdat)
151        {
152            if (Mouse.IsCursorOn(kohta))
153            {
154                kohta.TextColor = Color.Red;
155            }
156            else
157            {
158                kohta.TextColor = Color.White;
159            }
160
161        }
162    }
163
164
165    void AloitaPeli()
166    {
167        ClearAll();
168        äläLuoPalloa = 0;
169        nollaaPisteet();
170        LuoKenttä(1);
171        AsetaOhjaimet();
172        LisääLaskurit(3, 0);
173        AloitaPeliUudestaan();
174    }
175
176    void nollaaPisteet()
177    {
178        kenttäNro = 1;
179        pisteet = 0;
180        elämät = 3;
181    }
182
183    void Lopeta()
184    {
185        Exit();
186    }
187
188    void Ohjeet()
189    {
190
191    }
192
193    void Asetukset()
194    {
195        ClearAll();
196
197        Level.Background.Image = taustaKuva2;
198        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
199        Camera.ZoomToLevel(1);
200
201        valikonKohdat = new List<Label>();
202
203        Label kohta1 = new Label("Pallon nopeus");
204        kohta1.Position = new Vector(-80, 40);
205        valikonKohdat.Add(kohta1);
206        kohta1.TextColor = Color.White;
207
208        Label kohta2 = new Label("Mailan nopeus");
209        kohta2.Position = new Vector(-80, -40);
210        valikonKohdat.Add(kohta2);
211        kohta2.TextColor = Color.White;
212
213        Label kohta3 = new Label("Takaisin");
214        kohta3.Position = new Vector(80, -40);
215        valikonKohdat.Add(kohta3);
216        kohta3.TextColor = Color.White;
217
218        Label kohta4 = new Label("Satunaiset kentät");
219        kohta4.TextColor = Color.White;
220
221        if (randomKentät == 1)
222        {
223            päälläPois = new Label("Päällä");
224        }
225        else { päälläPois = new Label("Pois päältä"); }
226        kohta4.Position = new Vector(100, 40);
227        päälläPois.Position = new Vector(70, 15);
228        päälläPois.TextColor = Color.White;
229        valikonKohdat.Add(päälläPois);
230        Add(kohta4);
231
232        foreach (Label valikonKohta in valikonKohdat)
233        {
234            Add(valikonKohta);
235        }
236
237        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AsetaPallonNopeus, null);
238        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AsetaMailanNopeus, null);
239        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Valikko, null);
240        Mouse.ListenOn(päälläPois, MouseButton.Left, ButtonState.Pressed, satunaisetKentät, null);
241
242        Mouse.IsCursorVisible = true;
243        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
244        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
245    }
246
247    void satunaisetKentät()
248    {
249        if (randomKentät == 1)
250        {
251            randomKentät = 0;
252        }
253        else
254        {
255            randomKentät = 1;
256        }
257        Asetukset();
258    }
259
260    void AsetaPallonNopeus()
261    {
262        InputWindow kysymysIkkuna = new InputWindow("Pallon nopeus", "Oletus on 300");
263        kysymysIkkuna.TextEntered += KäsitteleAsetukset;
264        Add(kysymysIkkuna);
265
266    }
267
268    void AsetaMailanNopeus()
269    {
270        InputWindow kysymysIkkuna = new InputWindow("Mailan nopeus", "Oletus on 600");
271        kysymysIkkuna.TextEntered += KäsitteleAsetukset2;
272        Add(kysymysIkkuna);
273    }
274
275    void KäsitteleAsetukset(InputWindow ikkuna)
276    {
277        try
278        {
279            int vastaus = int.Parse(ikkuna.InputBox.Text);
280            pallonNopeus = vastaus;
281        }
282        catch (FormatException)
283        {
284            ClearAll();
285            Label tekstikentta = new Label("Anna luku!");
286            Add(tekstikentta);
287            Timer.SingleShot(2, ClearAll);
288            Timer.SingleShot(2.01, Asetukset);
289        }
290    }
291
292    void KäsitteleAsetukset2(InputWindow ikkuna)
293    {
294        try
295        {
296            int vastaus = int.Parse(ikkuna.InputBox.Text);
297            mailanNopeus = vastaus;
298        }
299        catch (FormatException)
300        {
301            ClearAll();
302            Label tekstikentta = new Label("Anna luku!");
303            Add(tekstikentta);
304            Timer.SingleShot(2, ClearAll);
305            Timer.SingleShot(2.01, Asetukset);
306        }
307    }
308
309    PhysicsObject LuoPallo() //-170
310    {
311        PhysicsObject pallo1 = new PhysicsObject(18.0, 18.0);
312        pallo1.Image = palloKuva;
313        pallo1.Shape = Shape.Circle;
314        pallo1.Color = Color.LightGreen;
315        pallo1.Tag = "pallo";
316        pallo1.Restitution = 1.0;
317        pallo1.X = 0;
318        pallo1.Y = -168;
319        pallo1.CanRotate = false;
320        palloolemassa = 1;
321        return pallo1;
322    }
323
324    void LuoKenttä(int a)
325    {
326
327        LuoPalikat(a);
328        Level.Background.Image = taustaKuva;
329        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
330
331        Camera.ZoomToLevel(1);
332    }
333
334    void AloitaPeliUudestaan()
335    {
336        maila.X = 0;
337        if (palloolemassa == 1)
338        {
339            pallo.Destroy();
340        }
341        if (äläLuoPalloa == 0)
342        {
343            pallo = LuoPallo();
344            AddCollisionHandler(pallo, KäsittelePallonTörmäys);
345            Add(pallo);
346        }
347    }
348
349    void AsetaOhjaimet()
350    {
351        Vector nopeusVasen = new Vector(-mailanNopeus, 0);
352        Vector nopeusOikea = new Vector(mailanNopeus, 0);
353        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta mailaa oikealle", maila, nopeusOikea);
354        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
355        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta mailaa vasemmalle", maila, nopeusVasen);
356        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
357
358        Keyboard.Listen(Key.T, ButtonState.Pressed, AloitaPeliUudestaan, null);
359        Keyboard.Listen(Key.R, ButtonState.Pressed, DebugRäjäytys, null);
360
361        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
362        Keyboard.Listen(Key.F2, ButtonState.Pressed, SeuraavaTaso, null);
363        Keyboard.Listen(Key.F3, ButtonState.Pressed, AnnaElämä, null);
364
365        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
366
367
368    }
369
370    void AnnaElämä()
371    {
372        elämät++;
373        pisteet += 200;
374        pisteetL.Value = pisteet;
375        elämätL.Value = elämät;
376    }
377
378    void DebugRäjäytys() { Räjähdys(tnt.Position); }
379
380    void LisääLaskurit(int elämät, int pisteet)
381    {
382        pisteetL = LuoPisteLaskuri(Screen.Left + 180.0, Screen.Top - 80.0, pisteet);
383        elämätL = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 80.0, elämät);
384        Label tekstikentta = new Label("Palloja jäljellä: ");
385        tekstikentta.X = Screen.Right - 180;
386        tekstikentta.Y = Screen.Top - 80;
387        tekstikentta.TextColor = Color.White;
388        Label tekstikentta2 = new Label("Pisteet: ");
389        tekstikentta2.X = Screen.Left + 100.0;
390        tekstikentta2.Y = Screen.Top - 80;
391        tekstikentta2.TextColor = Color.White;
392
393        Add(tekstikentta2);
394        Add(tekstikentta);
395    }
396
397    IntMeter LuoPisteLaskuri(double x, double y, int määrä)
398    {
399        IntMeter laskuri = new IntMeter(määrä);
400        Label näyttö = new Label();
401        näyttö.BindTo(laskuri);
402        näyttö.X = x;
403        näyttö.Y = y;
404        näyttö.TextColor = Color.White;
405        Add(näyttö);
406        return laskuri;
407    }
408
409    void KäsittelePallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
410    {
411        if (kohde == alaReuna)
412        {
413            pallo.Destroy();
414            palloolemassa = 0;
415            elämät -= 1;
416            if (elämät == 0)
417            {
418                HävisitPelin();
419            }
420            else Timer.SingleShot(1, AloitaPeliUudestaan);
421        }
422        if (kohde.Tag.ToString() == "taso")
423        {
424            pisteet += 100;
425            AnnaPowerUp(kohde);
426            Timer.SingleShot(0.01, kohde.Destroy);
427            tasot.Remove(kohde);
428            TarkistaVoitto();
429        }
430        if (kohde.Tag.ToString() == "taso2")
431        {
432            Taso2 taso2 = (Taso2)kohde;
433            taso2.hitPoints--;
434            if (taso2.hitPoints == 1)
435            { taso2.Image = taso2Kuva2; }
436            else if (taso2.hitPoints == 0)
437            {
438                AnnaPowerUp(kohde);
439                Timer.SingleShot(0.01, kohde.Destroy);
440                pisteet += 300;
441            }
442            taso2t.Remove(kohde);
443            TarkistaVoitto();
444           
445        }
446        if (kohde.Tag.ToString() == "TNT")
447        {
448            pisteet += 100;
449            Räjähdys(kohde.Position);
450            Timer.SingleShot(0.01, kohde.Destroy);
451            TarkistaVoitto();
452           
453        }
454
455        if (kohde.Tag.ToString() == "ttaso" && pallo.Velocity.X < 10)
456        {
457            Timer.SingleShot(0.05, korjaaXSuunta);
458
459        }
460        if (kohde != maila && pallo.Velocity.Y == 0 && ySuuntaKorjattu == 0)
461        {
462            Timer.SingleShot(0.05, korjaaYSuunta);
463            ySuuntaKorjattu = 1;
464        }
465
466        pisteetL.Value = pisteet;
467        elämätL.Value = elämät;
468
469    }
470
471    void korjaaXSuunta()
472    {
473        if (pallo.Velocity.X == 0) pallo.Velocity = new Vector(100, pallo.Velocity.Y);
474    }
475
476    void korjaaYSuunta()
477    {
478        if (pallo.Velocity.Y == 0)
479        { pallo.Velocity = new Vector(pallo.Velocity.X, 100); }
480
481        ySuuntaKorjattu = 0;
482    }
483
484
485    void AnnaPowerUp(PhysicsObject kohde)
486    {
487        int Power = RandomGen.NextInt(0, 100);
488        //int mailaPower1 = RandomGen.NextInt(0, 20);
489        //int mailaPower2 = RandomGen.NextInt(0, 20);
490        if (Power < 5)
491        {
492            PudotaElämä(kohde);
493        }
494        else if ((Power > 4)&&(Power < 10))
495        {
496            PudotaPower(kohde, 1);
497        }
498        else if ((Power > 9) && (Power < 14))
499        {
500            PudotaPower(kohde, 2);
501        }
502        else if ((Power > 13) && (Power < 17))
503        {
504            PudotaPower(kohde, 3);
505        }
506        else if ((Power > 16) && (Power < 19))
507        {
508            PudotaPower(kohde, 4);
509        }
510        else if ((Power > 18) && (Power < 20))
511        {
512            PudotaPower(kohde, 5);
513        }
514        else if ((Power > 19) && (Power < 25))
515        {
516            PudotaPower(kohde, 6);
517        }
518        else if ((Power > 24) && (Power < 30))
519        {
520            PudotaPower(kohde, 7);
521        }
522        else if ((Power > 29) && (Power < 35))
523        {
524            PudotaPower(kohde, 8);
525        }
526        else if ((Power > 34) && (Power < 40))
527        {
528            PudotaPower(kohde, 9);
529        }
530    }
531
532    void PudotaElämä(PhysicsObject kohde)
533    {
534        elämä = new PhysicsObject(10, 10);
535        elämä.IgnoresCollisionResponse = true;
536        elämä.Tag = "elämä";
537        elämä.Position = kohde.Position;
538        elämä.Image = elämänKuva;
539        Vector impulssi = new Vector(0, -100);
540        Add(elämä);
541        elämä.Hit(impulssi);
542    }
543
544    void PudotaPower(PhysicsObject kohde, int x)
545    {
546        int y = x;
547        y--;
548        PhysicsObject Power = new PhysicsObject(10, 10);
549        Power.IgnoresCollisionResponse = true;
550        Power.Tag = "Power" + x;
551        Power.Position = kohde.Position;
552        Power.Image = kuvat[y];
553        Vector impulssi = new Vector(0, -100);
554        Add(Power);
555        Power.Hit(impulssi);
556    }
557
558
559
560    void TarkistaVoitto()
561    {
562        if ((tasot.Count == 0) && (taso2t.Count == 0) && (tntt.Count == 0))
563        {
564            SeuraavaTaso();
565        }
566
567    }
568
569    void SeuraavaTaso()
570    {
571        tasot.Clear();
572        tntt.Clear();
573        taso2t.Clear();
574        kenttäNro += 1;
575        if (kenttäNro > kenttäMäärä)
576        {
577            ClearAll();
578            Label tekstikentta = new Label("Voitit, onneksi olkoon! Sait " + pisteet + " pistettä!");
579            Add(tekstikentta);
580            Timer.SingleShot(2, Exit);
581        }
582        else
583        {
584            ClearAll();
585            Label tekstikentta = new Label("Pääsit seuraavaan tasoon");
586            Add(tekstikentta);
587            Timer.SingleShot(0.1, SeuraavaTaso2);
588        }
589
590    }
591
592    void SeuraavaTaso2()
593    {
594        ClearAll();
595        LuoKenttä(kenttäNro);
596        AsetaOhjaimet();
597        LisääLaskurit(elämät, pisteet);
598        AloitaPeliUudestaan();
599    }
600
601    void Räjähdys(Vector kohde)
602    {
603
604        Explosion rajahdys = new Explosion(50);
605        rajahdys.Position = kohde;
606        rajahdys.Force = 150;
607        rajahdys.Speed = 600;
608        rajahdys.ShockwaveColor = Color.Yellow;
609        Add(rajahdys);
610
611        //foreach (PhysicsObject taso in tasot)
612        //for(int i = 0; i<tasot.Count; i++)
613        int i = 0;
614        while (i < tasot.Count)
615        {
616            if (((tasot[i].X - kohde.X) < 100) && ((tasot[i].X - kohde.X) > -100)
617                && ((tasot[i].Y - kohde.Y) < 80) && ((tasot[i].Y - kohde.Y) > -80))
618            {
619                tasot[i].Destroy();
620                tasot.RemoveAt(i);
621                pisteet += 100;
622                pisteetL.Value = pisteet;
623            }
624            else
625            {
626                i++;
627            }
628        }
629        int w = 0;
630        while (w < taso2t.Count)
631        {
632            if (((taso2t[w].X - kohde.X) < 100) && ((taso2t[w].X - kohde.X) > -100)
633                && ((taso2t[w].Y - kohde.Y) < 80) && ((taso2t[w].Y - kohde.Y) > -80))
634            {
635                taso2t[w].Destroy();
636                taso2t.RemoveAt(w);
637                pisteet += 300;
638                pisteetL.Value = pisteet;
639            }
640            else
641            {
642                w++;
643            }
644        }
645        int o = 0;
646        while (o < tntt.Count)
647        {
648            if (((tntt[o].X - kohde.X) < 100) && ((tntt[o].X - kohde.X) > -100)
649                && ((tntt[o].Y - kohde.Y) < 80) && ((tntt[o].Y - kohde.Y) > -80))
650            {
651                Vector räjähdysPaikka = tntt[o].Position;
652                tntt[o].Destroy();
653                tntt.RemoveAt(o);
654                pisteet += 100;
655                pisteetL.Value = pisteet;
656                Räjähdys(räjähdysPaikka);
657
658            }
659            else
660            {
661                o++;
662            }
663        }
664    }
665
666    void LuoPalikat(int x)
667    {
668
669        if (randomKentät == 0)
670        {
671            TileMap kentta = TileMap.FromFile("kentta" + x + ".txt");
672            kentta['#'] = lisaaTaso;
673            kentta['!'] = lisaaTaso2;
674            kentta['p'] = lisaaPystyTaso;
675            kentta['P'] = lisaaPystyTasoTuhoutumaton;
676            kentta['*'] = lisaaTNT;
677            kentta['T'] = lisaaTasoTuhoutumaton;
678            kentta['m'] = LuoMaila;
679            kentta['-'] = LuoReunat;
680            kentta['_'] = LuoAlaReuna;
681            kentta['y'] = LuoYläReuna;
682            kentta.Insert(20, 20);
683        }
684        else
685        {
686            TileMap kentta = TileMap.FromFile("kenttarandom.txt");
687            kentta['#'] = lisaaRandomTaso;
688            kentta['m'] = LuoMaila;
689            kentta['-'] = LuoReunat;
690            kentta['_'] = LuoAlaReuna;
691            kentta['y'] = LuoYläReuna;
692            kentta.Insert(40, 40);
693        }
694    }
695
696    PhysicsObject lisaaTaso()
697    {
698        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 10);
699        taso.Tag = "taso";
700        taso.Image = tasoKuva;
701        taso.Restitution = 1.0;
702        tasot.Add(taso);
703        return taso;
704    }
705
706    PhysicsObject lisaaTasoTuhoutumaton()
707    {
708        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(40, 10);
709        tasoTuhoutumaton.Tag = "ttaso";
710        tasoTuhoutumaton.Image = tasoTuhoutumatonKuva;
711        tasoTuhoutumaton.Restitution = 1.0;
712        return tasoTuhoutumaton;
713    }
714
715    PhysicsObject lisaaPystyTaso()
716    {
717        PhysicsObject taso = PhysicsObject.CreateStaticObject(10, 40);
718        taso.Tag = "taso";
719        taso.Image = tasoKuva;
720        taso.Restitution = 1.0;
721        tasot.Add(taso);
722        return taso;
723    }
724
725    PhysicsObject lisaaPystyTasoTuhoutumaton()
726    {
727        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(10, 40);
728        tasoTuhoutumaton.Tag = "ttaso";
729        tasoTuhoutumaton.Image = tasoTuhoutumatonKuvaPysty;
730        tasoTuhoutumaton.Restitution = 1.0;
731        return tasoTuhoutumaton;
732    }
733
734    PhysicsObject lisaaTaso2()
735    {
736        Taso2 taso2 = new Taso2();
737        taso2.Tag = "taso2";
738        taso2.Image = taso2Kuva;
739        taso2.Restitution = 1.0;
740        taso2t.Add(taso2);
741        return taso2;
742    }
743
744    PhysicsObject lisaaTNT()
745    {
746        tnt = PhysicsObject.CreateStaticObject(40, 10);
747        tnt.Image = tntKuva;
748        tnt.Restitution = 1;
749        tntt.Add(tnt);
750        tnt.Tag = "TNT";
751
752        return tnt;
753    }
754
755    PhysicsObject LuoMaila()
756    {
757        maila = PhysicsObject.CreateStaticObject(60.0, 10);
758        maila.Shape = Shape.Rectangle;
759        maila.Image = mailanKuva;
760        maila.Restitution = 0.5;
761        maila.Color = Color.Green;
762        AddCollisionHandler(maila, KäsitteleMailanTörmäys);
763        return maila;
764    }
765
766    PhysicsObject lisaaRandomTaso()
767    {
768        int tasonTyyppi = RandomGen.NextInt(1, 4);
769        PhysicsObject taso;
770
771        if (tasonTyyppi == 1)
772        {
773            taso = lisaaTaso();
774        }
775        else if (tasonTyyppi == 2)
776        {
777            taso = lisaaTaso2();
778        }
779        else if (tasonTyyppi == 3)
780        {
781            taso = lisaaTNT();
782        }
783        else if (tasonTyyppi == 4)
784        {
785            MessageDisplay.Add("tuli nelonen");
786            taso = lisaaTaso();
787        }
788        else
789        {
790            taso = lisaaTaso();
791        }
792
793
794        return taso;
795    }
796
797    PhysicsObject LuoReunat()
798    {
799        PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 800);
800        reuna.IsVisible = false;
801        reuna.Restitution = 1.0;
802        return reuna;
803    }
804
805    PhysicsObject LuoAlaReuna()
806    {
807        alaReuna = PhysicsObject.CreateStaticObject(800, 40);
808        alaReuna.Color = Color.Black;
809        alaReuna.IsVisible = false;
810        alaReuna.Restitution = 1.0;
811        return alaReuna;
812    }
813
814    PhysicsObject LuoYläReuna()
815    {
816        PhysicsObject yläReuna = PhysicsObject.CreateStaticObject(800, 40);
817        yläReuna.Color = Color.Black;
818        yläReuna.IsVisible = false;
819        yläReuna.Restitution = 1.0;
820        return yläReuna;
821    }
822
823    void KäsitteleMailanTörmäys(PhysicsObject maila, PhysicsObject kohde)
824    {
825        if (kohde.Tag.ToString() == "elämä")
826        {
827            AnnaElämä();
828            kohde.Destroy();
829        }
830        else if (kohde.Tag.ToString() == "Power6")
831        {
832
833            if (pieniMaila == 1)
834            {
835                PalautaMaila();
836            }
837            else if (isoMaila == 0)
838            {
839                maila.Width += 20;
840                isoMaila = 1;
841                Timer.SingleShot(20, PalautaMaila);
842            }
843
844            kohde.Destroy();
845        }
846        else if (kohde.Tag.ToString() == "Power7")
847        {
848            if (isoMaila == 1)
849            {
850                PalautaMaila();
851            }
852            else if (pieniMaila == 0)
853            {
854                kohde.Destroy();
855                pieniMaila = 1;
856                maila.Width -= 20;
857                Timer.SingleShot(20, PalautaMaila);
858            }
859
860        }
861
862        else if (kohde.Tag.ToString() == "Power9")
863        {
864
865            if (pieniPallo == 1)
866            {
867                PalautaPallo();
868            }
869            else if (isoPallo == 0)
870            {
871                pallo.Size = new Vector(24, 24);
872                isoPallo = 1;
873                Timer.SingleShot(20, PalautaPallo);
874            }
875
876            kohde.Destroy();
877        }
878        else if (kohde.Tag.ToString() == "Power8")
879        {
880            if (isoPallo == 1)
881            {
882                PalautaPallo();
883            }
884            else if (pieniPallo == 0)
885            {
886                kohde.Destroy();
887                pieniPallo = 1;
888                pallo.Size = new Vector(12, 12);
889                Timer.SingleShot(20, PalautaPallo);
890            }
891
892        }
893
894        for (int i = 1; i < 6; i++)
895        {
896            if (kohde.Tag.ToString() == "Power" + i)
897            {
898                kohde.Destroy();
899                pisteet += i * 1000;
900            }
901       
902        }
903       
904        pisteetL.Value = pisteet;
905        pisteetL.Value = pisteet;
906    }
907
908    void PalautaMaila()
909    {
910        if (isoMaila == 1)
911        {
912            maila.Width = 60;
913            isoMaila = 0;
914        }
915        if (pieniMaila == 1)
916        {
917            maila.Width = 60;
918
919            pieniMaila = 0;
920        }
921
922    }
923
924    void PalautaPallo()
925    {
926        if (isoPallo == 1)
927        {
928            isoPallo = 0;
929        }
930        if (pieniPallo == 1)
931        {
932            pieniPallo = 0;
933        }
934
935    }
936
937    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
938    {
939        if ((nopeus.X < 0) && (maila.Left < Level.Left + 40))
940        {
941            maila.Velocity = Vector.Zero;
942            return;
943        }
944
945        if ((nopeus.X > 0) && (maila.Right > Level.Right - 40))
946        {
947            maila.Velocity = Vector.Zero;
948            return;
949        }
950        maila.Velocity = nopeus;
951    }
952
953    void HävisitPelin()
954    {
955        ClearAll();
956        Label tekstikentta = new Label("Hävisit. Sait " + pisteet + " pistettä");
957        Add(tekstikentta);
958        Timer.SingleShot(3, Valikko);
959    }
960
961    protected override void Update(Time time)
962    {
963        if (pallo != null && Math.Abs(pallo.Velocity.Y) < pallonNopeus)
964        {
965            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
966
967        }
968        //if (pallo != null && Math.Abs(pallo.Velocity.X) < pallonNopeus)
969        //{
970        //    pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
971
972        //}
973        base.Update(time);
974
975    }
976
977}
Note: See TracBrowser for help on using the repository browser.