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

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