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

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