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

Revision 1871, 31.3 KB checked in by iltakuop, 9 years ago (diff)

testi testi

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        Label kohta5 = new Label("Tekijät");
118        kohta5.Position = new Vector(0, -120);
119        valikonKohdat.Add(kohta5);
120
121        foreach (Label valikonKohta in valikonKohdat)
122        {
123            Add(valikonKohta);
124        }
125
126        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
127        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Asetukset, null);
128        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
129        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Ohjeet, null);
130        Mouse.ListenOn(kohta5, MouseButton.Left, ButtonState.Pressed, Tekijat, null);
131
132        Mouse.IsCursorVisible = true;
133        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
134        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
135    }
136
137    void ValikossaLiikkuminen(AnalogState hiirenTila)
138    {
139        foreach (Label kohta in valikonKohdat)
140        {
141            if (Mouse.IsCursorOn(kohta))
142            {
143                kohta.TextColor = Color.Red;
144            }
145            else
146            {
147                kohta.TextColor = Color.Black;
148            }
149
150        }
151    }
152
153    void ValikossaLiikkuminen2(AnalogState hiirenTila)
154    {
155        foreach (Label kohta in valikonKohdat)
156        {
157            if (Mouse.IsCursorOn(kohta))
158            {
159                kohta.TextColor = Color.Red;
160            }
161            else
162            {
163                kohta.TextColor = Color.White;
164            }
165
166        }
167    }
168
169
170    void AloitaPeli()
171    {
172        ClearAll();
173        äläLuoPalloa = 0;
174        nollaaPisteet();
175        LuoKenttä(1);
176        AsetaOhjaimet();
177        LisääLaskurit(3, 0);
178        AloitaPeliUudestaan();
179    }
180
181    void nollaaPisteet()
182    {
183        kenttäNro = 1;
184        pisteet = 0;
185        elämät = 3;
186    }
187
188    void Lopeta()
189    {
190        Exit();
191    }
192
193    void Ohjeet()
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("Palikat");
204        kohta1.Position = new Vector(-200, 200);
205        valikonKohdat.Add(kohta1);
206        kohta1.TextColor = Color.White;
207
208        Label kohta2 = new Label("Powerupit");
209        kohta2.Position = new Vector(200, 200);
210        valikonKohdat.Add(kohta2);
211        kohta2.TextColor = Color.White;
212
213        Label kohta1a = new Label("Tavallinen");
214        kohta1a.Position = new Vector(Level.Left + 200, 150);
215        valikonKohdat.Add(kohta1a);
216        kohta1a.TextColor = Color.White;
217
218       
219
220        Label kohta1b1 = new Label("Vahvistettu palikka, vaatii");
221        kohta1b1.Position = new Vector(Level.Left + 283, 100);
222        valikonKohdat.Add(kohta1b1);
223        kohta1b1.TextColor = Color.White;
224
225        Label kohta1b2 = new Label("kaksi osumaa tuhoutuakseen");
226        kohta1b2.Position = new Vector(Level.Left + 300, 75);
227        valikonKohdat.Add(kohta1b2);
228        kohta1b2.TextColor = Color.White;
229
230
231        Label kohta1c1 = new Label("TNT palikka, räjähtää");
232        kohta1c1.Position = new Vector(Level.Left + 261, 25);
233        valikonKohdat.Add(kohta1c1);
234        kohta1c1.TextColor = Color.White;
235
236        Label kohta1c2 = new Label("pallon osuessa");
237        kohta1c2.Position = new Vector(Level.Left + 227, 0);
238        valikonKohdat.Add(kohta1c2);
239        kohta1c2.TextColor = Color.White;
240
241        Label kohta1d = new Label("Tuhoutumaton seinä");
242        kohta1d.Position = new Vector(Level.Left + 257, -50);
243        valikonKohdat.Add(kohta1d);
244        kohta1d.TextColor = Color.White;
245
246        foreach (Label valikonKohta in valikonKohdat)
247        {
248            Add(valikonKohta);
249        }
250
251        PhysicsObject ohjeTaso = lisaaTaso();
252        ohjeTaso.Position = new Vector(Level.Left + 100, 135);
253        ohjeTaso.Size = new Vector(80, 20);
254        Add(ohjeTaso);
255
256        PhysicsObject ohjeTaso2 = lisaaTaso2();
257        ohjeTaso2.Position = new Vector(Level.Left + 100, 80);
258        ohjeTaso2.Size = new Vector(80, 20);
259        Add(ohjeTaso2);
260
261        PhysicsObject ohjeTNT = lisaaTNT();
262        ohjeTNT.Position = new Vector(Level.Left + 100, 15);
263        ohjeTNT.Size = new Vector(80, 20);
264        Add(ohjeTNT);
265
266        PhysicsObject ohjeTuhoutumaton = lisaaTasoTuhoutumaton();
267        ohjeTuhoutumaton.Position = new Vector(Level.Left + 100, -45);
268        ohjeTuhoutumaton.Size = new Vector(80, 20);
269        Add(ohjeTuhoutumaton);
270
271
272        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
273    }
274
275    void Tekijat()
276    {
277        ClearAll();
278
279        Level.Background.Image = taustaKuva;
280        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
281        Camera.ZoomToLevel(1);
282
283        valikonKohdat = new List<Label>();
284
285        Label kohta1 = new Label("Pääohjelmoija");
286        kohta1.Position = new Vector(0, 175);
287        valikonKohdat.Add(kohta1);
288        kohta1.TextColor = Color.White;
289        //kohta1.TextSize = ;
290
291        Label kohta1a = new Label("Ilari Kuoppala");
292        kohta1a.Position = new Vector(0, 150);
293        valikonKohdat.Add(kohta1a);
294        kohta1a.TextColor = Color.White;
295
296        Label kohta2 = new Label("Pääsuunnittelija");
297        kohta2.Position = new Vector(0, 50);
298        valikonKohdat.Add(kohta2);
299        kohta2.TextColor = Color.White;
300        //kohta2.TextSize = ;
301
302        Label kohta2a = new Label("Tianzhong Pan");
303        kohta2a.Position = new Vector(0, 25);
304        valikonKohdat.Add(kohta2a);
305        kohta2a.TextColor = Color.White;
306
307        Label kohta3 = new Label("Erityiskiitokset");
308        kohta3.Position = new Vector(0, -75);
309        valikonKohdat.Add(kohta3);
310        kohta3.TextColor = Color.White;
311        //kohta3.TextSize = ;
312
313        Label kohta3a = new Label("Miro Aurala");
314        kohta3a.Position = new Vector(0, -100);
315        valikonKohdat.Add(kohta3a);
316        kohta3a.TextColor = Color.White;
317
318        Label kohta3b = new Label("Ville-Pekka Keisala");
319        kohta3b.Position = new Vector(0, -125);
320        valikonKohdat.Add(kohta3b);
321        kohta3b.TextColor = Color.White;
322
323        Label kohta3c = new Label("Henri Munter");
324        kohta3c.Position = new Vector(0, -150);
325        valikonKohdat.Add(kohta3c);
326        kohta3c.TextColor = Color.White;
327
328        Label kohta3d = new Label("Jyväskylän yliopisto & Keski-Suomen opisto");
329        kohta3d.Position = new Vector(0, -175);
330        valikonKohdat.Add(kohta3d);
331        kohta3d.TextColor = Color.White;
332
333        foreach (Label valikonKohta in valikonKohdat)
334        {
335            Add(valikonKohta);
336        }
337
338        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
339    }
340
341    void Asetukset()
342    {
343        ClearAll();
344
345        Level.Background.Image = taustaKuva2;
346        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
347        Camera.ZoomToLevel(1);
348
349        valikonKohdat = new List<Label>();
350
351        Label kohta1 = new Label("Pallon nopeus");
352        kohta1.Position = new Vector(-80, 40);
353        valikonKohdat.Add(kohta1);
354        kohta1.TextColor = Color.White;
355
356        Label kohta2 = new Label("Mailan nopeus");
357        kohta2.Position = new Vector(-80, -40);
358        valikonKohdat.Add(kohta2);
359        kohta2.TextColor = Color.White;
360
361        Label kohta3 = new Label("Takaisin");
362        kohta3.Position = new Vector(80, -40);
363        valikonKohdat.Add(kohta3);
364        kohta3.TextColor = Color.White;
365
366        Label kohta4 = new Label("Satunaiset kentät");
367        kohta4.TextColor = Color.White;
368
369        if (randomKentät == 1)
370        {
371            päälläPois = new Label("Päällä");
372        }
373        else { päälläPois = new Label("Pois päältä"); }
374        kohta4.Position = new Vector(100, 40);
375        päälläPois.Position = new Vector(70, 15);
376        päälläPois.TextColor = Color.White;
377        valikonKohdat.Add(päälläPois);
378        Add(kohta4);
379
380        foreach (Label valikonKohta in valikonKohdat)
381        {
382            Add(valikonKohta);
383        }
384
385        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AsetaPallonNopeus, null);
386        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, AsetaMailanNopeus, null);
387        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Valikko, null);
388        Mouse.ListenOn(päälläPois, MouseButton.Left, ButtonState.Pressed, satunaisetKentät, null);
389
390        Mouse.IsCursorVisible = true;
391        Mouse.ListenMovement(1.0, ValikossaLiikkuminen2, null);
392        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
393    }
394
395    void satunaisetKentät()
396    {
397        if (randomKentät == 1)
398        {
399            randomKentät = 0;
400        }
401        else
402        {
403            randomKentät = 1;
404        }
405        Asetukset();
406    }
407
408    void AsetaPallonNopeus()
409    {
410        InputWindow kysymysIkkuna = new InputWindow("Pallon nopeus", "Oletus on 300");
411        kysymysIkkuna.TextEntered += KäsitteleAsetukset;
412        Add(kysymysIkkuna);
413
414    }
415
416    void AsetaMailanNopeus()
417    {
418        InputWindow kysymysIkkuna = new InputWindow("Mailan nopeus", "Oletus on 600");
419        kysymysIkkuna.TextEntered += KäsitteleAsetukset2;
420        Add(kysymysIkkuna);
421    }
422
423    void KäsitteleAsetukset(InputWindow ikkuna)
424    {
425        try
426        {
427            int vastaus = int.Parse(ikkuna.InputBox.Text);
428            pallonNopeus = vastaus;
429        }
430        catch (FormatException)
431        {
432            ClearAll();
433            Label tekstikentta = new Label("Anna luku!");
434            Add(tekstikentta);
435            Timer.SingleShot(2, ClearAll);
436            Timer.SingleShot(2.01, Asetukset);
437        }
438    }
439
440    void KäsitteleAsetukset2(InputWindow ikkuna)
441    {
442        try
443        {
444            int vastaus = int.Parse(ikkuna.InputBox.Text);
445            mailanNopeus = vastaus;
446        }
447        catch (FormatException)
448        {
449            ClearAll();
450            Label tekstikentta = new Label("Anna luku!");
451            Add(tekstikentta);
452            Timer.SingleShot(2, ClearAll);
453            Timer.SingleShot(2.01, Asetukset);
454        }
455    }
456
457    PhysicsObject LuoPallo() //-170
458    {
459        PhysicsObject pallo1 = new PhysicsObject(18.0, 18.0);
460        pallo1.Image = palloKuva;
461        pallo1.Shape = Shape.Circle;
462        pallo1.Color = Color.LightGreen;
463        pallo1.Tag = "pallo";
464        pallo1.Restitution = 1.0;
465        pallo1.X = 0;
466        pallo1.Y = -168;
467        pallo1.CanRotate = false;
468        palloolemassa = 1;
469        return pallo1;
470    }
471
472    void LuoKenttä(int a)
473    {
474
475        LuoPalikat(a);
476        Level.Background.Image = taustaKuva;
477        Level.Background.Size = new Vector(Screen.Width, Screen.Height);
478
479        Camera.ZoomToLevel(1);
480    }
481
482    void AloitaPeliUudestaan()
483    {
484        maila.X = 0;
485        if (palloolemassa == 1)
486        {
487            pallo.Destroy();
488        }
489        if (äläLuoPalloa == 0)
490        {
491            pallo = LuoPallo();
492            AddCollisionHandler(pallo, KäsittelePallonTörmäys);
493            Add(pallo);
494        }
495    }
496
497    void AsetaOhjaimet()
498    {
499        Vector nopeusVasen = new Vector(-mailanNopeus, 0);
500        Vector nopeusOikea = new Vector(mailanNopeus, 0);
501        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta mailaa oikealle", maila, nopeusOikea);
502        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
503        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta mailaa vasemmalle", maila, nopeusVasen);
504        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
505
506        Keyboard.Listen(Key.T, ButtonState.Pressed, AloitaPeliUudestaan, null);
507        Keyboard.Listen(Key.R, ButtonState.Pressed, DebugRäjäytys, null);
508
509        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
510        Keyboard.Listen(Key.F2, ButtonState.Pressed, SeuraavaTaso, null);
511        Keyboard.Listen(Key.F3, ButtonState.Pressed, AnnaElämä, null);
512
513        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
514
515
516    }
517
518    void AnnaElämä()
519    {
520        elämät++;
521        pisteet += 200;
522        pisteetL.Value = pisteet;
523        elämätL.Value = elämät;
524    }
525
526    void DebugRäjäytys() { Räjähdys(tnt.Position); }
527
528    void LisääLaskurit(int elämät, int pisteet)
529    {
530        pisteetL = LuoPisteLaskuri(Screen.Left + 180.0, Screen.Top - 80.0, pisteet);
531        elämätL = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 80.0, elämät);
532        Label tekstikentta = new Label("Palloja jäljellä: ");
533        tekstikentta.X = Screen.Right - 180;
534        tekstikentta.Y = Screen.Top - 80;
535        tekstikentta.TextColor = Color.White;
536        Label tekstikentta2 = new Label("Pisteet: ");
537        tekstikentta2.X = Screen.Left + 100.0;
538        tekstikentta2.Y = Screen.Top - 80;
539        tekstikentta2.TextColor = Color.White;
540
541        Add(tekstikentta2);
542        Add(tekstikentta);
543    }
544
545    IntMeter LuoPisteLaskuri(double x, double y, int määrä)
546    {
547        IntMeter laskuri = new IntMeter(määrä);
548        Label näyttö = new Label();
549        näyttö.BindTo(laskuri);
550        näyttö.X = x;
551        näyttö.Y = y;
552        näyttö.TextColor = Color.White;
553        Add(näyttö);
554        return laskuri;
555    }
556
557    void KäsittelePallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
558    {
559        if (kohde == alaReuna)
560        {
561            pallo.Destroy();
562            palloolemassa = 0;
563            elämät -= 1;
564            if (elämät == 0)
565            {
566                HävisitPelin();
567            }
568            else Timer.SingleShot(1, AloitaPeliUudestaan);
569        }
570        if (kohde.Tag.ToString() == "taso")
571        {
572            pisteet += 100;
573            AnnaPowerUp(kohde);
574            tasot.Remove(kohde);
575            Timer.SingleShot(0.01, kohde.Destroy);
576           
577            TarkistaVoitto();
578        }
579        if (kohde.Tag.ToString() == "taso2")
580        {
581            Taso2 taso2 = (Taso2)kohde;
582            taso2.hitPoints--;
583            if (taso2.hitPoints == 1)
584            { taso2.Image = taso2Kuva2; }
585            else if (taso2.hitPoints == 0)
586            {
587                AnnaPowerUp(kohde);
588                taso2t.Remove(kohde);
589                Timer.SingleShot(0.01, kohde.Destroy);
590                pisteet += 300;
591            }
592           
593            TarkistaVoitto();
594           
595        }
596        if (kohde.Tag.ToString() == "TNT")
597        {
598            pisteet += 100;
599            Räjähdys(kohde.Position);
600            Timer.SingleShot(0.01, kohde.Destroy);
601            TarkistaVoitto();
602           
603        }
604
605        if (kohde.Tag.ToString() == "ttaso" && pallo.Velocity.X < 10)
606        {
607            Timer.SingleShot(0.05, korjaaXSuunta);
608
609        }
610        if (kohde != maila && pallo.Velocity.Y == 0 && ySuuntaKorjattu == 0)
611        {
612            Timer.SingleShot(0.05, korjaaYSuunta);
613            ySuuntaKorjattu = 1;
614        }
615
616        pisteetL.Value = pisteet;
617        elämätL.Value = elämät;
618
619    }
620
621    void korjaaXSuunta()
622    {
623        if (pallo.Velocity.X == 0) pallo.Velocity = new Vector(100, pallo.Velocity.Y);
624    }
625
626    void korjaaYSuunta()
627    {
628        if (pallo.Velocity.Y == 0)
629        { pallo.Velocity = new Vector(pallo.Velocity.X, 100); }
630
631        ySuuntaKorjattu = 0;
632    }
633
634
635    void AnnaPowerUp(PhysicsObject kohde)
636    {
637        int Power = RandomGen.NextInt(0, 100);
638        //int mailaPower1 = RandomGen.NextInt(0, 20);
639        //int mailaPower2 = RandomGen.NextInt(0, 20);
640        if (Power < 5)
641        {
642            PudotaElämä(kohde);
643        }
644        else if ((Power > 4)&&(Power < 10))
645        {
646            PudotaPower(kohde, 1);
647        }
648        else if ((Power > 9) && (Power < 14))
649        {
650            PudotaPower(kohde, 2);
651        }
652        else if ((Power > 13) && (Power < 17))
653        {
654            PudotaPower(kohde, 3);
655        }
656        else if ((Power > 16) && (Power < 19))
657        {
658            PudotaPower(kohde, 4);
659        }
660        else if ((Power > 18) && (Power < 20))
661        {
662            PudotaPower(kohde, 5);
663        }
664        else if ((Power > 19) && (Power < 25))
665        {
666            PudotaPower(kohde, 6);
667        }
668        else if ((Power > 24) && (Power < 30))
669        {
670            PudotaPower(kohde, 7);
671        }
672        else if ((Power > 29) && (Power < 35))
673        {
674            PudotaPower(kohde, 8);
675        }
676        else if ((Power > 34) && (Power < 40))
677        {
678            PudotaPower(kohde, 9);
679        }
680    }
681
682    void PudotaElämä(PhysicsObject kohde)
683    {
684        elämä = new PhysicsObject(10, 10);
685        elämä.IgnoresCollisionResponse = true;
686        elämä.Tag = "elämä";
687        elämä.Position = kohde.Position;
688        elämä.Image = elämänKuva;
689        Vector impulssi = new Vector(0, -100);
690        Add(elämä);
691        elämä.Hit(impulssi);
692    }
693
694    void PudotaPower(PhysicsObject kohde, int x)
695    {
696        int y = x;
697        y--;
698        PhysicsObject Power = new PhysicsObject(10, 10);
699        Power.IgnoresCollisionResponse = true;
700        Power.Tag = "Power" + x;
701        Power.Position = kohde.Position;
702        Power.Image = kuvat[y];
703        Vector impulssi = new Vector(0, -100);
704        Add(Power);
705        Power.Hit(impulssi);
706    }
707
708
709
710    void TarkistaVoitto()
711    {
712        if ((tasot.Count == 0) && (taso2t.Count == 0) && (tntt.Count == 0))
713        {
714            SeuraavaTaso();
715        }
716
717    }
718
719    void SeuraavaTaso()
720    {
721        tasot.Clear();
722        tntt.Clear();
723        taso2t.Clear();
724        kenttäNro += 1;
725        if (kenttäNro > kenttäMäärä)
726        {
727            ClearAll();
728            Label tekstikentta = new Label("Onneksi olkoon! Sinä voitit pelin! Sait " + pisteet + " pistettä!");
729            Add(tekstikentta);
730            Timer.SingleShot(2, Exit);
731        }
732        else
733        {
734            ClearAll();
735            Label tekstikentta = new Label("Hyvä! Pääsit seuraavaan tasoon");
736            Add(tekstikentta);
737            Timer.SingleShot(1.5, SeuraavaTaso2);
738        }
739
740    }
741
742    void SeuraavaTaso2()
743    {
744        ClearAll();
745        LuoKenttä(kenttäNro);
746        AsetaOhjaimet();
747        LisääLaskurit(elämät, pisteet);
748        AloitaPeliUudestaan();
749    }
750
751    void Räjähdys(Vector kohde)
752    {
753
754        Explosion rajahdys = new Explosion(50);
755        rajahdys.Position = kohde;
756        rajahdys.Force = 150;
757        rajahdys.Speed = 600;
758        rajahdys.ShockwaveColor = Color.Yellow;
759        Add(rajahdys);
760
761        //foreach (PhysicsObject taso in tasot)
762        //for(int i = 0; i<tasot.Count; i++)
763        int i = 0;
764        while (i < tasot.Count)
765        {
766            if (((tasot[i].X - kohde.X) < 100) && ((tasot[i].X - kohde.X) > -100)
767                && ((tasot[i].Y - kohde.Y) < 80) && ((tasot[i].Y - kohde.Y) > -80))
768            {
769                tasot[i].Destroy();
770                tasot.RemoveAt(i);
771                pisteet += 100;
772                pisteetL.Value = pisteet;
773            }
774            else
775            {
776                i++;
777            }
778        }
779        int w = 0;
780        while (w < taso2t.Count)
781        {
782            if (((taso2t[w].X - kohde.X) < 100) && ((taso2t[w].X - kohde.X) > -100)
783                && ((taso2t[w].Y - kohde.Y) < 80) && ((taso2t[w].Y - kohde.Y) > -80))
784            {
785                taso2t[w].Destroy();
786                taso2t.RemoveAt(w);
787                pisteet += 300;
788                pisteetL.Value = pisteet;
789            }
790            else
791            {
792                w++;
793            }
794        }
795        int o = 0;
796        while (o < tntt.Count)
797        {
798            if (((tntt[o].X - kohde.X) < 100) && ((tntt[o].X - kohde.X) > -100)
799                && ((tntt[o].Y - kohde.Y) < 80) && ((tntt[o].Y - kohde.Y) > -80))
800            {
801                Vector räjähdysPaikka = tntt[o].Position;
802                tntt[o].Destroy();
803                tntt.RemoveAt(o);
804                pisteet += 100;
805                pisteetL.Value = pisteet;
806                Räjähdys(räjähdysPaikka);
807
808            }
809            else
810            {
811                o++;
812            }
813        }
814    }
815
816    void LuoPalikat(int x)
817    {
818
819        if (randomKentät == 0)
820        {
821            TileMap kentta = TileMap.FromFile("kentta" + x + ".txt");
822            kentta['#'] = lisaaTaso;
823            kentta['!'] = lisaaTaso2;
824            kentta['p'] = lisaaPystyTaso;
825            kentta['P'] = lisaaPystyTasoTuhoutumaton;
826            kentta['*'] = lisaaTNT;
827            kentta['T'] = lisaaTasoTuhoutumaton;
828            kentta['m'] = LuoMaila;
829            kentta['-'] = LuoReunat;
830            kentta['_'] = LuoAlaReuna;
831            kentta['y'] = LuoYläReuna;
832            kentta.Insert(20, 20);
833        }
834        else
835        {
836            TileMap kentta = TileMap.FromFile("kenttarandom.txt");
837            kentta['#'] = lisaaRandomTaso;
838            kentta['m'] = LuoMaila;
839            kentta['-'] = LuoReunat;
840            kentta['_'] = LuoAlaReuna;
841            kentta['y'] = LuoYläReuna;
842            kentta.Insert(40, 40);
843        }
844    }
845
846    PhysicsObject lisaaTaso()
847    {
848        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 10);
849        taso.Tag = "taso";
850        taso.Image = tasoKuva;
851        taso.Restitution = 1.0;
852        tasot.Add(taso);
853        return taso;
854    }
855
856    PhysicsObject lisaaTasoTuhoutumaton()
857    {
858        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(40, 10);
859        tasoTuhoutumaton.Tag = "ttaso";
860        tasoTuhoutumaton.Image = tasoTuhoutumatonKuva;
861        tasoTuhoutumaton.Restitution = 1.0;
862        return tasoTuhoutumaton;
863    }
864
865    PhysicsObject lisaaPystyTaso()
866    {
867        PhysicsObject taso = PhysicsObject.CreateStaticObject(10, 40);
868        taso.Tag = "taso";
869        taso.Image = tasoKuva;
870        taso.Restitution = 1.0;
871        tasot.Add(taso);
872        return taso;
873    }
874
875    PhysicsObject lisaaPystyTasoTuhoutumaton()
876    {
877        PhysicsObject tasoTuhoutumaton = PhysicsObject.CreateStaticObject(10, 40);
878        tasoTuhoutumaton.Tag = "ttaso";
879        tasoTuhoutumaton.Image = tasoTuhoutumatonKuvaPysty;
880        tasoTuhoutumaton.Restitution = 1.0;
881        return tasoTuhoutumaton;
882    }
883
884    PhysicsObject lisaaTaso2()
885    {
886        Taso2 taso2 = new Taso2();
887        taso2.Tag = "taso2";
888        taso2.Image = taso2Kuva;
889        taso2.Restitution = 1.0;
890        taso2t.Add(taso2);
891        return taso2;
892    }
893
894    PhysicsObject lisaaTNT()
895    {
896        tnt = PhysicsObject.CreateStaticObject(40, 10);
897        tnt.Image = tntKuva;
898        tnt.Restitution = 1;
899        tntt.Add(tnt);
900        tnt.Tag = "TNT";
901
902        return tnt;
903    }
904
905    PhysicsObject LuoMaila()
906    {
907        maila = PhysicsObject.CreateStaticObject(60.0, 10);
908        maila.Shape = Shape.Rectangle;
909        maila.Image = mailanKuva;
910        maila.Restitution = 0.5;
911        maila.Color = Color.Green;
912        AddCollisionHandler(maila, KäsitteleMailanTörmäys);
913        return maila;
914    }
915
916    PhysicsObject lisaaRandomTaso()
917    {
918        int tasonTyyppi = RandomGen.NextInt(1, 4);
919        PhysicsObject taso;
920
921        if (tasonTyyppi == 1)
922        {
923            taso = lisaaTaso();
924        }
925        else if (tasonTyyppi == 2)
926        {
927            taso = lisaaTaso2();
928        }
929        else if (tasonTyyppi == 3)
930        {
931            taso = lisaaTNT();
932        }
933        else if (tasonTyyppi == 4)
934        {
935            MessageDisplay.Add("tuli nelonen");
936            taso = lisaaTaso();
937        }
938        else
939        {
940            taso = lisaaTaso();
941        }
942
943
944        return taso;
945    }
946
947    PhysicsObject LuoReunat()
948    {
949        PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 800);
950        reuna.IsVisible = false;
951        reuna.Restitution = 1.0;
952        return reuna;
953    }
954
955    PhysicsObject LuoAlaReuna()
956    {
957        alaReuna = PhysicsObject.CreateStaticObject(800, 40);
958        alaReuna.Color = Color.Black;
959        alaReuna.IsVisible = false;
960        alaReuna.Restitution = 1.0;
961        return alaReuna;
962    }
963
964    PhysicsObject LuoYläReuna()
965    {
966        PhysicsObject yläReuna = PhysicsObject.CreateStaticObject(800, 40);
967        yläReuna.Color = Color.Black;
968        yläReuna.IsVisible = false;
969        yläReuna.Restitution = 1.0;
970        return yläReuna;
971    }
972
973    void KäsitteleMailanTörmäys(PhysicsObject maila, PhysicsObject kohde)
974    {
975        if (kohde.Tag.ToString() == "elämä")
976        {
977            AnnaElämä();
978            kohde.Destroy();
979        }
980        else if (kohde.Tag.ToString() == "Power6")
981        {
982
983            if (pieniMaila == 1)
984            {
985                PalautaMaila();
986            }
987            else if (isoMaila == 0)
988            {
989                maila.Width += 20;
990                isoMaila = 1;
991                Timer.SingleShot(20, PalautaMaila);
992            }
993
994            kohde.Destroy();
995        }
996        else if (kohde.Tag.ToString() == "Power7")
997        {
998            if (isoMaila == 1)
999            {
1000                PalautaMaila();
1001            }
1002            else if (pieniMaila == 0)
1003            {
1004               
1005                pieniMaila = 1;
1006                maila.Width -= 20;
1007                Timer.SingleShot(20, PalautaMaila);
1008            }
1009            kohde.Destroy();
1010
1011        }
1012
1013        else if (kohde.Tag.ToString() == "Power9")
1014        {
1015
1016            if (pieniPallo == 1)
1017            {
1018                PalautaPallo();
1019            }
1020            else if (isoPallo == 0)
1021            {
1022                pallo.Size = new Vector(24, 24);
1023                isoPallo = 1;
1024                Timer.SingleShot(20, PalautaPallo);
1025            }
1026
1027            kohde.Destroy();
1028        }
1029        else if (kohde.Tag.ToString() == "Power8")
1030        {
1031            if (isoPallo == 1)
1032            {
1033                PalautaPallo();
1034            }
1035            else if (pieniPallo == 0)
1036            {
1037                pieniPallo = 1;
1038                pallo.Size = new Vector(12, 12);
1039                Timer.SingleShot(20, PalautaPallo);
1040            }
1041            kohde.Destroy();
1042
1043        }
1044
1045        for (int i = 1; i < 6; i++)
1046        {
1047            if (kohde.Tag.ToString() == "Power" + i)
1048            {
1049                kohde.Destroy();
1050                pisteet += i * 1000;
1051            }
1052       
1053        }
1054       
1055        pisteetL.Value = pisteet;
1056        pisteetL.Value = pisteet;
1057    }
1058
1059    void PalautaMaila()
1060    {
1061        if (isoMaila == 1)
1062        {
1063            maila.Width = 60;
1064            isoMaila = 0;
1065        }
1066        if (pieniMaila == 1)
1067        {
1068            maila.Width = 60;
1069
1070            pieniMaila = 0;
1071        }
1072
1073    }
1074
1075    void PalautaPallo()
1076    {
1077        if (isoPallo == 1)
1078        {
1079            isoPallo = 0;
1080        }
1081        if (pieniPallo == 1)
1082        {
1083            pieniPallo = 0;
1084        }
1085
1086    }
1087
1088    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
1089    {
1090        if ((nopeus.X < 0) && (maila.Left < Level.Left + 40))
1091        {
1092            maila.Velocity = Vector.Zero;
1093            return;
1094        }
1095
1096        if ((nopeus.X > 0) && (maila.Right > Level.Right - 40))
1097        {
1098            maila.Velocity = Vector.Zero;
1099            return;
1100        }
1101        maila.Velocity = nopeus;
1102    }
1103
1104    void HävisitPelin()
1105    {
1106        ClearAll();
1107        Label tekstikentta = new Label("Hävisit. Sait " + pisteet + " pistettä");
1108        Add(tekstikentta);
1109        Timer.SingleShot(3, Valikko);
1110    }
1111
1112    protected override void Update(Time time)
1113    {
1114        if (pallo != null && Math.Abs(pallo.Velocity.Y) < pallonNopeus)
1115        {
1116            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
1117
1118        }
1119        //if (pallo != null && Math.Abs(pallo.Velocity.X) < pallonNopeus)
1120        //{
1121        //    pallo.Velocity = new Vector(pallo.Velocity.X * 1.1, pallo.Velocity.Y);
1122
1123        //}
1124        base.Update(time);
1125
1126    }
1127
1128}
Note: See TracBrowser for help on using the repository browser.