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

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