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

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