source: 2011/24/LauriK/Call of garden Modern carrotfare 2/Call of garden Modern carrotfare 2/Peli.cs @ 3845

Revision 3845, 29.3 KB checked in by anlakane, 9 years ago (diff)

Paranneltu

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11
12    const double nopeus = 200;
13    const double hyppyNopeus = 1000;
14    const int RUUDUN_KOKO = 40;
15
16    [Save] public int kentanNro = 0;
17
18    [Save] public int elamat = 100;
19
20    ScoreList topLista = new ScoreList(10, false, 0);
21
22    Label otsikko;
23    Label versio;
24
25    PlatformCharacter porkkana;
26   
27    PhysicsObject hautakivi;
28    PhysicsObject kuolluttomaatti;
29    PhysicsObject lipas;
30//    PhysicsObject uusikranaatti;
31    PhysicsObject raha;
32
33    [Save] public bool pelaajallaOnLaser = false;
34    public bool peliladattu = false;
35
36    string cheat1 = "LaserBlast";
37    string cheat2 = "MoonGravity";
38    string cheat3 = "ClearAll";
39
40    [Save] public IntMeter panoslaskuri = new IntMeter(0);
41    [Save] public IntMeter pistelaskuri = new IntMeter(0);
42    [Save] public IntMeter kranaattiLaskuri = new IntMeter(0);
43
44    List<GameObject> rajahdyksenTomaattiUhrit;
45    List<GameObject> rajahdyksenPorkkanaUhri;
46
47    Image[] pelaajanKuva = LoadImages("porkkana");
48    Image[] pelaajanKuvaPeilattu;
49    Image pelaajanKuvaKuolleena = LoadImage("rip");
50    Image[] vihollisenKuva = LoadImages("tomaatti");
51    Image[] vihollisenKuvaPeilattu;
52    Image vihollisenKuvaKuolleena = LoadImage("tomaattikuolleena");
53    Image lippaanKuva = LoadImage("ammo_can");
54    Image kranaatinKuva = LoadImage("kranu");
55    Image uudenKranaatinKuva = LoadImage("Laatikko");
56    Image RahanKuva = LoadImage("Raha");
57    Image alustus1 = LoadImage("alustus1");
58    Image alustus2 = LoadImage("alustus2");
59    //Image alustus3 = LoadImage("alustus3");
60    Image maalinKuva = LoadImage("Maali");
61    Image peliPaattyi = LoadImage("pelipaattyi");
62    Image alku = LoadImage("taustakuva");
63
64    ExplosionSystem rajahdys;
65    int pMaxMaara = 5000000;
66
67
68
69    public override void Begin()
70    {
71        if (DataStorage.Exists("pisteet.xlm"))
72        {
73            topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
74        }
75
76        rajahdyksenTomaattiUhrit = new List<GameObject>();
77        rajahdyksenPorkkanaUhri = new List<GameObject>();
78
79        pelaajanKuvaPeilattu = Image.Mirror(pelaajanKuva);
80        vihollisenKuvaPeilattu = Image.Mirror(vihollisenKuva);
81
82        SeuraavaKentta(kentanNro);
83
84        Gravity = new Vector(0, -1000);
85
86        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), pMaxMaara);
87        rajahdys.MaxLifetime = 1.0;
88        rajahdys.MaxScale = 0.1;
89        Add(rajahdys);
90    }
91
92    public void Valikko()
93    {
94        Camera.Reset();
95
96        kentanNro = 0;
97
98        ClearAll();
99
100        MultiSelectWindow valikko = new MultiSelectWindow("",
101        "Start Game", "Highscores", "Controls", "About", "Options", "Exit");
102        valikko.ItemSelected += PainettiinValikonNappia;
103        Add(valikko);
104        valikko.DefaultCancel = 5;
105        valikko.Color = Color.Transparent;
106        valikko.SetButtonColor(Color.Gray);
107        valikko.SelectionColor = Color.LimeGreen;
108
109        otsikko = new Label(5000, 5000);
110        otsikko.Text = "Call of Garden: Modern Carrotfare";
111        otsikko.TextColor = Color.DarkGreen;
112        //otsikko.X = Screen.Center;
113        otsikko.Y = valikko.Y + 200;
114        otsikko.Font = Font.DefaultLargeBold;
115        Add(otsikko);
116
117        Level.Background.Image = alku;
118        Level.Background.Width = Screen.Width;
119        Level.Background.Height = Screen.Height;
120
121        versio = new Label();
122        versio.Text = "Beta 3.0";
123        versio.TextColor = Color.OrangeRed;
124        versio.X = valikko.X + 500;
125        versio.Y = valikko.Y;
126        versio.Font = Font.DefaultBold;
127        Add(versio);
128       
129        MessageDisplay.BackgroundColor = Color.Transparent;
130        MessageDisplay.TextColor = Color.OrangeRed;
131
132        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Exit");
133    }
134
135    public void SeuraavaKentta(int kentanNro)
136    {
137        pelaajallaOnLaser = false;
138
139        if (kentanNro == 0) Valikko();
140        if (kentanNro == 1) luoAlustus1();
141        else if (kentanNro == 2) luoAlustus2();
142        //else if (kentanNro == 3) luoAlustus3();
143        else if (kentanNro > 2) LopetaPeli();
144    }
145
146    private void luoAlustus1()
147    {
148
149        Camera.Reset();
150
151        ClearAll();
152
153        Level.Background.Image = alustus1;
154        Level.Background.Width = Screen.Width;
155        Level.Background.Height = Screen.Height;
156
157        MediaPlayer.Play("alustus1aani");
158
159        ClearControls();
160
161        Keyboard.Listen(Key.Enter, ButtonState.Pressed, TeeKentta1, "Aloita kenttä");
162
163        ControllerOne.Listen(Button.Start, ButtonState.Pressed, TeeKentta1, "Aloita kenttä");
164
165        MessageDisplay.TextColor = Color.White;
166    }
167
168    void luoAlustus2()
169    {
170        Camera.Reset();
171
172        ClearAll();
173
174        Level.Background.Image = alustus2;
175        Level.Background.Width = Screen.Width;
176        Level.Background.Height = Screen.Height;
177
178        MediaPlayer.Play("alustus2aani");
179
180        ClearControls();
181
182        Keyboard.Listen(Key.Enter, ButtonState.Pressed, TeeKentta2, "Aloita kenttä");
183
184        ControllerOne.Listen(Button.Start, ButtonState.Pressed, TeeKentta2, "Aloita kenttä");
185
186        MessageDisplay.TextColor = Color.White;
187    }
188
189    //void luoAlustus3()
190    //{
191    //    Camera.Reset();
192
193    //    ClearAll();
194
195    //    Level.Background.Image = alustus3;
196    //    Level.Background.Width = Screen.Width;
197    //    Level.Background.Height = Screen.Height;
198
199    //    MediaPlayer.Play("alustus3aani");
200
201    //    ClearControls();
202
203    //    Keyboard.Listen(Key.Enter, ButtonState.Pressed, TeeKentta3, "Aloita kenttä");
204
205    //    ControllerOne.Listen(Button.Start, ButtonState.Pressed, TeeKentta3, "Aloita kenttä");
206
207    //    MessageDisplay.TextColor = Color.White;
208    //}
209
210    PhysicsObject lisaaTaso()
211    {
212        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
213        taso.Color = Color.Green;
214        return taso;
215    }
216
217    PhysicsObject lisaaTaso2()
218    {
219        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
220        taso2.Color = Color.Gray;
221        return taso2;
222    }
223
224    PhysicsObject lisaaTaso3()
225    {
226        PhysicsObject taso3 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
227        taso3.Color = Color.Yellow;
228        return taso3;
229    }
230
231    PlatformCharacter lisaaPelaaja()
232    {
233        porkkana = new PlatformCharacter(40, 40);
234        porkkana.Mass = 4.0;
235        porkkana.Tag = "porkkana";
236
237        if (pelaajallaOnLaser == true)
238        {
239            porkkana.Weapon = new LaserGun(60, 30);
240            porkkana.Weapon.Ammo.Value = 10;
241            porkkana.Weapon.Y = -3;
242            porkkana.Weapon.X = 0;
243            porkkana.Weapon.ProjectileCollision = AmmusOsui;
244        }
245
246        if (pelaajallaOnLaser == false)
247        {
248                porkkana.Weapon = new AssaultRifle(60, 30);
249                porkkana.Weapon.Ammo.Value = 10;
250                porkkana.Weapon.Y = -3;
251                porkkana.Weapon.X = 0;
252                porkkana.Weapon.ProjectileCollision = AmmusOsui;
253        }
254
255        AddCollisionHandler(porkkana, LipasKranaattiOsuma);
256
257        porkkana.IgnoresExplosions = true;
258
259        //porkkana.RightWalkingAnimation = new Animation(pelaajanKuva);
260        porkkana.AnimIdle = new Animation(pelaajanKuva);
261        porkkana.AnimWalk = new Animation(pelaajanKuva);
262        //porkkana.LeftWalkingAnimation = new Animation(pelaajanKuvaPeilattu);
263
264        rajahdyksenPorkkanaUhri.Add(porkkana);
265
266       
267
268        return porkkana;
269    }
270
271    PlatformCharacter lisaaTomaatti()
272    {
273        PlatformCharacter tomaatti = new PlatformCharacter(40, 40);
274        tomaatti.Mass = 4.0;
275
276        tomaatti.Tag = "Vihollinen";
277
278        tomaatti.IgnoresGravity = false;
279
280        FollowerBrain SeuraajanAivot = new FollowerBrain("porkkana");
281        tomaatti.Brain = SeuraajanAivot;
282        //SeuraajanAivot.Target = porkkana;
283        SeuraajanAivot.Speed = 100;
284        SeuraajanAivot.DistanceFar = 500;
285        SeuraajanAivot.DistanceClose = 50;
286        SeuraajanAivot.StopWhenTargetClose = false;
287        AddCollisionHandler(tomaatti, TomaattiOsui);
288
289        tomaatti.AnimWalk = new Animation(vihollisenKuva);
290        //tomaatti.LeftWalkingAnimation = new Animation(vihollisenKuvaPeilattu);
291
292        rajahdyksenTomaattiUhrit.Add(tomaatti);
293
294        Timer.SingleShot(2, delegate { Seuraa(SeuraajanAivot); });
295
296        return tomaatti;
297
298    }
299
300    void Seuraa(FollowerBrain aivot)
301    {
302        //aivot.Target = porkkana;
303    }
304
305    PlatformCharacter lisaaTomaatti2()
306    {
307        PlatformCharacter tomaatti2 = new PlatformCharacter(40, 40);
308        tomaatti2.Mass = 4.0;
309
310        tomaatti2.Tag = "Vihollinen2";
311
312        tomaatti2.Weapon = new AssaultRifle(60, 30);
313        tomaatti2.Weapon.Ammo.Value = 10;
314        tomaatti2.Weapon.Y = 0;
315        tomaatti2.Weapon.X = 0;
316        tomaatti2.Weapon.ProjectileCollision = AmmusOsui;
317
318        Timer ampumaAjastin = new Timer();
319        ampumaAjastin.Interval = 2.0;
320        ampumaAjastin.Timeout += delegate { vihollinenAmpuu(ampumaAjastin); };
321        ampumaAjastin.Tag = tomaatti2;
322        ampumaAjastin.Start();
323
324        tomaatti2.AnimWalk = new Animation(vihollisenKuva);
325        //tomaatti2.LeftWalkingAnimation = new Animation(vihollisenKuvaPeilattu);
326
327        rajahdyksenTomaattiUhrit.Add(tomaatti2);
328
329        return tomaatti2;
330    }
331
332    void lisaaNappaimet()
333    {
334        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Show buttons");
335        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopetuskysely, "Exit");
336        Keyboard.Listen(Key.A, ButtonState.Pressed, cheatIkkuna, "Open cheatwindow");
337
338        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Player moves left", porkkana, -nopeus);
339        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Player moves right", porkkana, nopeus);
340        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Player jumps", porkkana, hyppyNopeus);
341
342        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Shoot");
343        Keyboard.Listen(Key.W, ButtonState.Down, TahtaaYlos, "Aim up");
344        Keyboard.Listen(Key.S, ButtonState.Down, TahtaaAlas, "Aim down");
345        Keyboard.Listen(Key.Q, ButtonState.Pressed, HeitaKranaatti, "Throw a grenade");
346
347        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Lopetuskysely, "Exit");
348        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ShowControlHelp, "Show buttons");
349
350        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.01, liikutaTatilla, "Player moves", porkkana);
351        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Player jumps", porkkana, hyppyNopeus);
352
353        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "Shoot");
354        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.01, tahtaaTatilla, "Aim");
355        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Pressed, HeitaKranaatti, "Throw a grenade");
356    }
357
358    void liikuta(PlatformCharacter hahmo, double nopeus)
359    {
360        hahmo.Walk(nopeus);
361    }
362
363    void hyppaa(PlatformCharacter hahmo, double nopeus)
364    {
365        hahmo.Jump(nopeus);
366    }
367
368    void liikutaTatilla(AnalogState tatintila, PlatformCharacter hahmo)
369    {
370        Vector tatinAsento = tatintila.StateVector;
371        hahmo.Walk(tatinAsento.X * nopeus);
372
373    }
374
375    void AmmuAseella()
376    {
377        PhysicsObject ammus = porkkana.Weapon.Shoot();
378
379        if (ammus != null)
380        {
381            ammus.Size *= 1;
382            ammus.Restitution = 0.5;
383            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
384        }
385    }
386
387    void TahtaaYlos()
388    {
389        if (porkkana.FacingDirection == Direction.Right)
390        {
391            porkkana.Weapon.Angle += Angle.FromDegrees(5);
392        }
393        if (porkkana.FacingDirection == Direction.Left)
394        {
395            porkkana.Weapon.Angle += Angle.FromDegrees(-5);
396        }
397
398
399    }
400
401    void TahtaaAlas()
402    {
403        if (porkkana.FacingDirection == Direction.Right)
404        {
405            porkkana.Weapon.Angle += Angle.FromDegrees(-5);
406        }
407        if (porkkana.FacingDirection == Direction.Left)
408        {
409            porkkana.Weapon.Angle += Angle.FromDegrees(5);
410        }
411    }
412
413    void tahtaaTatilla(AnalogState toisentatintila)
414    {
415        Vector toisentatinAsento = toisentatintila.StateVector;
416        porkkana.Weapon.Angle = toisentatinAsento.Angle;
417    }
418
419    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
420    {
421
422        if (kohde.Tag.ToString() == "Vihollinen" || kohde.Tag.ToString() == "Vihollinen2")
423        {
424            ammus.Destroy();
425            kohde.Brain = null;
426            TomaattiKuoli(kohde);
427            kohde.IgnoresCollisionResponse = true;
428            rajahdys.AddEffect(kohde.Position, 50);
429
430        }
431    }
432
433    void Ammus2Osui(PhysicsObject ammus2, PhysicsObject kohde)
434    {
435
436        if (kohde == porkkana)
437        {
438            ammus2.Destroy(); ;
439
440            //porkkana.IgnoresCollisionResponse = true;
441
442            porkkana.Stop();
443
444            MediaPlayer.Play("pling");
445
446            porkkana.Destroy();
447
448            LuoHautakivi();
449
450            LopetaPeli();
451
452        }
453    }
454
455    void LopetaPeli()
456    {
457        HighScoreWindow topIkkuna = new HighScoreWindow(
458            "Parhaat pisteet",
459            "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
460            topLista, pistelaskuri.Value);
461        topIkkuna.Closed += TallennaPisteet;
462        Add(topIkkuna);
463
464    }
465
466    void LuoHautakivi()
467    {
468        hautakivi = new PhysicsObject(40, 40);
469        hautakivi.Mass = 100000000000.0;
470
471        hautakivi.IgnoresExplosions = true;
472
473        hautakivi.Image = pelaajanKuvaKuolleena;
474
475        hautakivi.Position = porkkana.Position;
476        Add(hautakivi);
477
478    }
479
480    void TomaattiKuoli(PhysicsObject tomaatti)
481    {
482        tomaatti.Destroy();
483
484        MediaPlayer.Play("ketshup");
485
486        pistelaskuri.Value += 100;
487
488        kuolluttomaatti = new PhysicsObject(50, 50);
489        kuolluttomaatti.Mass = 4.0;
490
491        kuolluttomaatti.IgnoresCollisionResponse = true;
492
493        kuolluttomaatti.IgnoresGravity = true;
494
495        kuolluttomaatti.IgnoresExplosions = true;
496
497        kuolluttomaatti.Image = vihollisenKuvaKuolleena;
498
499        kuolluttomaatti.Position = tomaatti.Position;
500        Add(kuolluttomaatti);
501
502        LuoLipas(kuolluttomaatti.X - 30, kuolluttomaatti.Y);
503        LuoKranaatti(kuolluttomaatti.X + 30, kuolluttomaatti.Y);
504    }
505
506    void TomaattiOsui(PhysicsObject tomaatti, PhysicsObject kohde)
507    {
508        if (kohde == porkkana)
509        {
510            tomaatti.Stop();
511            tomaatti.Brain.Active = false;
512
513            //porkkana.IgnoresCollisionResponse = true;
514
515            porkkana.Stop();
516
517            MediaPlayer.Play("pling");
518
519            porkkana.Destroy();
520
521            LuoHautakivi();
522
523            LopetaPeli();
524
525        }
526
527    }
528
529    void LuoPanosLaskuri()
530    {
531        panoslaskuri = new IntMeter(0);
532
533        Label panosnaytto = new Label();
534        panosnaytto.X = Screen.Right - 100;
535        panosnaytto.Y = Screen.Top - 100;
536        panosnaytto.TextColor = Color.Red;
537
538        panosnaytto.BindTo(porkkana.Weapon.Ammo);
539        Add(panosnaytto);
540
541        Label panosteksti = new Label("Panoksia jäljellä: ");
542        panosteksti.X = Screen.Right - 200;
543        panosteksti.Y = Screen.Top - 100;
544        panosteksti.TextColor = Color.Red;
545
546        Add(panosteksti);
547    }
548
549    void LuoPisteLaskuri()
550    {
551        pistelaskuri = new IntMeter(0);
552
553        Label pistenaytto = new Label();
554        pistenaytto.X = Screen.Right - 100;
555        pistenaytto.Y = Screen.Top - 150;
556        pistenaytto.TextColor = Color.Red;
557
558        pistenaytto.BindTo(pistelaskuri);
559        Add(pistenaytto);
560
561        Label pisteteksti = new Label("Pisteitä: ");
562        pisteteksti.X = Screen.Right - 200;
563        pisteteksti.Y = Screen.Top - 150;
564        pisteteksti.TextColor = Color.Red;
565
566        Add(pisteteksti);
567    }
568
569    PhysicsObject LuoLipas()
570    {
571        lipas = new PhysicsObject(30, 30);
572        lipas.Mass = 2.0;
573
574        lipas.Image = lippaanKuva;
575
576        lipas.IgnoresExplosions = true;
577
578        lipas.Tag = "Lipas";
579
580        Add(lipas);
581        return lipas;
582    }
583
584    void LuoLipas(double x, double y)
585    {
586        LuoLipas().Position = new Vector(x, y);
587    }
588
589    void LipasKranaattiOsuma(PhysicsObject porkkana, PhysicsObject kohde)
590    {
591        if (kohde.Tag.ToString() == "Lipas")
592        {
593            ((PlatformCharacter)porkkana).Weapon.Ammo.Value += 5;
594            kohde.Destroy();
595        }
596        if (kohde.Tag.ToString() == "Kranaatti")
597        {
598            kranaattiLaskuri.Value++;
599            kohde.Destroy();
600        }
601
602    }
603
604    void HeitaKranaatti()
605    {
606        if (kranaattiLaskuri.Value > 0)
607        {
608            Grenade kranaatti = new Grenade(10.0);
609            kranaatti.Image = kranaatinKuva;
610            kranaatti.Mass = 1.0;
611            kranaatti.ExplosionRadius = 100.0;
612
613            kranaattiLaskuri.Value -= 1;
614
615            kranaatti.X = porkkana.X;
616            kranaatti.Y = porkkana.Y;
617            Add(kranaatti);
618            Vector kranaatinlento = Vector.FromLengthAndAngle(700.0, porkkana.Weapon.Angle);
619            kranaatti.Hit(kranaatinlento);
620            kranaatti.Destroyed += new Action(delegate { kranaatti_Destroyed(kranaatti); });
621        }
622    }
623
624    void kranaatti_Destroyed(Grenade s)
625    {
626        foreach (PhysicsObject item in rajahdyksenTomaattiUhrit)
627        {
628            if (Vector.Distance(s.Position, item.Position) < s.ExplosionRadius)
629            {
630                TomaattiKuoli(item);
631                rajahdys.AddEffect(item.Position, 50);
632            }
633        }
634
635        foreach (GameObject item in rajahdyksenPorkkanaUhri)
636        {
637            if (Vector.Distance(s.Position, item.Position) < s.ExplosionRadius)
638            {
639                elamat -= 50;
640
641                if (elamat < 1)
642                {
643                    porkkana.Stop();
644
645                    MediaPlayer.Play("pling");
646
647                    porkkana.Destroy();
648
649                    LuoHautakivi();
650
651                    LopetaPeli();
652
653                }
654            }
655        }
656    }
657
658    void vihollinenAmpuu(Timer ampumaAjastin)
659    {
660        PlatformCharacter tomaatti2 = ampumaAjastin.Tag as PlatformCharacter;
661
662        Vector ampumaSuunta = (porkkana.Position - tomaatti2.Position).Normalize();
663        tomaatti2.Weapon.Angle = ampumaSuunta.Angle;
664
665        PhysicsObject vihu = ampumaAjastin.Tag as PhysicsObject;
666
667        PhysicsObject ammus2 = tomaatti2.Weapon.Shoot();
668
669        if (ammus2 != null)
670        {
671            ammus2.Size *= 5;
672            ammus2.MaximumLifetime = TimeSpan.FromSeconds(1.5);
673            ammus2.IgnoresGravity = true;
674        }
675    }
676
677    void LuoKranaattiLaskuri()
678    {
679        kranaattiLaskuri = new IntMeter(3);
680        kranaattiLaskuri.MinValue = 0;
681        Label kranaattiNaytto = new Label();
682        kranaattiNaytto.X = Screen.Right - 100;
683        kranaattiNaytto.Y = Screen.Top - 50;
684        kranaattiNaytto.TextColor = Color.Red;
685
686
687        kranaattiNaytto.BindTo(kranaattiLaskuri);
688        Add(kranaattiNaytto);
689
690        Label kranaattiteksti = new Label("Kranaatteja jäljellä: ");
691        kranaattiteksti.X = Screen.Right - 200;
692        kranaattiteksti.Y = Screen.Top - 50;
693        kranaattiteksti.TextColor = Color.Red;
694
695        Add(kranaattiteksti);
696    }
697
698    PhysicsObject LuoKranaatti()
699    {
700        PhysicsObject uusikranaatti = new PhysicsObject(40, 20);
701        uusikranaatti.Mass = 2.0;
702        uusikranaatti.Image = uudenKranaatinKuva;
703        uusikranaatti.IgnoresExplosions = true;
704        uusikranaatti.Tag = "Kranaatti";
705        Add(uusikranaatti);
706        return uusikranaatti;
707    }
708
709    void LuoKranaatti(double x, double y)
710    {
711        LuoKranaatti().Position = new Vector(x, y);
712    }
713
714    PhysicsObject LuoMaali()
715    {
716        PhysicsObject maali = new PhysicsObject(40, 40);
717        maali.Image = maalinKuva;
718        maali.Mass = 4.0;
719        maali.Tag = "maali";
720        AddCollisionHandler(maali, MaaliinOsuma);
721        return maali;
722    }
723
724    void MaaliinOsuma(PhysicsObject maali, PhysicsObject kohde)
725    {
726        if (kentanNro == 1 && kohde == porkkana && maali.Tag == "maali")
727        {
728            pistelaskuri.Value += 500;
729            kentanNro = 2;
730            SeuraavaKentta(kentanNro);
731            kentanNro = 2;
732        }
733
734        else if (kentanNro == 2 && kohde == porkkana && maali.Tag == "maali")
735        {
736            pistelaskuri.Value += 500;
737            kentanNro = 3;
738            maali.Destroy();
739            SeuraavaKentta(kentanNro);
740            kentanNro = 3;
741        }
742    }
743
744    void TallennaPisteet(Window sender)
745    {
746        DataStorage.Save<ScoreList>(topLista, "pisteet.xlm");
747
748        MediaPlayer.Stop();
749
750        ClearAll();
751
752        kentanNro = 0;
753        SeuraavaKentta(kentanNro);
754
755    }
756
757    PhysicsObject LuoRaha()
758    {
759        raha = new PhysicsObject(40, 40);
760        raha.Mass = 4.0;
761        raha.Image = RahanKuva;
762        AddCollisionHandler(raha, RahaanTormays);
763        return raha;
764    }
765
766    void RahaanTormays(PhysicsObject raha, PhysicsObject kohde)
767    {
768        if (kohde == porkkana)
769        {
770            pistelaskuri.Value += 100;
771            raha.Destroy();
772        }
773    }
774
775    void TeeKentta1()
776    {
777        MediaPlayer.Stop();
778
779        TileMap kentta = TileMap.FromFile("kentta1.txt");
780        kentta['#'] = lisaaTaso;
781        kentta['K'] = lisaaTaso2;
782        kentta['G'] = lisaaTaso3;
783        kentta['N'] = lisaaPelaaja;
784        kentta['E'] = lisaaTomaatti;
785        kentta['L'] = LuoLipas;
786        kentta['A'] = LuoKranaatti;
787        kentta['T'] = lisaaTomaatti2;
788        kentta['M'] = LuoMaali;
789        kentta['R'] = LuoRaha;
790        kentta['G'] = lisaaTaso3;
791        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
792        Level.CreateBorders();
793        Level.Background.CreateGradient(Color.Blue, Color.Black);
794
795        Gravity = new Vector(0, -1000);
796
797        LuoPanosLaskuri();
798        LuoPisteLaskuri();
799        LuoKranaattiLaskuri();
800
801        Camera.Follow(porkkana);
802
803        Camera.ZoomFactor = 0.5;
804        Camera.StayInLevel = true;
805
806        lisaaNappaimet();
807    }
808
809    void TeeKentta2()
810    {
811
812        MediaPlayer.Stop();
813
814        TileMap kentta = TileMap.FromFile("kentta2.txt");
815        kentta['#'] = lisaaTaso;
816        kentta['K'] = lisaaTaso2;
817        kentta['G'] = lisaaTaso3;
818        kentta['N'] = lisaaPelaaja;
819        kentta['E'] = lisaaTomaatti;
820        kentta['L'] = LuoLipas;
821        kentta['A'] = LuoKranaatti;
822        kentta['T'] = lisaaTomaatti2;
823        kentta['M'] = LuoMaali;
824        kentta['R'] = LuoRaha;
825        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
826        Level.CreateBorders();
827        Level.Background.CreateGradient(Color.Black, Color.Blue);
828
829        Gravity = new Vector(0, -1000);
830
831        LuoPanosLaskuri();
832        LuoPisteLaskuri();
833        LuoKranaattiLaskuri();
834
835        Camera.Follow(porkkana);
836
837        Camera.ZoomFactor = 2.0;
838        Camera.StayInLevel = true;
839
840        lisaaNappaimet();
841    }
842
843    //void TeeKentta3()
844    //{
845    //    MediaPlayer.Stop();
846
847    //    TileMap kentta = TileMap.FromFile("kentta3.txt");
848    //    kentta['#'] = lisaaTaso;
849    //    kentta['K'] = lisaaTaso2;
850    //    kentta['G'] = lisaaTaso3;
851    //    kentta['N'] = lisaaPelaaja;
852    //    kentta['E'] = lisaaTomaatti;
853    //    kentta['L'] = LuoLipas;
854    //    kentta['A'] = LuoKranaatti;
855    //    kentta['T'] = lisaaTomaatti2;
856    //    kentta['M'] = LuoMaali;
857    //    kentta['R'] = LuoRaha;
858    //    kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
859    //    Level.CreateBorders();
860    //    Level.Background.CreateGradient(Color.Black, Color.Blue);
861
862    //    Gravity = new Vector(0, -1000);
863
864    //    LuoPanosLaskuri();
865    //    LuoPisteLaskuri();
866    //    LuoKranaattiLaskuri();
867
868    //    Camera.Follow(porkkana);
869
870    //    Camera.ZoomFactor = 1.0;
871    //    Camera.StayInLevel = true;
872
873    //    lisaaNappaimet();
874    //
875    //}
876
877    void cheatIkkuna()
878    {
879        InputWindow cheatIkkuna = new InputWindow(300, 200, "Enter cheat");
880       
881        cheatIkkuna.TextEntered += ProcessInput;
882        Add(cheatIkkuna);
883    }
884
885    void ProcessInput(InputWindow cheatikkuna)
886    {
887        string vastaus = cheatikkuna.InputBox.Text;
888
889        if (vastaus == cheat1)
890        {
891            pelaajallaOnLaser = true;
892            kentanNro = 1;
893            SeuraavaKentta(kentanNro);
894            MessageDisplay.Add("Lasergun activated!");
895
896        }
897
898        if (vastaus == cheat2)
899        {
900            Gravity = new Vector(0, -250);
901            MessageDisplay.Add("Pieni painovoima aktivoitu!");
902        }
903
904        if (vastaus == cheat3)
905        {
906            Gravity = new Vector(0, -1000);
907            pelaajallaOnLaser = false;
908            MessageDisplay.Add("Kaikki cheatit poistettu!");
909        }
910
911        else
912        {
913            MessageDisplay.Add("Väärä koodi!");
914        }
915
916    }
917
918    void PainettiinValikonNappia(int valinta)
919    {
920        switch (valinta)
921        {
922            case 0:
923
924                AloitaPeli();
925
926                break;
927            case 1:
928
929                Keyboard.Listen(Key.Enter, ButtonState.Pressed, Valikko, "Return to main menu");
930
931                HighScoreWindow topIkkuna = new HighScoreWindow(
932                "Highscores",
933                topLista);
934                topIkkuna.Closed += TallennaPisteet;
935
936                Add(topIkkuna);
937
938                break;
939
940            case 2:
941
942                lisaaNappaimet();
943                ShowControlHelp();
944                ClearControls();
945                Valikko();
946
947                break;
948
949            case 3:
950
951                System.Diagnostics.Process.Start("www.carrotpowered.weebly.com");
952                Valikko();
953
954                break;
955       
956            case 4:
957
958                MultiSelectWindow alkuValikko = new MultiSelectWindow("Options",
959                "Music", "Delete all files", "Cancel");
960                Add(alkuValikko);
961
962                alkuValikko.AddItemHandler(0, null);
963                alkuValikko.AddItemHandler(1, null);
964                alkuValikko.AddItemHandler(2, Valikko);
965                alkuValikko.DefaultCancel = 2;
966
967                break;
968           
969            case 5:
970
971                Exit();
972
973                break;
974        }
975    }
976
977    void Lopetuskysely()
978    {
979        MultiSelectWindow Lopetuskysely = new MultiSelectWindow("Do you want to exit?",
980"No", "Yes");
981        Add(Lopetuskysely);
982
983        Lopetuskysely.AddItemHandler(0, Valikko);
984        Lopetuskysely.AddItemHandler(1, Tallennuskysely);
985
986        Lopetuskysely.Color = Color.Transparent;
987        Lopetuskysely.SetButtonColor(Color.Gray);
988        Lopetuskysely.SelectionColor = Color.LimeGreen;
989
990        Lopetuskysely.DefaultCancel = 0;
991    }
992   
993    void Tallennuskysely()
994    {
995        MultiSelectWindow Tallennuskysely = new MultiSelectWindow("Do you want to save?",
996"Yes", "No");
997        Add(Tallennuskysely);
998
999        Tallennuskysely.AddItemHandler(0, TallennaPeli);
1000        Tallennuskysely.AddItemHandler(1, Valikko);
1001
1002        Tallennuskysely.Color = Color.Transparent;
1003        Tallennuskysely.SetButtonColor(Color.Gray);
1004        Tallennuskysely.SelectionColor = Color.LimeGreen;
1005       
1006        Tallennuskysely.DefaultCancel = -1;
1007    }
1008
1009    void TallennaPeli()
1010    {
1011        SaveGame("savegame.xml");
1012        Valikko();
1013    }
1014
1015    void AloitaPeli()
1016    {
1017        MultiSelectWindow pelimuoto = new MultiSelectWindow("",
1018"Start a new game", "Load game", "Cancel");
1019        Add(pelimuoto);
1020
1021        pelimuoto.AddItemHandler(0, AloitaUusiPeli);
1022        pelimuoto.AddItemHandler(1, AloitaTallennettuPeli);
1023        pelimuoto.AddItemHandler(2, Exit);
1024
1025        pelimuoto.Color = Color.Transparent;
1026        pelimuoto.SetButtonColor(Color.Gray);
1027        pelimuoto.SelectionColor = Color.LimeGreen;
1028
1029        pelimuoto.DefaultCancel = 2;
1030    }
1031
1032    void AloitaUusiPeli()
1033    {
1034        kentanNro = 1;
1035        SeuraavaKentta(kentanNro);
1036    }
1037
1038    void AloitaTallennettuPeli()
1039    {
1040        if (DataStorage.Exists("savegame.xml"))
1041        {
1042            LoadGame("savegame.xml");
1043            peliladattu = true;
1044            SeuraavaKentta(kentanNro);
1045        }
1046        else
1047        {
1048        MultiSelectWindow LatausEpäonnistui = new MultiSelectWindow("Game loading failed!",
1049"Start a new game", "Retry", "Cancel");
1050        Add(LatausEpäonnistui);
1051
1052        LatausEpäonnistui.AddItemHandler(0, AloitaUusiPeli);
1053        LatausEpäonnistui.AddItemHandler(1, AloitaTallennettuPeli);
1054        LatausEpäonnistui.AddItemHandler(2, Valikko);
1055
1056        LatausEpäonnistui.Color = Color.Red;
1057        LatausEpäonnistui.SetButtonColor(Color.Gray);
1058        LatausEpäonnistui.SelectionColor = Color.LimeGreen;
1059
1060        LatausEpäonnistui.DefaultCancel = 2;
1061        }
1062    }
1063}
Note: See TracBrowser for help on using the repository browser.