source: 2011/23/iltakuop/Blocks/Blocks/Blocks/Peli2.cs @ 1855

Revision 1855, 26.2 KB checked in by iltakuop, 8 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            tasot.Remove(kohde);
427            Timer.SingleShot(0.01, kohde.Destroy);
428           
429            TarkistaVoitto();
430        }
431        if (kohde.Tag.ToString() == "taso2")
432        {
433            Taso2 taso2 = (Taso2)kohde;
434            taso2.hitPoints--;
435            if (taso2.hitPoints == 1)
436            { taso2.Image = taso2Kuva2; }
437            else if (taso2.hitPoints == 0)
438            {
439                AnnaPowerUp(kohde);
440                taso2t.Remove(kohde);
441                Timer.SingleShot(0.01, kohde.Destroy);
442                pisteet += 300;
443            }
444           
445            TarkistaVoitto();
446           
447        }
448        if (kohde.Tag.ToString() == "TNT")
449        {
450            pisteet += 100;
451            Räjähdys(kohde.Position);
452            Timer.SingleShot(0.01, kohde.Destroy);
453            TarkistaVoitto();
454           
455        }
456
457        if (kohde.Tag.ToString() == "ttaso" && pallo.Velocity.X < 10)
458        {
459            Timer.SingleShot(0.05, korjaaXSuunta);
460
461        }
462        if (kohde != maila && pallo.Velocity.Y == 0 && ySuuntaKorjattu == 0)
463        {
464            Timer.SingleShot(0.05, korjaaYSuunta);
465            ySuuntaKorjattu = 1;
466        }
467
468        pisteetL.Value = pisteet;
469        elämätL.Value = elämät;
470
471    }
472
473    void korjaaXSuunta()
474    {
475        if (pallo.Velocity.X == 0) pallo.Velocity = new Vector(100, pallo.Velocity.Y);
476    }
477
478    void korjaaYSuunta()
479    {
480        if (pallo.Velocity.Y == 0)
481        { pallo.Velocity = new Vector(pallo.Velocity.X, 100); }
482
483        ySuuntaKorjattu = 0;
484    }
485
486
487    void AnnaPowerUp(PhysicsObject kohde)
488    {
489        int Power = RandomGen.NextInt(0, 100);
490        //int mailaPower1 = RandomGen.NextInt(0, 20);
491        //int mailaPower2 = RandomGen.NextInt(0, 20);
492        if (Power < 5)
493        {
494            PudotaElämä(kohde);
495        }
496        else if ((Power > 4)&&(Power < 10))
497        {
498            PudotaPower(kohde, 1);
499        }
500        else if ((Power > 9) && (Power < 14))
501        {
502            PudotaPower(kohde, 2);
503        }
504        else if ((Power > 13) && (Power < 17))
505        {
506            PudotaPower(kohde, 3);
507        }
508        else if ((Power > 16) && (Power < 19))
509        {
510            PudotaPower(kohde, 4);
511        }
512        else if ((Power > 18) && (Power < 20))
513        {
514            PudotaPower(kohde, 5);
515        }
516        else if ((Power > 19) && (Power < 25))
517        {
518            PudotaPower(kohde, 6);
519        }
520        else if ((Power > 24) && (Power < 30))
521        {
522            PudotaPower(kohde, 7);
523        }
524        else if ((Power > 29) && (Power < 35))
525        {
526            PudotaPower(kohde, 8);
527        }
528        else if ((Power > 34) && (Power < 40))
529        {
530            PudotaPower(kohde, 9);
531        }
532    }
533
534    void PudotaElämä(PhysicsObject kohde)
535    {
536        elämä = new PhysicsObject(10, 10);
537        elämä.IgnoresCollisionResponse = true;
538        elämä.Tag = "elämä";
539        elämä.Position = kohde.Position;
540        elämä.Image = elämänKuva;
541        Vector impulssi = new Vector(0, -100);
542        Add(elämä);
543        elämä.Hit(impulssi);
544    }
545
546    void PudotaPower(PhysicsObject kohde, int x)
547    {
548        int y = x;
549        y--;
550        PhysicsObject Power = new PhysicsObject(10, 10);
551        Power.IgnoresCollisionResponse = true;
552        Power.Tag = "Power" + x;
553        Power.Position = kohde.Position;
554        Power.Image = kuvat[y];
555        Vector impulssi = new Vector(0, -100);
556        Add(Power);
557        Power.Hit(impulssi);
558    }
559
560
561
562    void TarkistaVoitto()
563    {
564        if ((tasot.Count == 0) && (taso2t.Count == 0) && (tntt.Count == 0))
565        {
566            SeuraavaTaso();
567        }
568
569    }
570
571    void SeuraavaTaso()
572    {
573        tasot.Clear();
574        tntt.Clear();
575        taso2t.Clear();
576        kenttäNro += 1;
577        if (kenttäNro > kenttäMäärä)
578        {
579            ClearAll();
580            Label tekstikentta = new Label("Voitit, onneksi olkoon! Sait " + pisteet + " pistettä!");
581            Add(tekstikentta);
582            Timer.SingleShot(2, Exit);
583        }
584        else
585        {
586            ClearAll();
587            Label tekstikentta = new Label("Pääsit seuraavaan tasoon");
588            Add(tekstikentta);
589            Timer.SingleShot(1.5, SeuraavaTaso2);
590        }
591
592    }
593
594    void SeuraavaTaso2()
595    {
596        ClearAll();
597        LuoKenttä(kenttäNro);
598        AsetaOhjaimet();
599        LisääLaskurit(elämät, pisteet);
600        AloitaPeliUudestaan();
601    }
602
603    void Räjähdys(Vector kohde)
604    {
605
606        Explosion rajahdys = new Explosion(50);
607        rajahdys.Position = kohde;
608        rajahdys.Force = 150;
609        rajahdys.Speed = 600;
610        rajahdys.ShockwaveColor = Color.Yellow;
611        Add(rajahdys);
612
613        //foreach (PhysicsObject taso in tasot)
614        //for(int i = 0; i<tasot.Count; i++)
615        int i = 0;
616        while (i < tasot.Count)
617        {
618            if (((tasot[i].X - kohde.X) < 100) && ((tasot[i].X - kohde.X) > -100)
619                && ((tasot[i].Y - kohde.Y) < 80) && ((tasot[i].Y - kohde.Y) > -80))
620            {
621                tasot[i].Destroy();
622                tasot.RemoveAt(i);
623                pisteet += 100;
624                pisteetL.Value = pisteet;
625            }
626            else
627            {
628                i++;
629            }
630        }
631        int w = 0;
632        while (w < taso2t.Count)
633        {
634            if (((taso2t[w].X - kohde.X) < 100) && ((taso2t[w].X - kohde.X) > -100)
635                && ((taso2t[w].Y - kohde.Y) < 80) && ((taso2t[w].Y - kohde.Y) > -80))
636            {
637                taso2t[w].Destroy();
638                taso2t.RemoveAt(w);
639                pisteet += 300;
640                pisteetL.Value = pisteet;
641            }
642            else
643            {
644                w++;
645            }
646        }
647        int o = 0;
648        while (o < tntt.Count)
649        {
650            if (((tntt[o].X - kohde.X) < 100) && ((tntt[o].X - kohde.X) > -100)
651                && ((tntt[o].Y - kohde.Y) < 80) && ((tntt[o].Y - kohde.Y) > -80))
652            {
653                Vector räjähdysPaikka = tntt[o].Position;
654                tntt[o].Destroy();
655                tntt.RemoveAt(o);
656                pisteet += 100;
657                pisteetL.Value = pisteet;
658                Räjähdys(räjähdysPaikka);
659
660            }
661            else
662            {
663                o++;
664            }
665        }
666    }
667
668    void LuoPalikat(int x)
669    {
670
671        if (randomKentät == 0)
672        {
673            TileMap kentta = TileMap.FromFile("kentta" + x + ".txt");
674            kentta['#'] = lisaaTaso;
675            kentta['!'] = lisaaTaso2;
676            kentta['p'] = lisaaPystyTaso;
677            kentta['P'] = lisaaPystyTasoTuhoutumaton;
678            kentta['*'] = lisaaTNT;
679            kentta['T'] = lisaaTasoTuhoutumaton;
680            kentta['m'] = LuoMaila;
681            kentta['-'] = LuoReunat;
682            kentta['_'] = LuoAlaReuna;
683            kentta['y'] = LuoYläReuna;
684            kentta.Insert(20, 20);
685        }
686        else
687        {
688            TileMap kentta = TileMap.FromFile("kenttarandom.txt");
689            kentta['#'] = lisaaRandomTaso;
690            kentta['m'] = LuoMaila;
691            kentta['-'] = LuoReunat;
692            kentta['_'] = LuoAlaReuna;
693            kentta['y'] = LuoYläReuna;
694            kentta.Insert(40, 40);
695        }
696    }
697
698    PhysicsObject lisaaTaso()
699    {
700        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 10);
701        taso.Tag = "taso";
702        taso.Image = tasoKuva;
703        taso.Restitution = 1.0;
704        tasot.Add(taso);
705        return taso;
706    }
707
708    PhysicsObject lisaaTasoTuhoutumaton()
709    {
710        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(40, 10);
711        tasoTuhoutumaton.Tag = "ttaso";
712        tasoTuhoutumaton.Image = tasoTuhoutumatonKuva;
713        tasoTuhoutumaton.Restitution = 1.0;
714        return tasoTuhoutumaton;
715    }
716
717    PhysicsObject lisaaPystyTaso()
718    {
719        PhysicsObject taso = PhysicsObject.CreateStaticObject(10, 40);
720        taso.Tag = "taso";
721        taso.Image = tasoKuva;
722        taso.Restitution = 1.0;
723        tasot.Add(taso);
724        return taso;
725    }
726
727    PhysicsObject lisaaPystyTasoTuhoutumaton()
728    {
729        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(10, 40);
730        tasoTuhoutumaton.Tag = "ttaso";
731        tasoTuhoutumaton.Image = tasoTuhoutumatonKuvaPysty;
732        tasoTuhoutumaton.Restitution = 1.0;
733        return tasoTuhoutumaton;
734    }
735
736    PhysicsObject lisaaTaso2()
737    {
738        Taso2 taso2 = new Taso2();
739        taso2.Tag = "taso2";
740        taso2.Image = taso2Kuva;
741        taso2.Restitution = 1.0;
742        taso2t.Add(taso2);
743        return taso2;
744    }
745
746    PhysicsObject lisaaTNT()
747    {
748        tnt = PhysicsObject.CreateStaticObject(40, 10);
749        tnt.Image = tntKuva;
750        tnt.Restitution = 1;
751        tntt.Add(tnt);
752        tnt.Tag = "TNT";
753
754        return tnt;
755    }
756
757    PhysicsObject LuoMaila()
758    {
759        maila = PhysicsObject.CreateStaticObject(60.0, 10);
760        maila.Shape = Shape.Rectangle;
761        maila.Image = mailanKuva;
762        maila.Restitution = 0.5;
763        maila.Color = Color.Green;
764        AddCollisionHandler(maila, KäsitteleMailanTörmäys);
765        return maila;
766    }
767
768    PhysicsObject lisaaRandomTaso()
769    {
770        int tasonTyyppi = RandomGen.NextInt(1, 4);
771        PhysicsObject taso;
772
773        if (tasonTyyppi == 1)
774        {
775            taso = lisaaTaso();
776        }
777        else if (tasonTyyppi == 2)
778        {
779            taso = lisaaTaso2();
780        }
781        else if (tasonTyyppi == 3)
782        {
783            taso = lisaaTNT();
784        }
785        else if (tasonTyyppi == 4)
786        {
787            MessageDisplay.Add("tuli nelonen");
788            taso = lisaaTaso();
789        }
790        else
791        {
792            taso = lisaaTaso();
793        }
794
795
796        return taso;
797    }
798
799    PhysicsObject LuoReunat()
800    {
801        PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 800);
802        reuna.IsVisible = false;
803        reuna.Restitution = 1.0;
804        return reuna;
805    }
806
807    PhysicsObject LuoAlaReuna()
808    {
809        alaReuna = PhysicsObject.CreateStaticObject(800, 40);
810        alaReuna.Color = Color.Black;
811        alaReuna.IsVisible = false;
812        alaReuna.Restitution = 1.0;
813        return alaReuna;
814    }
815
816    PhysicsObject LuoYläReuna()
817    {
818        PhysicsObject yläReuna = PhysicsObject.CreateStaticObject(800, 40);
819        yläReuna.Color = Color.Black;
820        yläReuna.IsVisible = false;
821        yläReuna.Restitution = 1.0;
822        return yläReuna;
823    }
824
825    void KäsitteleMailanTörmäys(PhysicsObject maila, PhysicsObject kohde)
826    {
827        if (kohde.Tag.ToString() == "elämä")
828        {
829            AnnaElämä();
830            kohde.Destroy();
831        }
832        else if (kohde.Tag.ToString() == "Power6")
833        {
834
835            if (pieniMaila == 1)
836            {
837                PalautaMaila();
838            }
839            else if (isoMaila == 0)
840            {
841                maila.Width += 20;
842                isoMaila = 1;
843                Timer.SingleShot(20, PalautaMaila);
844            }
845
846            kohde.Destroy();
847        }
848        else if (kohde.Tag.ToString() == "Power7")
849        {
850            if (isoMaila == 1)
851            {
852                PalautaMaila();
853            }
854            else if (pieniMaila == 0)
855            {
856               
857                pieniMaila = 1;
858                maila.Width -= 20;
859                Timer.SingleShot(20, PalautaMaila);
860            }
861            kohde.Destroy();
862
863        }
864
865        else if (kohde.Tag.ToString() == "Power9")
866        {
867
868            if (pieniPallo == 1)
869            {
870                PalautaPallo();
871            }
872            else if (isoPallo == 0)
873            {
874                pallo.Size = new Vector(24, 24);
875                isoPallo = 1;
876                Timer.SingleShot(20, PalautaPallo);
877            }
878
879            kohde.Destroy();
880        }
881        else if (kohde.Tag.ToString() == "Power8")
882        {
883            if (isoPallo == 1)
884            {
885                PalautaPallo();
886            }
887            else if (pieniPallo == 0)
888            {
889                pieniPallo = 1;
890                pallo.Size = new Vector(12, 12);
891                Timer.SingleShot(20, PalautaPallo);
892            }
893            kohde.Destroy();
894
895        }
896
897        for (int i = 1; i < 6; i++)
898        {
899            if (kohde.Tag.ToString() == "Power" + i)
900            {
901                kohde.Destroy();
902                pisteet += i * 1000;
903            }
904       
905        }
906       
907        pisteetL.Value = pisteet;
908        pisteetL.Value = pisteet;
909    }
910
911    void PalautaMaila()
912    {
913        if (isoMaila == 1)
914        {
915            maila.Width = 60;
916            isoMaila = 0;
917        }
918        if (pieniMaila == 1)
919        {
920            maila.Width = 60;
921
922            pieniMaila = 0;
923        }
924
925    }
926
927    void PalautaPallo()
928    {
929        if (isoPallo == 1)
930        {
931            isoPallo = 0;
932        }
933        if (pieniPallo == 1)
934        {
935            pieniPallo = 0;
936        }
937
938    }
939
940    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
941    {
942        if ((nopeus.X < 0) && (maila.Left < Level.Left + 40))
943        {
944            maila.Velocity = Vector.Zero;
945            return;
946        }
947
948        if ((nopeus.X > 0) && (maila.Right > Level.Right - 40))
949        {
950            maila.Velocity = Vector.Zero;
951            return;
952        }
953        maila.Velocity = nopeus;
954    }
955
956    void HävisitPelin()
957    {
958        ClearAll();
959        Label tekstikentta = new Label("Hävisit. Sait " + pisteet + " pistettä");
960        Add(tekstikentta);
961        Timer.SingleShot(3, Valikko);
962    }
963
964    protected override void Update(Time time)
965    {
966        if (pallo != null && Math.Abs(pallo.Velocity.Y) < pallonNopeus)
967        {
968            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
969
970        }
971        //if (pallo != null && Math.Abs(pallo.Velocity.X) < pallonNopeus)
972        //{
973        //    pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
974
975        //}
976        base.Update(time);
977
978    }
979
980}
Note: See TracBrowser for help on using the repository browser.