source: 2011/24/MiskaK/Sniper/Sniper/Sniper/Peli.cs @ 2093

Revision 2093, 19.0 KB checked in by mikrkana, 8 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 Sniper : PhysicsGame
10{
11   
12    PhysicsObject maalitaulu;
13    Flame liekki;
14    Flame roihu;
15    ExplosionSystem rajahdys;
16    ExplosionSystem posaus;
17    ExplosionSystem nuke;
18   
19    PhysicsObject tähtäin;
20    IntMeter pisteLaskuri;
21    Label pisteNaytto;
22
23    InputWindow kysymysIkkuna;
24   
25    PhysicsObject ammusmittari;
26    PhysicsObject pistetausta;
27    PhysicsObject overlätkä;
28    PhysicsObject ydinpommi;
29    PhysicsObject ydinkaasu;
30
31    ScoreList topLista = new ScoreList(5, false, 0);
32
33    Image taulunKuva = LoadImage("maalitaulu");
34    Image ammusMittari0 = LoadImage("ammukset0");
35    Image ammusMittari1 = LoadImage("ammukset1");
36    Image ammusMittari2 = LoadImage("ammukset2.1");
37    Image tähtäimenKuva = LoadImage("tähtäin2");
38    Image tähtäimenLatausKuva = LoadImage("loadtähtäin");
39    Image savuHiukkanen = LoadImage("savuhiukkanen");
40    Image posausHiukkanen = LoadImage("posaushiukkanen");
41    Image räjähdysHiukkanen = LoadImage("räjähdyshiukkanen");
42    Image pisteTausta = LoadImage("pistetausta");
43    Image youFailed = LoadImage("Game Over");
44    Image nukeTaulu = LoadImage("nuketaulu");
45    Image radioaktiivinenHiukkanen = LoadImage("radioaktiivinen hiukkanen");
46    Image nukeHiukkanen = LoadImage("nukeHiukkanen2");
47    Image nuclearGas = LoadImage("ydinkaasu");
48    Image esittelyNäyttö = LoadImage("esittelynaytto");
49    SoundEffect latausÄäni = LoadSoundEffect("Pump Shotgun");
50    SoundEffect nukeÄäni = LoadSoundEffect("Time Bomb");
51    SoundEffect ampumisÄäni = LoadSoundEffect("Sniper_Rifle");
52    SoundEffect räjähdysÄäni = LoadSoundEffect("Bomb");
53    int pMaxMaara = 20000;
54
55    double työntöVoima = -100.0;
56
57    double työntöVoimaVarasto = 0;
58
59    double tuuli = -1000.0;
60
61    string Cheat1 = "MegaTargets";
62
63    string Cheat2 = "Fasthand";
64
65    string Cheat3 = "Tsernobyl";
66
67    bool cheat3paalla = false;
68
69    string Cheat4 = "LoadNow";
70
71    string Cheat5 = "ClearAll";
72
73    int doOnce = 0;
74
75    int teeKerran = 0;
76
77    int teeYhdesti = 0;
78
79    Boolean noFail = false;
80
81    Boolean cheat1 = false;
82
83    Boolean cheat2 = false;
84
85    Boolean cheat3 = false;
86
87    Boolean cheat4 = false;
88
89   
90
91    int aseLadattu = 1;
92
93    int i = 0;
94
95    public override void Begin()
96    {
97
98        SetWindowSize(1024, 768, false); 
99
100
101        if (DataStorage.Exists("pisteet.xml"))
102            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
103
104       
105        LuoTähtäin();
106        LuoMaalitaulu(RandomGen.NextDouble(Screen.Left + 100, Screen.Right - 100) , 600.0);
107       
108        AsetaOhjaimet();
109        LuoKenttä(tuuli);
110        LuoAmmusMittari();
111        LuoPisteMittari();
112       
113       
114        TyönnäTaulua(työntöVoima);
115
116        MessageDisplay.MaxMessageCount = 2;
117
118    }
119
120    void LuoTähtäin()
121    {
122        tähtäin = new PhysicsObject(100, 100);
123        tähtäin.Image = tähtäimenKuva;
124        Mouse.ListenMovement(0.1, LiikutaTähtäintä, null);
125        tähtäin.IgnoresGravity = true;
126        tähtäin.IgnoresCollisionResponse = true;
127        tähtäin.CanRotate = false;
128
129        Add(tähtäin, 1);
130    }
131
132   
133
134    void LuoAmmusMittari()
135    {
136        ammusmittari = new PhysicsObject(300, 300);
137        ammusmittari.Image = ammusMittari1;
138        ammusmittari.IgnoresGravity = true;
139        ammusmittari.IgnoresCollisionResponse = true;
140        ammusmittari.CanRotate = false;
141
142        //Toimii kotona
143        //ammusmittari.X = 810.0;
144        //ammusmittari.Y = -400.0;
145
146        //Toimii kurssin koneilla
147        //ammusmittari.X = Level.Right;
148        //ammusmittari.Y = Level.Bottom;
149
150        //Toimii esittelyssä
151        ammusmittari.X = 365;
152        ammusmittari.Y = -250;
153
154        Add(ammusmittari, 1);
155    }
156
157    void PaljastaCheatit()
158    {
159
160        if (pisteLaskuri.Value == 5)
161        {
162
163            MessageDisplay.Add("Cheat Window = press P");
164        }
165
166        if (pisteLaskuri.Value == 6)
167        {
168
169            MessageDisplay.Add("Clear all cheats = ClearAll");
170        }
171
172        if (pisteLaskuri.Value == 10)
173        {
174
175            MessageDisplay.Add("Oversize targets = MegaTargets");
176        }
177
178        if (pisteLaskuri.Value == 15)
179        {
180
181            MessageDisplay.Add("Load two bullets at a time = Fasthand ");
182        }
183
184        if (pisteLaskuri.Value == 20)
185        {
186
187            MessageDisplay.Add("Immediate reload = LoadNow");
188        }
189
190        if (pisteLaskuri.Value == 25)
191        {
192
193            MessageDisplay.Add("Radioactive graphics = Tsernobyl ");
194        }
195    }
196
197    void LuoPisteMittari()
198    {
199        pistetausta = new PhysicsObject(300, 200);
200        pistetausta.Image = pisteTausta;
201
202        //Toimii kotona
203        //pistetausta.X = -750.0;
204        //pistetausta.Y = 400.0;
205
206        //Toimii kurssin koneilla
207        //pistetausta.X = Level.Left + 30;
208        //pistetausta.Y = Level.Top + 10;
209
210        //Toimii esittelyssä
211        pistetausta.X = -350.0;
212        pistetausta.Y = 300.0;
213
214        pistetausta.IgnoresGravity = true;
215        pistetausta.IgnoresCollisionResponse = true;
216        pistetausta.CanRotate = false;
217        Add(pistetausta, 1);
218
219        pisteLaskuri = new IntMeter(0);
220
221        pisteNaytto = new Label();
222        //Toimii kotona
223        //pisteNaytto.X = Screen.Left + 200;
224        //pisteNaytto.Y = Screen.Top - 150;
225
226        //Toimii kurssin koneilla
227        //pisteNaytto.X = Screen.Left + 145;
228        //pisteNaytto.Y = Screen.Top - 120;
229
230        //Toimii esittelyssä
231        pisteNaytto.X = Screen.Left + 145;
232        pisteNaytto.Y = Screen.Top - 110;
233
234        pisteNaytto.Font = Font.DefaultLargeBold;
235       
236
237        pisteNaytto.TextColor = Color.Red;
238       
239        pisteNaytto.BindTo(pisteLaskuri);
240        Add(pisteNaytto);
241    }
242
243
244
245
246    void LuoKenttä(double tuuli)
247    {
248        Level.Background.CreateStars( 10000 );
249        Wind = new Vector(0.0, tuuli);
250
251        Level.Width = 1024;
252        Level.Height = 768;
253       
254
255        liekki = new Flame(savuHiukkanen);
256        liekki.IgnoreWind = true;
257        roihu = new Flame(radioaktiivinenHiukkanen);
258        roihu.IgnoreWind = true;
259        rajahdys = new ExplosionSystem(räjähdysHiukkanen, pMaxMaara);
260        rajahdys.MinLifetime = 0.5;
261        rajahdys.MaxLifetime = 1.3;
262        rajahdys.MinVelocity = 0;
263        rajahdys.MaxVelocity = 250;
264        rajahdys.MinScale = 0.1;
265        rajahdys.MaxScale = 40.5;
266        rajahdys.MinRotationSpeed = 0.2;
267        rajahdys.MaxRotationSpeed = 2.0;
268        rajahdys.IgnoreWind = true;
269       
270        Add(rajahdys);
271
272        posaus = new ExplosionSystem(posausHiukkanen, pMaxMaara);
273        posaus.MinLifetime = 0.1;
274        posaus.MaxLifetime = 0.5;
275        posaus.MinVelocity = 0;
276        posaus.MaxVelocity = 500;
277        posaus.MinScale = 0.1;
278        posaus.MaxScale = 40.0;
279        posaus.MinRotationSpeed = 0.2;
280        posaus.MaxRotationSpeed = 2.0;
281        Add(posaus);
282    }
283
284    void LuoYdinPommi()
285    {
286        ydinpommi = new PhysicsObject(100.0, 100.0);
287        ydinpommi.Image = nukeTaulu;
288        ydinpommi.IgnoresGravity = true;
289        ydinpommi.IgnoresCollisionResponse = true;
290        ydinpommi.X = Screen.Right - 50;
291        ydinpommi.Y = Level.Top - 100;
292        ydinpommi.AngularVelocity = 5.0;
293        Add(ydinpommi, 1);
294    }
295
296    void AsetaOhjaimet()
297    {
298        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Exit");
299       
300        Keyboard.Listen(Key.R, ButtonState.Pressed, LataaAse, "Reload weapon");
301
302        Keyboard.Listen(Key.P, ButtonState.Pressed, SyötäSalasana, "Input password");
303
304        Keyboard.Listen(Key.Space, ButtonState.Pressed, Pause1, null);
305
306        Keyboard.Listen(Key.Space, ButtonState.Released, Pause2, null);
307
308        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaAlusta, "Aloita alusta");
309
310        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, AmmuHuti, null);
311    }
312
313    void Pause1()
314    {
315
316        työntöVoimaVarasto = työntöVoima;
317        maalitaulu.Stop();
318       
319        MessageDisplay.Add("Game paused, release SPACE to continue.");
320    }
321
322    void Pause2()
323    {
324        MessageDisplay.Clear();
325        työntöVoima = työntöVoimaVarasto;
326        maalitaulu.Hit(new Vector(0, työntöVoima));
327    }
328
329
330    void SyötäSalasana()
331    {
332
333        kysymysIkkuna = new InputWindow("Cheat Window", "Input Cheat Code");
334        kysymysIkkuna.TextEntered += KytkeCheatti;
335        Add(kysymysIkkuna);
336    }
337
338    void KytkeCheatti(InputWindow ikkuna)
339    {
340        string vastaus = ikkuna.InputBox.Text;
341
342        if (vastaus == Cheat1)
343        {
344            cheat1 = true;
345           
346            MessageDisplay.Add("Mega Targets activated!");
347        }
348
349        if (vastaus == Cheat2)
350        {
351            cheat2 = true;
352           
353            MessageDisplay.Add("Double reload activated!");
354        }
355
356        if (vastaus == Cheat3)
357        {
358            cheat3 = true;
359
360
361            MessageDisplay.Add("Radioactive graphics activated!");
362        }
363
364        if (vastaus == Cheat4)
365        {
366            cheat4 = true;
367            MessageDisplay.Add("Immediate reload activated!");
368        }
369
370        if (vastaus == Cheat5)
371        {
372           
373            MessageDisplay.Add("All cheats cleared!");
374            ActivateCheat5();
375        }
376
377
378
379
380        else
381        {
382           
383            MessageDisplay.Add("Enter valid code!");
384        }
385    }
386
387    void ActivateCheat1()
388    {
389        maalitaulu.Size = new Vector(400.0, 400.0);
390    }
391
392    void ActivateCheat2()
393    {
394        aseLadattu = 2;
395    }
396
397    void ActivateCheat4()
398    {
399        if (i == 0)
400        {
401            Keyboard.Listen(Key.F, ButtonState.Pressed, LataaAse3, null);
402            i = 1;
403        }
404    }
405
406    void ActivateCheat5()
407    {
408        cheat1 = false;
409        cheat2 = false;
410        cheat3 = false;
411        cheat4 = false;
412        AloitaAlusta();
413    }
414
415    void AmmuHuti()
416    {
417        Vector d = maalitaulu.Position - tähtäin.Position;
418
419        if (d.Magnitude < maalitaulu.Width / 3)
420        {
421            Ammu(); 
422        }
423        else 
424        {
425            if (aseLadattu == 0)
426            {
427               
428                MessageDisplay.Add(" Your weapon is not loaded. Press R to reload weapon.");
429            }
430
431            else
432            {
433                ampumisÄäni.Play();
434               
435                aseLadattu = aseLadattu - 1;
436
437                if (aseLadattu == 1)
438                {
439                    ammusmittari.Image = ammusMittari1;
440                }
441
442                if (aseLadattu == 0)
443                {
444                    tähtäin.Image = tähtäimenLatausKuva;
445                    ammusmittari.Image = ammusMittari0;
446                }
447            }
448        }
449    }
450
451    void LataaAse()
452    {
453        if (aseLadattu == 0)
454        {
455            Timer.SingleShot(2.0, LataaAse2);
456            latausÄäni.Play();
457           
458        }
459
460        else
461        {
462           
463            MessageDisplay.Add("You are already loaded your weapon.");
464        }
465    }
466
467    void LataaAse2()
468    {
469        if (cheat2 == true)
470        {
471            ActivateCheat2();
472            latausÄäni.Play();
473            tähtäin.Image = tähtäimenKuva;
474            ammusmittari.Image = ammusMittari2;
475        }
476        else
477        {
478
479            tähtäin.Image = tähtäimenKuva;
480            ammusmittari.Image = ammusMittari1;
481            aseLadattu = 1;
482        }
483    }
484
485    void LataaAse3()
486    {
487        if (aseLadattu == 0)
488        {
489            latausÄäni.Play();
490            tähtäin.Image = tähtäimenKuva;
491            ammusmittari.Image = ammusMittari1;
492            aseLadattu = 1;
493        }
494
495        else
496        {
497            MessageDisplay.Add("You are already loaded your weapon.");
498        }
499    }
500
501    void Ammu()
502    {
503        if (aseLadattu == 0)
504        {
505           
506
507            MessageDisplay.Add("Your weapon is not loaded. Press R to reload weapon.");
508        }
509
510        else
511        {
512            if (cheat3 == true)
513            {
514                roihu = new Flame(radioaktiivinenHiukkanen);
515                roihu.IgnoreWind = true;
516                Add(roihu);
517                noFail = true;
518            }
519
520            else
521            {
522                liekki = new Flame(savuHiukkanen);
523                liekki.IgnoreWind = true;
524                Add(liekki);
525                RajaytaTaulu1();
526                noFail = true;
527            }
528
529            Timer.SingleShot(1.0, RajaytaTaulu);
530            ampumisÄäni.Play();
531            pisteLaskuri.Value++;
532           
533            aseLadattu = aseLadattu - 1;
534            PaljastaCheatit();
535        }
536
537        if (aseLadattu == 1)
538        {
539            ammusmittari.Image = ammusMittari1;
540        }
541
542        if (aseLadattu == 0)
543        {
544            ammusmittari.Image = ammusMittari0;
545            tähtäin.Image = tähtäimenLatausKuva;
546        }
547    }
548
549
550
551
552    void RajaytaTaulu()
553    {
554        double x = maalitaulu.X;
555        double y = maalitaulu.Y;
556        if (cheat3 == true)
557        {
558            nuke.AddEffect(x, y, 2000);
559        }
560        else
561        {
562            //posaus.AddEffect(x, y, 200);
563            rajahdys.AddEffect(x, y, 4000);
564           
565        }
566        räjähdysÄäni.Play();
567        maalitaulu.Destroy();
568       
569        Timer.SingleShot(1.0, SammutaLiekki);
570    }
571
572    void RajaytaTaulu1()
573    {
574        double x = tähtäin.X;
575        double y = maalitaulu.Y - 50;
576
577        posaus.AddEffect(x, y, 1000);
578       
579    }
580
581   
582
583    void SammutaLiekki()
584    {
585        liekki.Destroy();
586        roihu.Destroy();
587        if (cheat3 == true)
588        {
589            roihu = new Flame(radioaktiivinenHiukkanen);
590            roihu.IgnoreWind = true;
591        }
592        else
593        {
594            liekki = new Flame(savuHiukkanen);
595            liekki.IgnoreWind = true;
596        }
597       
598        doOnce = 0;
599        työntöVoima = työntöVoima - 100;
600        tuuli = tuuli - 400;
601        LuoMaalitaulu(RandomGen.NextDouble(Screen.Left + 100, Screen.Right - 100), 600.0);
602       
603    }
604
605    void LuoMaalitaulu( double x, double y )
606    {
607        maalitaulu = new PhysicsObject( 200.0, 200.0);
608        maalitaulu.Image = taulunKuva;
609        maalitaulu.X = x;
610        maalitaulu.Y = y;
611        noFail = false;
612
613        Add(maalitaulu);
614    }
615
616    void GameOver()
617    {
618        maalitaulu.Y.ToString();
619
620        if (teeKerran == 0)
621        {
622            if (noFail == false)
623            {
624                if (maalitaulu.Y < Level.Bottom - 800)
625                {
626                    overlätkä = new PhysicsObject(600, 400);
627                    overlätkä.Image = youFailed;
628                    overlätkä.IgnoresCollisionResponse = true;
629                    overlätkä.IgnoresGravity = true;
630                    overlätkä.CanRotate = false;
631                    overlätkä.X = 0.0;
632                    overlätkä.Y = 0.0;
633                    Add(overlätkä, 2);
634                    pistetausta.X = 0.0;
635                    pistetausta.Y = 265.0;
636                    pisteNaytto.X = 0.0;
637                    pisteNaytto.Y = 240.0;
638                    tähtäin.Destroy();
639                    ammusmittari.Destroy();
640                    MessageDisplay.Clear();
641
642                    HighScoreWindow topIkkuna = new HighScoreWindow("Sniper",
643                             "Highscore",
644                             "Congratulations! You shot %p targets! Enter your name:",
645                             topLista, pisteLaskuri.Value);
646                    topIkkuna.Closed += TallennaPisteet;
647                    Add(topIkkuna);
648                    teeKerran = 1;
649                }
650            }
651        }
652    }
653
654    void TallennaPisteet(Window sender)
655    {
656        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
657    }
658
659
660    void TyönnäTaulua(double työnnä)
661    {
662        maalitaulu.Hit(new Vector(0, työnnä));
663    }
664
665
666    void LiikutaTähtäintä(AnalogState hiirenTila)
667    {
668        tähtäin.X = Mouse.PositionOnWorld.X;
669        tähtäin.Y = Mouse.PositionOnWorld.Y;
670
671        Vector hiirenLiike = hiirenTila.MouseMovement;
672
673    }
674
675    void VaihdaGrafiikat()
676    {
677        rajahdys.Destroy();
678        maalitaulu.Image = nukeTaulu;
679        maalitaulu.CanRotate = true;
680        maalitaulu.AngularVelocity = 5.0;
681
682        if (teeYhdesti == 0)
683        {
684            TyönnäTaulua(työntöVoima);
685            teeYhdesti = 1;
686        }
687        if (cheat3paalla == false)
688        {
689            nuke = new ExplosionSystem(radioaktiivinenHiukkanen, pMaxMaara);
690            nuke.MinLifetime = 1.0;
691            nuke.MaxLifetime = 2.0;
692            nuke.MinVelocity = 0;
693            nuke.MaxVelocity = 600;
694            nuke.MinScale = 0.1;
695            nuke.MaxScale = 80.5;
696            nuke.MinRotationSpeed = 0.2;
697            nuke.MaxRotationSpeed = 5.0;
698            Add(nuke);
699
700            ydinkaasu = PhysicsObject.CreateStaticObject(1920.0, 1080.0);
701            ydinkaasu.Image = nuclearGas;
702            ydinkaasu.Position = new Vector(0.0, 0.0);
703            ydinkaasu.IgnoresCollisionResponse = true;
704            ydinkaasu.IgnoresGravity = true;
705            ydinkaasu.CanRotate = false;
706            Add(ydinkaasu);
707        }
708    }
709
710    void AloitaAlusta()
711    {
712        ClearAll();
713
714        LuoTähtäin();
715        LuoMaalitaulu(RandomGen.NextDouble(Screen.Left + 100, Screen.Right - 100), 600.0);
716
717        AsetaOhjaimet();
718        tuuli = -1000.0;
719        LuoKenttä(tuuli);
720        LuoAmmusMittari();
721        LuoPisteMittari();
722        työntöVoima = -200.0;
723
724        TyönnäTaulua(työntöVoima);
725
726        MessageDisplay.MaxMessageCount = 2;
727
728        aseLadattu = 1;
729
730        cheat3paalla = false;
731    }
732
733
734    protected override void Update(Time time)
735    {
736       
737        if (liekki != null)
738        {
739            liekki.Position = maalitaulu.Position;
740        }
741
742        if (roihu != null)
743        {
744            roihu.Position = maalitaulu.Position;
745        }
746
747        if (doOnce == 0)
748        {
749            TyönnäTaulua(työntöVoima);
750            doOnce = 1;
751        }
752
753        if (cheat1 == true)
754        {
755            ActivateCheat1();
756        }
757
758        if (cheat3 == true)
759        {
760            MessageDisplay.TextColor = Color.LightGreen;
761            pisteNaytto.TextColor = Color.LightGreen;
762            VaihdaGrafiikat();
763            cheat3paalla = true;
764        }
765
766        else
767        {
768            MessageDisplay.TextColor = Color.Red;
769        }
770
771        if (cheat4 == true)
772        {
773            ActivateCheat4();
774        }
775
776        GameOver();
777
778        base.Update(time);
779    }
780}
781
Note: See TracBrowser for help on using the repository browser.