source: 2016/24/NikoJ/ArrowRUN/ArrowRUN/ArrowRUN/ArrowRUN.cs @ 8257

Revision 8257, 18.6 KB checked in by sieerinn, 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
9
10
11// http://www.bfxr.net/
12//https://www.youtube.com/watch?v=YBJhzfvdyKw
13
14
15public class ArrowRUN : PhysicsGame
16
17{
18    bool minigun = false, parina = false;
19    bool nopeusHax = false;
20    double NOPEUS = 800;
21    const double hyppyNopeus = 750;
22    const int RUUDUN_KOKO = 40;
23    const double pyoriminenNopeus = 2.0;
24    Timer vihuajastin;
25    Timer pistehaxajastin;
26   
27
28    PhysicsObject Vihollinen;
29    Image item2 = LoadImage("item2");
30    PhysicsObject pelaaja1;
31    Image[] pelaajankuvat = LoadImages("taivaansininen", "keltainen", "viininpunainen", "sininen", "ruskea", "pinkki", "liila", "punen", "Untitled");
32    Image tahtiKuva = LoadImage("tahti");
33    Image Laserkuva = LoadImage("laser");
34    Image plasmakuva = LoadImage("plasma");
35    Image YdinPommikuva = LoadImage("ydinPommi");
36
37   
38
39    SoundEffect laserAani = LoadSoundEffect("laser aani");
40    SoundEffect kranaatti = LoadSoundEffect("kranaatti");
41    SoundEffect pallo = LoadSoundEffect("pallo");
42    SoundEffect erikoisvoima = LoadSoundEffect("erikois voima");
43    SoundEffect valikko = LoadSoundEffect("valikko");
44    SoundEffect ydinPommiAani = LoadSoundEffect("ydinPommi aani");
45    SoundEffect superVoima = LoadSoundEffect("super voima");
46
47    Color[] varit = { Color.Red, Color.Yellow, Color.Black, Color.Pink, Color.Blue, Color.Green, Color.Purple };
48    int kaytetty = 0;
49
50    Image donaldtrump = LoadImage("donald-trump");
51
52    List<Vector> spawnit = new List<Vector>();
53    List<Vector> vihuspawnit = new List<Vector>();
54    List<LabyrinthWandererBrain> aivolista = new List<LabyrinthWandererBrain>();
55    Vector aloituspaikka;
56
57    IntMeter pisteLaskuri;
58
59    string nykyinenAse = "perus";
60
61    Weapon pelaajan1Ase;
62
63
64    EasyHighScore topLista = new EasyHighScore();
65
66
67    public override void Begin()
68    {
69        // Gravity = new Vector(0, -1000);
70
71        ClearAll();
72
73
74
75
76        MultiSelectWindow alkuValikko = new MultiSelectWindow("arrowRUN",
77  "start", "top score", "exit");
78
79
80        Level.Background.Color = new Color(127, 255, 212);
81        alkuValikko.Color = Color.Mint;
82
83        alkuValikko.AddItemHandler(0, AloitaPeli);
84        alkuValikko.AddItemHandler(1, ParhaatPisteet);
85        alkuValikko.AddItemHandler(2, Exit);
86        Add(alkuValikko);
87
88    }
89
90    void aloitapelaaminen()
91    {
92
93        LuoPistelaskuri();
94
95
96        Camera.Follow(pelaaja1);
97        Camera.ZoomFactor = 1.2;
98        Camera.StayInLevel = true;
99        esinespawn();
100        vihollisspawn();
101    }
102
103    void ParhaatPisteet()
104
105    {
106        topLista.Color = Color.Mint;
107        topLista.Show();
108        topLista.HighScoreWindow.Closed += delegate (Window a) { Begin(); };
109
110    }
111
112    void AloitaPeli()
113
114    {
115        LuoKentta();
116        aloitapelaaminen();
117        LisaaNappaimet();
118    }
119
120
121    void LuoKentta()
122    {
123        TileMap kentta = TileMap.FromLevelAsset("kentta1");
124        kentta.SetTileMethod('.', LisaaSpawn);
125        kentta.SetTileMethod('o', LisaaTaso);
126        kentta.SetTileMethod('i', LisaaTahti);
127        kentta.SetTileMethod('N', LisaaPelaaja);
128        kentta.SetTileMethod('v', LisaaVihollisSpawn);
129        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
130        Level.CreateBorders();
131        Level.Background.Color = Color.White;
132
133
134
135    }
136
137
138    void ProcessInput(InputWindow ikkuna)
139    {
140        string vastaus = ikkuna.InputBox.Text;
141
142        if (vastaus == "mlg speed")
143        {
144            NOPEUS = 80000;
145
146            Keyboard.Clear();
147            LisaaNappaimet();
148
149        }
150
151        if (vastaus == "mlg minigun")
152
153        {
154            minigun = true;
155        }
156
157        if (vastaus == "skin")
158
159        {
160            pelaaja1.Image = donaldtrump;
161
162        }
163
164        if (vastaus == "mlg mode")
165        {
166            parina = true;
167            Camera.Reset();
168            Camera.ZoomFactor = 1.2;
169            Camera.StayInLevel = true;
170            MediaPlayer.Play("musa");
171        }
172
173        if (vastaus == "hullu")
174        {
175            nopeusHax = true;
176            vihuajastin.Interval = RandomGen.NextDouble(0.1, 0.1);
177            foreach (LabyrinthWandererBrain aivo in aivolista) 
178            {
179                aivo.Speed = 600;
180            }
181        }
182
183        if (vastaus == "piste hax")
184        {
185            pistehaxajastin = new Timer();
186            pistehaxajastin.Interval = 0.01;
187            pistehaxajastin.Timeout += delegate { pisteLaskuri.Value += 666; };
188            pistehaxajastin.Start();
189        }
190    }
191
192    protected override void Update (Time time)
193    {
194        if (parina)
195        {
196            Level.Background.Color = varit[kaytetty];
197
198            Camera.Position = pelaaja1.Position + new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-10, 10));
199
200            if (kaytetty + 1 >= varit.Length)
201            {
202                kaytetty = 0;
203            }
204            else
205            {
206                kaytetty++;
207            }
208        }
209
210        base.Update(time);
211    }
212
213
214
215    void LuoPistelaskuri()
216    {
217        pisteLaskuri = new IntMeter(0);
218
219        Label pisteNaytto = new Label();
220        pisteNaytto.X = Screen.Left + 100;
221        pisteNaytto.Y = Screen.Top - 100;
222        pisteNaytto.TextColor = Color.Black;
223        pisteNaytto.Color = Color.White;
224
225        pisteNaytto.BindTo(pisteLaskuri);
226        Add(pisteNaytto);
227    }
228
229    void LisaaTaso(Vector paikka, double leveys, double korkeus)
230    {
231        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
232        taso.Position = paikka;
233        taso.Color = Color.Black;
234        taso.Tag = "seina";
235        Add(taso);
236
237    }
238
239    void LisaaTahti(Vector paikka, double leveys, double korkeus)
240    {
241        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
242        tahti.IgnoresCollisionResponse = true;
243        tahti.Position = paikka;
244        tahti.Image = tahtiKuva;
245        tahti.Tag = "tahti";
246        Add(tahti);
247    }
248
249    void LisaaItem2(Vector paikka, double leveys, double korkeus)
250    {
251        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
252        tahti.IgnoresCollisionResponse = true;
253        tahti.Position = paikka;
254        tahti.Image = item2;
255        tahti.Tag = "item2";
256        Add(tahti);
257    }
258
259    void LisaaLaser(Vector paikka, double leveys, double korkeus)
260    {
261        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
262        tahti.IgnoresCollisionResponse = true;
263        tahti.Position = paikka;
264        tahti.Image = Laserkuva;
265        tahti.Tag = "laser";
266        Add(tahti);
267    }
268
269    void LisaaItem4(Vector paikka, double leveys, double korkeus)
270    {
271        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
272        tahti.IgnoresCollisionResponse = true;
273        tahti.Position = paikka;
274        tahti.Image = plasmakuva;
275        tahti.Tag = "item4";
276        Add(tahti);
277    }
278
279
280    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
281    {
282        pelaaja1 = new PhysicsObject(leveys, korkeus);
283        pelaaja1.Position = paikka;
284        aloituspaikka = paikka;
285        pelaaja1.Mass = 4.0;
286        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
287        AddCollisionHandler(pelaaja1, "item2", TormaaItem2);
288        AddCollisionHandler(pelaaja1, "laser", TormaaLaser);
289        AddCollisionHandler(pelaaja1, "item4", TormaaItem4);
290        AddCollisionHandler(pelaaja1, "ydinPommi", TormaaydinPommi);
291        Image arvottukuva = RandomGen.SelectOne<Image>(pelaajankuvat);
292        //pelaaja1.Color = vari;
293        pelaaja1.CanRotate = false;
294        pelaaja1.Image = arvottukuva;
295        pelaaja1.LinearDamping = 0.975;
296
297        AddCollisionHandler(pelaaja1, "Vihollinen", TormaaViholliseen);
298
299
300        pelaajan1Ase = new AssaultRifle(0, 001);
301        pelaajan1Ase.FireRate = 0.5;
302        pelaajan1Ase.ProjectileCollision = AmmusOsui;
303        pelaaja1.Add(pelaajan1Ase);
304
305        Add(pelaaja1);
306    }
307
308    void LisaaNappaimet()
309    {
310        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
311        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
312
313        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, pyoriminenNopeus);
314        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, NOPEUS);
315        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -NOPEUS);
316        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, -pyoriminenNopeus);
317
318        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
319        Keyboard.Listen(Key.Z, ButtonState.Down, lisaaHAX, "HAX");
320        Keyboard.Listen(Key.X, ButtonState.Down, poistaHAX, "HAX off");
321        Keyboard.Listen<PhysicsObject,PhysicsObject>(Key.K, ButtonState.Down, TormaaViholliseen, "kill",pelaaja1,null);
322        Keyboard.Listen(Key.R, ButtonState.Down, Aloitus, "reset");
323
324        /*Keyboard.Listen(Key.Right, ButtonState.Released, () => pelaaja1.Stop(), null);
325        Keyboard.Listen(Key.Left, ButtonState.Released, () => pelaaja1.Stop(), null);
326        Keyboard.Listen(Key.Down, ButtonState.Released, () => pelaaja1.Stop(), null);
327        Keyboard.Listen(Key.Up, ButtonState.Released, () => pelaaja1.Stop(), null);*/
328        //Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
329
330    }
331
332    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
333
334    {
335        Vihollinen = new PhysicsObject(40.0, 40.0, Shape.Diamond);
336
337        Vihollinen.Color = Color.Red;
338
339        const int RUUDUN_KOKO = 40;
340
341        Vihollinen.Position = paikka;
342
343        PhysicsObject LisaaVihollinen = new PhysicsObject(RUUDUN_KOKO / 2, RUUDUN_KOKO / 2);
344        Add(Vihollinen);
345
346        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
347        labyrinttiAivot.Speed = 200.0;
348        if (nopeusHax)
349        {
350            labyrinttiAivot.Speed = 600.0;
351        }
352        aivolista.Add(labyrinttiAivot);
353        labyrinttiAivot.LabyrinthWallTag = "seina";
354
355        Vihollinen.Brain = labyrinttiAivot;
356
357        Vihollinen.Tag = "Vihollinen";
358
359        Add(Vihollinen);
360
361
362    }
363
364
365
366
367    void Liikuta(PhysicsObject hahmo, double nopeus)
368    {
369        Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle);
370        hahmo.Push(pelaajanSuunta);
371        //hahmo.Push(suunta);
372        // hahmo.Angle = suunta.Angle;
373    }
374    //void Liikuta2(PhysicsObject hahmo)
375
376    void Kaanna(PhysicsObject hahmo, double suunta)
377    {
378        hahmo.Angle += Angle.FromDegrees(suunta);
379    }
380
381
382    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
383    {
384        nykyinenAse = "tahti";
385
386        MessageDisplay.Add("you pick special item");
387
388        pisteLaskuri.Value += 10;
389
390        erikoisvoima.Play();
391
392        tahti.Destroy();
393
394    }
395
396    void TormaaItem2(PhysicsObject hahmo, PhysicsObject Item2)
397    {
398        MessageDisplay.Add("you pick special item");
399        nykyinenAse = "item2";
400        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
401        pisteLaskuri.Value += 10;
402        erikoisvoima.Play();
403        Item2.Destroy();
404
405    }
406
407    void TormaaLaser(PhysicsObject hahmo, PhysicsObject Item2)
408    {
409        nykyinenAse = "laser";
410        MessageDisplay.Add("you pick special item");
411        pisteLaskuri.Value += 10;
412        erikoisvoima.Play();
413        Item2.Destroy();
414    }
415
416    void TormaaItem4(PhysicsObject hahmo, PhysicsObject Item4)
417    {
418        MessageDisplay.Add("you pick special item");
419        nykyinenAse = "item4";
420        //Timer.SingleShot(30, delegate () { nykyinenAse = "perus"; });
421        pisteLaskuri.Value += 10;
422        erikoisvoima.Play();
423        Item4.Destroy();
424
425    }
426
427    void TormaaydinPommi(PhysicsObject hahmo, PhysicsObject ydinPommi)
428    {
429        MessageDisplay.Add("you pick super item");
430        nykyinenAse = "ydinPommi";
431        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
432        pisteLaskuri.Value += 1000;
433        superVoima.Play();
434        ydinPommi.Destroy();
435
436    }
437
438    void LisaaSpawn(Vector paikka, double leveys, double korkeus)
439    {
440        spawnit.Add(paikka);
441    }
442    void esinespawn()
443    {
444
445        // 5.0 30.0
446        Timer ajastin = new Timer();
447        ajastin.Interval = RandomGen.NextDouble(5.0, 5.0);
448        ajastin.Timeout += delegate
449        {
450            Vector arvottupaikka = spawnit[RandomGen.NextInt(spawnit.Count - 1)];
451
452            int luku = RandomGen.NextInt(0, 103);
453
454            if (luku < 25)
455            {
456                LisaaTahti(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
457            }
458            else if (luku < 50)
459            {
460                LisaaItem2(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
461            }
462            else if (luku < 75)
463            {
464                LisaaLaser(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
465            }
466            else if (luku < 100)
467            {
468                LisaaItem4(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
469            }
470
471            else if (luku < 103)
472            {
473                LisaaYdinPommi(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
474            }
475        };
476        ajastin.Start();
477
478    }
479
480    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
481    {
482        if (kohde.Tag.Equals("Vihollinen"))
483        {
484            if (!ammus.Tag.Equals("plasma"))
485                ammus.Destroy();
486            kohde.Destroy();
487
488            pisteLaskuri.Value += 100;
489        }
490    }
491
492    void AmmuAseella()
493    {
494        if (nykyinenAse == "tahti")
495        {
496            HeitaKranaatti(pelaaja1, 250);
497            nykyinenAse = "perus";
498            return;
499        }
500
501        if (minigun)
502        {
503            HeitaKranaatti(pelaaja1, 250);
504            return;
505        }
506
507        if (nykyinenAse == "ydinPommi")
508        {
509            HeitaKranaatti(pelaaja1, 3000);
510            ydinPommiAani.Play();
511            nykyinenAse = "perus";
512            return;
513        }
514
515        Vector ammuksenKoko = new Vector(10, 10);
516        Color ammuksenVari = Color.Gray;
517        pelaajan1Ase.FireRate = 1;
518
519        if (nykyinenAse == "item2")
520        {
521            pelaajan1Ase.FireRate = 50;
522        }
523
524       
525
526        if (nykyinenAse == "item4")
527        {
528            pelaajan1Ase.FireRate = 50;
529            ammuksenVari = Color.DarkGreen;
530            ammuksenKoko = new Vector(100, 100);
531            pallo.Play();
532
533        }
534
535        if (nykyinenAse == "laser")
536        {
537            ammuksenVari = Color.Red;
538            pelaajan1Ase.FireRate = 100;
539            ammuksenKoko = new Vector(40, 2);
540
541            if (!laserAani.IsPlaying)
542            {
543                laserAani.Play();
544            }
545            Timer.SingleShot(1, delegate () { nykyinenAse = "perus"; });
546        }
547
548
549
550
551
552        PhysicsObject ammus = pelaajan1Ase.Shoot();
553        if (ammus != null)
554        {
555            ammus.Size = ammuksenKoko;
556            ammus.Image = null;
557            ammus.Shape = Shape.Circle;
558            ammus.Color = ammuksenVari;
559
560            ammus.MaximumLifetime = TimeSpan.FromSeconds(3.0);
561
562            if (nykyinenAse == "item4")
563            {
564                ammus.MaximumLifetime = TimeSpan.FromSeconds(30.0);
565                ammus.IgnoresCollisionResponse = true;
566                ammus.Image = plasmakuva;
567                ammus.MaxVelocity = 100;
568                ammus.Tag = "plasma";
569                nykyinenAse = "perus";
570            }
571        }
572    }
573
574    void LisaaVihollisSpawn(Vector paikka, double leveys, double korkeus)
575    {
576        vihuspawnit.Add(paikka);
577    }
578
579    //void TormaaViholliseen(PhysicsObject ammus, PhysicsObject Sihollinen)
580
581    void vihollisspawn()
582    {
583
584        //1.0 3.0
585
586        vihuajastin = new Timer();
587        vihuajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
588        vihuajastin.Timeout += delegate
589        {
590            Vector arvottupaikka = vihuspawnit[RandomGen.NextInt(vihuspawnit.Count - 1)];
591            LisaaVihollinen(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
592
593        };
594        vihuajastin.Start();
595
596    }
597
598    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject tahti)
599
600    {
601        hahmo.Destroy();
602        NOPEUS = 800;
603        topLista.EnterAndShow(pisteLaskuri.Value);
604        topLista.HighScoreWindow.Closed += delegate (Window a) { Begin(); };
605
606        // Timer.SingleShot(3.0,Begin);
607
608        poistaHAX();
609    }
610
611    void HeitaKranaatti(PhysicsObject pelaaja, double radius)
612    {
613        Grenade kranaatti = new Grenade(4.0);
614        kranaatti.Explosion.MaxRadius = radius;
615        pelaaja.Throw(kranaatti, Angle.FromDegrees(30), 30000);
616        kranaatti.Explosion.AddShockwaveHandler("Vihollinen", KranaattiOsui);
617
618        Keyboard.Clear();
619        LisaaNappaimet();
620    }
621
622    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
623    {
624
625        rajahdyksenKohde.Destroy();
626        pisteLaskuri.Value += 100;
627    }
628
629    void LisaaYdinPommi(Vector paikka, double leveys, double korkeus)
630
631    {
632        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
633        pommi.IgnoresCollisionResponse = true;
634        pommi.Position = paikka;
635        pommi.Image = YdinPommikuva;
636        pommi.Tag = "ydinPommi";
637        Add(pommi);
638    }
639
640    void lisaaHAX()
641
642    {
643
644        InputWindow kysymysIkkuna = new InputWindow("HAX");
645        kysymysIkkuna.TextEntered += ProcessInput;
646        Add(kysymysIkkuna);
647
648    }
649
650    void poistaHAX()
651
652    {
653        minigun = false;
654        parina = false;
655        nopeusHax = false;
656        NOPEUS = 800;
657
658        Image arvottukuva = RandomGen.SelectOne<Image>(pelaajankuvat);
659        pelaaja1.Image = arvottukuva;
660
661        parina = false;
662        Camera.Reset();
663        Camera.Follow(pelaaja1);
664        Camera.ZoomFactor = 1.2;
665        Camera.StayInLevel = true;
666        Level.Background.Color = Color.White;
667        MediaPlayer.Stop();
668        vihuajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
669        if (pistehaxajastin != null)
670        {
671            pistehaxajastin.Stop();
672        }
673        foreach (LabyrinthWandererBrain aivot in aivolista)
674        {
675            aivot.Speed = 200;
676        }
677    }
678
679    void Aloitus()
680
681    {
682        pelaaja1.Position = aloituspaikka;     
683    }
684
685
686
687
688}
Note: See TracBrowser for help on using the repository browser.