source: 2016/27/AnttiN/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä/SalainenTehtävä.cs @ 10335

Revision 8076, 21.9 KB checked in by anvinurm, 3 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class SalainenTehtävä : PhysicsGame
10{
11
12    private bool onkoteepohjassa = false;
13
14    private const double nopeus = 2000;
15
16    private const int RUUDUN_KOKO = 40;
17
18    private IntMeter tahtiMittari;
19    private int kenttaNRO = 1;
20    private const int maxKentat = 6;
21
22    int pelaajia = 1;
23    private PhysicsObject pelaaja1;
24    private PhysicsObject pelaaja2;
25
26    private Dictionary<int, int> tahtiaKeratty = new Dictionary<int, int>();
27    private Dictionary<int, bool> tasotSuoritettu = new Dictionary<int, bool>();
28
29    [Save] public int[] tahtiaKerattyTaulukko = new int[maxKentat];
30    [Save] public bool[] tasotSuoritettuTaulukko = new bool[maxKentat];
31
32    private Image pelaajanKuva = LoadImage("Hahmo");
33    private Image pelaajan2Kuva = LoadImage("Hahmo2");
34    private Image tahtiKuva = LoadImage("tahti");
35    private Image kovaKuutio = LoadImage("kovaKuutio");
36    private Image LaskeutuminenKuva = LoadImage("Laskeutuminen");
37    private Image SahkoansaKuva = LoadImage("Sähköansa");
38    private Image SahkoansaTykkiKuva = LoadImage("SahkoansaTykki");
39    private Image SahkoansaSahkoKuva = LoadImage("SahkoansaSahko");
40    private Image RajahdysKuva = LoadImage("Rajahdys");
41    private Image TykkiKuva = LoadImage("Tykki");
42    private Image VahvaTykkiKuva = LoadImage("VahvaTykki");
43
44
45    private AssaultRifle pelaajan1Ase;
46    private AssaultRifle pelaajan2Ase;
47
48    private SoundEffect maaliAani = LoadSoundEffect("maali");
49
50    public override void Begin()
51    {
52        ClearAll();
53        Lataa();
54        LuoPaavalikko();
55        Keyboard.Listen(Key.N, ButtonState.Down, TarkistaPisteidenNollaus, null);
56        Keyboard.Listen(Key.T, ButtonState.Down, TeetaPainettu, null);
57        Keyboard.Listen(Key.T, ButtonState.Released, TeeLoysatty, null);
58
59    }
60
61    void Lataa()
62    {
63        //kerätyt tähdet alustus tyhjään
64        for (int i = 1; i <= maxKentat; i++)
65        {
66            tahtiaKeratty.Add(i, 0);
67        }
68
69        // suoritukset alustus tyhjään
70        for (int i = 1; i <= maxKentat; i++)
71        {
72            tasotSuoritettu.Add(i, false);
73
74        }
75
76        if (DataStorage.Exists("tilanne.xml"))
77        {
78            // pelitilanne olemassa, ladataan se
79            LoadGame("tilanne.xml");
80            int j = 0;
81            for (int i = 1; i <= maxKentat; i++, j++)
82            {
83                tahtiaKeratty[i] = tahtiaKerattyTaulukko[j];
84                tasotSuoritettu[i] = tasotSuoritettuTaulukko[j];
85            }
86        }
87
88    }
89
90    void PalaaPaavalikkoon(Window ikkuna)
91    {
92        LuoPaavalikko();
93    }
94
95    void LuoPaavalikko()
96    {
97        Level.Background.Image = LoadImage("vuoristo");
98        Level.Background.FitToLevel();
99        Camera.ZoomToLevel();
100        Level.Background.Color = Color.Blue;
101        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko","Pelaa","Lopeta");
102        Add(alkuValikko);
103        alkuValikko.AddItemHandler(0, Pelaa);
104        alkuValikko.AddItemHandler(1, Exit);
105    }
106
107    void Pelaa()
108    {
109        Level.Background.Image = LoadImage("kiviseina");
110        Level.Background.FitToLevel();
111        Camera.ZoomToLevel();
112        Level.Background.Color = Color.Gray;
113        MultiSelectWindow alkuValikko = new MultiSelectWindow("Valitse kenttä",
114        "Kenttä 1 | Tähtiä " + tahtiaKeratty[1],
115        "Kenttä 2 | Tähtiä " + tahtiaKeratty[2],
116        "Kenttä 3 | tähtiä " + tahtiaKeratty[3],
117        "kenttä 4 | tähtiä " + tahtiaKeratty[4],
118        "kenttä 5 | tähtiä " + tahtiaKeratty[5],
119        "kenttä 6 | tähtiä " + tahtiaKeratty[6],
120        "Takaisin");
121        Add(alkuValikko);
122        alkuValikko.AddItemHandler(0, delegate { ValitsePelaajat(1); });
123        alkuValikko.AddItemHandler(1, delegate { if (tasotSuoritettu[1]) ValitsePelaajat(2); else Pelaa(); });
124        alkuValikko.AddItemHandler(2, delegate { if (tasotSuoritettu[2]) ValitsePelaajat(3); else Pelaa(); });
125        alkuValikko.AddItemHandler(3, delegate { if (tasotSuoritettu[3]) ValitsePelaajat(4); else Pelaa(); });
126        alkuValikko.AddItemHandler(4, delegate { if (tasotSuoritettu[4]) ValitsePelaajat(5); else Pelaa(); });
127        alkuValikko.AddItemHandler(5, delegate { if (tasotSuoritettu[5]) ValitsePelaajat(6); else Pelaa(); });
128        alkuValikko.AddItemHandler(6, LuoPaavalikko);
129
130    }
131
132   
133
134    void ValitsePelaajat(int kentta)
135    {
136        MultiSelectWindow alkuValikko = new MultiSelectWindow("Kenttä "+kentta+". Montako pelaajaa?", "1 Pelaaja", "2 Pelaajaa", "takaisin");
137        Add(alkuValikko);
138        alkuValikko.AddItemHandler(0, delegate { pelaajia = 1; AloitaPeli(kentta); });
139        alkuValikko.AddItemHandler(1, delegate { pelaajia = 2; AloitaPeli(kentta); });
140        alkuValikko.AddItemHandler(2, Pelaa);
141    }
142
143    void AloitaPeli(int kentta)
144    {
145        this.kenttaNRO = kentta;
146        IsMouseVisible = true;
147        LuoKentta();
148        LuoTahtiLaskuri();
149        LisaaNappaimet();
150
151        Camera.Follow(pelaaja1);
152        Camera.ZoomFactor = 1.2;
153        Camera.StayInLevel = true;
154    }
155
156    void LuoKentta()
157    {
158        TileMap kentta = TileMap.FromLevelAsset("kentta"+kenttaNRO);
159        kentta.SetTileMethod('#', LisaaTaso);
160        kentta.SetTileMethod('*', LisaaTahti);
161        kentta.SetTileMethod('N', LisaaPelaaja,1);
162        kentta.SetTileMethod('L', LisaaLaskeutuminen);
163        kentta.SetTileMethod('R', LisaaSahkoansaTykkiVaaka);
164        kentta.SetTileMethod('S', LisaaSahkoansaTykkiPysty);
165        kentta.SetTileMethod('T', LisaaTykki);
166        kentta.SetTileMethod('V', lisaaVahvatykki);
167        if (pelaajia==2) kentta.SetTileMethod('2', LisaaPelaaja, 2);
168        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
169        Level.CreateBorders();
170        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
171        Level.Background.Image = LoadImage("kiviseina");
172    }
173
174    void LuoTahtiLaskuri()
175    {
176        tahtiMittari = new IntMeter(0,0,3);
177        tahtiMittari.UpperLimit += VoimaMittariTaynna;
178
179        ProgressBar voimaPalkki = new ProgressBar(150, 50);
180        voimaPalkki.X = Screen.Right - 250;
181        voimaPalkki.Y = Screen.Bottom + 100;
182        voimaPalkki.BindTo(tahtiMittari);
183        voimaPalkki.Image = LoadImage("harmaatTahdet");
184        voimaPalkki.BarImage = LoadImage("kultaisetTahdet");
185        Add(voimaPalkki);
186
187    }
188
189    void VoimaMittariTaynna()
190    {
191        MessageDisplay.Add("Keräsit kaikki kolme tähteä!");
192    }
193
194    void LisaaTaso(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
197        taso.Position = paikka;
198        taso.Image = kovaKuutio;
199        Add(taso);
200    }
201
202    void LisaaTahti(Vector paikka, double leveys, double korkeus)
203    {
204        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
205        tahti.IgnoresCollisionResponse = true;
206        tahti.Position = paikka;
207        tahti.Image = tahtiKuva;
208        tahti.Tag = "tahti";
209        Add(tahti);
210    }
211
212    void LisaaPelaaja(Vector paikka, double leveys, double korkeus, int pelaaja)
213    {
214        if (pelaaja == 1)
215        {
216            pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, pelaajanKuva, "pelaaja1");
217            pelaajan1Ase = LuoPelaajanAse(pelaaja1);
218        }
219        if (pelaaja == 2)
220        {
221            pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, pelaajan2Kuva, "pelaaja2");
222            pelaajan2Ase = LuoPelaajanAse(pelaaja2);
223        }
224    }
225
226    PhysicsObject LuoPelaaja(Vector paikka, double leveys, double korkeus,Image kuva, string nimi)
227    {
228        PhysicsObject pelaaja = new PhysicsObject(leveys*0.9, korkeus*0.9);
229        pelaaja.Position = paikka;
230        pelaaja.Mass = 4.0;
231        pelaaja.Image = kuva;
232        AddCollisionHandler(pelaaja, "SahkoansaSahko", TuhoaPelaaja);
233        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
234        AddCollisionHandler(pelaaja, "Laskeutuminen", TormaaLaskeutumiseen);
235        Add(pelaaja);
236        pelaaja.LinearDamping = 0.9;
237        pelaaja.Tag = nimi;
238        pelaaja.CanRotate = false;
239
240        return pelaaja;
241    }
242
243    AssaultRifle LuoPelaajanAse(PhysicsObject pelaaja)
244    {
245        AssaultRifle pelaajanAse = new AssaultRifle(30, 10);
246        pelaajanAse.Power.MaxValue = 50;
247        pelaajanAse.FireRate = 1;
248        pelaajanAse.ProjectileCollision = AmmusOsui;
249        pelaaja.Add(pelaajanAse);
250        return pelaajanAse;
251    }
252
253    void LisaaLaskeutuminen(Vector paikka, double leveys, double korkeus)
254    {
255        PhysicsObject Laskeutuminen = PhysicsObject.CreateStaticObject(leveys * 0.9, korkeus*0.9);
256        Laskeutuminen.IgnoresCollisionResponse = true;
257        Laskeutuminen.Position = paikka;
258        Laskeutuminen.Image = LaskeutuminenKuva;
259        Laskeutuminen.Tag = "Laskeutuminen";
260        Add(Laskeutuminen);
261    }
262
263    void LisaaSahkoansaTykkiPysty(Vector paikka, double leveys, double korkeus)
264    {
265        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X, paikka.Y-korkeus), leveys/2, korkeus, Angle.FromDegrees(0));
266        LisaaSahkoansaTykki(paikka, leveys, korkeus, sahko, Angle.FromDegrees(180));
267        LisaaSahkoansaTykki(new Vector(paikka.X, paikka.Y-korkeus*2), leveys, korkeus, sahko, Angle.FromDegrees(0));
268    }
269
270    void LisaaSahkoansaTykkiVaaka(Vector paikka, double leveys, double korkeus)
271    {
272        PhysicsObject sahko = LisaaSahkoansaSahko(new Vector(paikka.X + leveys, paikka.Y), leveys/2, korkeus, Angle.FromDegrees(-90));
273        LisaaSahkoansaTykki(paikka,leveys,korkeus,sahko, Angle.FromDegrees(-90));
274        LisaaSahkoansaTykki(new Vector(paikka.X + leveys*2, paikka.Y), leveys, korkeus, sahko, Angle.FromDegrees(90));
275    }
276
277    void LisaaSahkoansaTykki(Vector paikka, double leveys, double korkeus, PhysicsObject sahko, Angle kaanna)
278    {
279        SahkoansaTykki Sahkoansa = new SahkoansaTykki(leveys, korkeus, sahko);
280        Sahkoansa.Position = paikka;
281        Sahkoansa.Image = SahkoansaTykkiKuva;
282        Sahkoansa.Tag = "SahkoansaTykki";
283        Add(Sahkoansa);
284        Sahkoansa.RotateImage = true;
285        Sahkoansa.Angle = kaanna;
286
287        Label pisteNaytto = new Label();
288        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
289        pisteNaytto.TextColor = Color.Red;
290        pisteNaytto.BindTo(Sahkoansa.ElamaLaskuri);
291        Sahkoansa.Add(pisteNaytto);
292    }
293
294    void lisaaVahvatykki(Vector paikka, double leveys, double korkeus)
295    {
296        VahvaTykki vahvatykki = new VahvaTykki(leveys, korkeus);
297        vahvatykki.Position = paikka;
298        vahvatykki.Image = VahvaTykkiKuva;
299        vahvatykki.Tag = "Vahvatykki";
300        Add(vahvatykki);
301
302        AssaultRifle vahvatykkiAse = new AssaultRifle(30, 10);
303        vahvatykkiAse.IsVisible = false;
304        vahvatykkiAse.Power.MaxValue = 50;
305        vahvatykkiAse.FireRate = 1;
306        vahvatykkiAse.ProjectileCollision = AmmusOsuiPelaajaan;
307        vahvatykki.Add(vahvatykkiAse);
308
309        Timer tykkiAjastin = new Timer();
310        tykkiAjastin.Interval = 0.5;
311        tykkiAjastin.Timeout += delegate
312        {
313            AmmuAseella(vahvatykkiAse);
314        };
315        tykkiAjastin.Start();
316
317        vahvatykki.Destroyed += delegate { tykkiAjastin.Stop(); };
318
319        Label pisteNaytto = new Label();
320        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
321        pisteNaytto.TextColor = Color.Red;
322        pisteNaytto.BindTo(vahvatykki.ElamaLaskuri);
323        vahvatykki.Add(pisteNaytto);
324
325
326    }
327
328    PhysicsObject LisaaSahkoansaSahko(Vector paikka, double leveys, double korkeus,Angle kaanna)
329    {
330        PhysicsObject SahkoansaSahko = PhysicsObject.CreateStaticObject(leveys, korkeus);
331        SahkoansaSahko.Position = paikka;
332        SahkoansaSahko.Image = SahkoansaSahkoKuva;
333        SahkoansaSahko.Tag = "SahkoansaSahko";
334        Add(SahkoansaSahko);
335        SahkoansaSahko.RotateImage = true;
336        SahkoansaSahko.Angle = kaanna;
337        return SahkoansaSahko;
338    }
339
340    void LisaaTykki(Vector paikka, double leveys, double korkeus)
341    {
342        Tykki tykki = new Tykki(leveys, korkeus);
343        tykki.Position = paikka;
344        tykki.Image = TykkiKuva;
345        tykki.Tag = "Tykki";
346        Add(tykki);
347
348        AssaultRifle tykkiAse = new AssaultRifle(30, 10);
349        tykkiAse.IsVisible = false;
350        tykkiAse.Power.MaxValue = 50;
351        tykkiAse.FireRate = 0.5;
352        tykkiAse.ProjectileCollision = AmmusOsuiPelaajaan;
353        tykki.Add(tykkiAse);
354
355        Timer tykkiAjastin = new Timer();
356        tykkiAjastin.Interval = 0.5;
357        tykkiAjastin.Timeout += delegate
358        {
359            AmmuAseella(tykkiAse);
360        };
361        tykkiAjastin.Start();
362
363        tykki.Destroyed += delegate { tykkiAjastin.Stop(); };
364
365        Label pisteNaytto = new Label();
366        //pisteNaytto.Position = Camera.WorldToScreen(paikka);
367        pisteNaytto.TextColor = Color.Red;
368        pisteNaytto.BindTo(tykki.ElamaLaskuri);
369        tykki.Add(pisteNaytto);
370
371    }
372
373    void LisaaNappaimet()
374    {
375        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
376        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Tauko, "Lopeta peli");
377
378        //Pelaajan 1 näppäimet
379        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
380        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
381        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
382        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
383        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
384        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää aseella");
385
386
387        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
388        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja1, new Vector(0, nopeus));
389        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja1, new Vector(0, -nopeus));
390        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-nopeus, 0));
391        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, new Vector(nopeus, 0));
392        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
393        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "Liikuta pelaajaa tattia pyörittämällä.", pelaajan1Ase);
394
395
396        // Pelaajan 2 ohjaimet
397        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, Liikuta, "Pelaaja liikkuu ylöspäin", pelaaja2, new Vector(0, nopeus));
398        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, Liikuta, "pelaaja liikkuu alaspäin", pelaaja2, new Vector(0, -nopeus));
399        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-nopeus, 0));
400        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, new Vector(nopeus, 0));
401        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, "Ammu", pelaajan2Ase);
402        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtaa2, "Liikuta pelaajaa tattia pyörittämällä.", pelaajan2Ase);
403
404
405
406        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
407    }
408
409    void Tahtaa2(AnalogState tatinTila, AssaultRifle ase)
410    {
411        ase.Angle = tatinTila.StateVector.Angle;
412    }
413
414    void Liikuta(PhysicsObject hahmo, Vector nopeus)
415    {
416        hahmo.Push(nopeus);
417    }
418
419
420
421    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
422    {
423        maaliAani.Play();
424        MessageDisplay.Add("Keräsit tähden!");
425        tahti.Destroy();
426        tahtiMittari.Value += 1;
427    }
428
429    void TormaaLaskeutumiseen(PhysicsObject hahmo, PhysicsObject Laskeutuminen)
430    {
431
432        MessageDisplay.Add("Läpäisit tason");
433        tasotSuoritettu[kenttaNRO] = true;
434        if (tahtiaKeratty[kenttaNRO] < tahtiMittari.Value) tahtiaKeratty[kenttaNRO] = tahtiMittari.Value;
435        Timer.SingleShot(1, Voitit);
436    }
437
438
439    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
440    {
441        ammus.Destroy();
442        if(kohde.Tag.ToString() == "SahkoansaTykki")
443        {
444            ((SahkoansaTykki)kohde).ElamaLaskuri.Value -= 5;
445        }
446        if (kohde.Tag.ToString() == "Tykki")
447        {
448
449            ((Tykki)kohde).ElamaLaskuri.Value -= 5;
450
451        }
452        if (kohde.Tag.ToString() == "Vahvatykki")
453        {
454
455            ((VahvaTykki)kohde).ElamaLaskuri.Value -= 5;
456
457        }
458    }
459
460    void AmmusOsuiPelaajaan(PhysicsObject ammus, PhysicsObject kohde)
461    {
462        ammus.Destroy();
463        if (kohde.Tag.ToString() == "pelaaja1")
464        {
465            TuhoaPelaaja(pelaaja1, ammus);
466        }
467        if (kohde.Tag.ToString() == "pelaaja2")
468        {
469            TuhoaPelaaja(pelaaja2, ammus);
470        }
471
472    }
473
474    void Tahtaa(AnalogState hiirenLiike)
475    {
476        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
477        pelaajan1Ase.Angle = suunta.Angle;
478    }
479
480    void AmmuAseella(AssaultRifle ase)
481    {
482        PhysicsObject ammus = ase.Shoot();
483
484        if (ammus != null)
485        {
486            ammus.Size *= 1;
487            //ammus.Image = ...
488            ammus.MaximumLifetime = TimeSpan.FromSeconds(200.0);
489        }
490    }
491
492    void TuhoaPelaaja(PhysicsObject pelaaja, PhysicsObject kohde)
493    {
494        pelaaja.Destroy();
495        Explosion rajahdys = new Explosion(500);
496        rajahdys.Position = pelaaja.Position;
497        Add(rajahdys);
498        Mouse.Disable(MouseButton.Left);
499
500        Timer.SingleShot(2, delegate {
501            if ((pelaajia == 1 && pelaaja1.IsDestroyed) || (pelaajia == 2 && (pelaaja1.IsDestroyed && pelaaja2.IsDestroyed))) 
502            {
503
504                Havisit();
505            }
506           
507        });
508    }
509
510    void Havisit()
511    {
512        ClearAll();
513        Level.Background.Color = Color.Black;
514        MultiSelectWindow havioValikko = new MultiSelectWindow("Hävisit pelin", "Aloita alusta", "Päävalikko", "Lopeta");
515        Add(havioValikko);
516        havioValikko.AddItemHandler(0, delegate { AloitaPeli(kenttaNRO); });
517        havioValikko.AddItemHandler(1, LuoPaavalikko);
518        havioValikko.AddItemHandler(2, Exit);
519    }
520
521    void Voitit()
522    {
523        ClearAll();
524        Level.Background.Color = Color.Black;
525        MultiSelectWindow voittoValikko = new MultiSelectWindow("Taso suoritettu", "Pelaa uudelleen", "Päävalikko","Seuraava kenttä", "Lopeta");
526        Add(voittoValikko);
527        voittoValikko.AddItemHandler(0, delegate { AloitaPeli(kenttaNRO); });
528        voittoValikko.AddItemHandler(1, LuoPaavalikko);
529        voittoValikko.AddItemHandler(2, delegate { if ((kenttaNRO >= maxKentat)) { MessageWindow ikkuna = new MessageWindow("Ei lisää kenttiä vielä!"); Add(ikkuna); ikkuna.Closed += PalaaPaavalikkoon; } else AloitaPeli(kenttaNRO += 1); });
530        voittoValikko.AddItemHandler(3, Exit);
531
532    }
533
534    protected override void OnExiting(object sender, EventArgs args)
535    {
536        int j = 0;
537        for (int i = 1; i <= maxKentat; i++, j++)
538        {
539            tahtiaKerattyTaulukko[j] = tahtiaKeratty[i];
540            tasotSuoritettuTaulukko[j] = tasotSuoritettu[i];
541        }
542        SaveGame("tilanne.xml");
543        base.OnExiting(sender, args);
544    }
545
546    void Tauko()
547    {
548        IsPaused = true;
549        MultiSelectWindow tauko = new MultiSelectWindow("Tauko", "Jatka", "Päävalikko", "Lopeta");
550        Add(tauko);
551        tauko.AddItemHandler(0, delegate { tauko.Close(); IsPaused = false; });
552        tauko.AddItemHandler(1, delegate { ClearAll();IsPaused = false; LuoPaavalikko(); });
553        tauko.AddItemHandler(2, Exit);
554
555    }
556
557    void TarkistaPisteidenNollaus() // on painettu näppäintä 'N'
558    {
559        if (onkoteepohjassa == true)
560        {
561            MessageDisplay.Add("Pisteet nollattu!");
562
563            for (int i = 1; i <= maxKentat; i++)
564            {
565                tahtiaKeratty[i] = 0;
566                tasotSuoritettu[i] = false;
567            }
568
569
570        }
571
572    }
573
574    void TeetaPainettu()
575    {
576        onkoteepohjassa = true;
577
578    }
579
580    void TeeLoysatty()
581    {
582        onkoteepohjassa = false;
583
584    }
585
586   
587
588
589}
590   
591
592
593class SahkoansaTykki : PhysicsObject
594{
595    private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
596
597
598    private PhysicsObject sahko;
599    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
600
601    public SahkoansaTykki(double leveys, double korkeus, PhysicsObject sahko)
602        : base(leveys, korkeus)
603    {
604        MakeStatic();
605        this.sahko = sahko;
606        elamaLaskuri.LowerLimit += delegate { this.sahko.Destroy(); this.Destroy(); };
607    }
608
609
610
611
612}
613
614class Tykki : PhysicsObject
615{
616    private IntMeter elamaLaskuri = new IntMeter(20, 0, 20);
617    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
618
619    public Tykki(double leveys, double korkeus)
620        : base(leveys, korkeus)
621    {
622        MakeStatic();
623        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
624    }
625}
626
627class VahvaTykki : PhysicsObject
628{
629    private IntMeter elamaLaskuri = new IntMeter(100, 0, 100);
630    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
631
632    public VahvaTykki(double leveys, double korkeus)
633        : base(leveys, korkeus)
634    {
635        MakeStatic();
636        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
637    }
638}
Note: See TracBrowser for help on using the repository browser.