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

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