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

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