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

Revision 8240, 18.6 KB checked in by nilamijy, 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 == "speed mlg")
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        if (vastaus == "mlg mode")
164        {
165            parina = true;
166            Camera.Reset();
167            Camera.ZoomFactor = 1.2;
168            Camera.StayInLevel = true;
169            MediaPlayer.Play("musa");
170        }
171
172        if (vastaus == "hullu")
173        {
174            nopeusHax = true;
175            vihuajastin.Interval = RandomGen.NextDouble(0.1, 0.1);
176            foreach (LabyrinthWandererBrain aivo in aivolista) 
177            {
178                aivo.Speed = 600;
179            }
180        }
181
182        if (vastaus == "piste hax")
183        {
184            pistehaxajastin = new Timer();
185            pistehaxajastin.Interval = 0.01;
186            pistehaxajastin.Timeout += delegate { pisteLaskuri.Value += 666; };
187            pistehaxajastin.Start();
188        }
189    }
190
191    protected override void Update (Time time)
192    {
193        if (parina)
194        {
195            Level.Background.Color = varit[kaytetty];
196
197            Camera.Position = pelaaja1.Position + new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-10, 10));
198
199            if (kaytetty + 1 >= varit.Length)
200            {
201                kaytetty = 0;
202            }
203            else
204            {
205                kaytetty++;
206            }
207        }
208
209        base.Update(time);
210    }
211
212
213
214    void LuoPistelaskuri()
215    {
216        pisteLaskuri = new IntMeter(0);
217
218        Label pisteNaytto = new Label();
219        pisteNaytto.X = Screen.Left + 100;
220        pisteNaytto.Y = Screen.Top - 100;
221        pisteNaytto.TextColor = Color.Black;
222        pisteNaytto.Color = Color.White;
223
224        pisteNaytto.BindTo(pisteLaskuri);
225        Add(pisteNaytto);
226    }
227
228    void LisaaTaso(Vector paikka, double leveys, double korkeus)
229    {
230        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
231        taso.Position = paikka;
232        taso.Color = Color.Black;
233        taso.Tag = "seina";
234        Add(taso);
235
236    }
237
238    void LisaaTahti(Vector paikka, double leveys, double korkeus)
239    {
240        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
241        tahti.IgnoresCollisionResponse = true;
242        tahti.Position = paikka;
243        tahti.Image = tahtiKuva;
244        tahti.Tag = "tahti";
245        Add(tahti);
246    }
247
248    void LisaaItem2(Vector paikka, double leveys, double korkeus)
249    {
250        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
251        tahti.IgnoresCollisionResponse = true;
252        tahti.Position = paikka;
253        tahti.Image = item2;
254        tahti.Tag = "item2";
255        Add(tahti);
256    }
257
258    void LisaaLaser(Vector paikka, double leveys, double korkeus)
259    {
260        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
261        tahti.IgnoresCollisionResponse = true;
262        tahti.Position = paikka;
263        tahti.Image = Laserkuva;
264        tahti.Tag = "laser";
265        Add(tahti);
266    }
267
268    void LisaaItem4(Vector paikka, double leveys, double korkeus)
269    {
270        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
271        tahti.IgnoresCollisionResponse = true;
272        tahti.Position = paikka;
273        tahti.Image = plasmakuva;
274        tahti.Tag = "item4";
275        Add(tahti);
276    }
277
278
279    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
280    {
281        pelaaja1 = new PhysicsObject(leveys, korkeus);
282        pelaaja1.Position = paikka;
283        aloituspaikka = paikka;
284        pelaaja1.Mass = 4.0;
285        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
286        AddCollisionHandler(pelaaja1, "item2", TormaaItem2);
287        AddCollisionHandler(pelaaja1, "laser", TormaaLaser);
288        AddCollisionHandler(pelaaja1, "item4", TormaaItem4);
289        AddCollisionHandler(pelaaja1, "ydinPommi", TormaaydinPommi);
290        Image arvottukuva = RandomGen.SelectOne<Image>(pelaajankuvat);
291        //pelaaja1.Color = vari;
292        pelaaja1.CanRotate = false;
293        pelaaja1.Image = arvottukuva;
294        pelaaja1.LinearDamping = 0.975;
295
296        AddCollisionHandler(pelaaja1, "Vihollinen", TormaaViholliseen);
297
298
299        pelaajan1Ase = new AssaultRifle(0, 001);
300        pelaajan1Ase.FireRate = 0.5;
301        pelaajan1Ase.ProjectileCollision = AmmusOsui;
302        pelaaja1.Add(pelaajan1Ase);
303
304        Add(pelaaja1);
305    }
306
307    void LisaaNappaimet()
308    {
309        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
310        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
311
312        Keyboard.Listen(Key.Left, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, pyoriminenNopeus);
313        Keyboard.Listen(Key.Up, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, NOPEUS);
314        Keyboard.Listen(Key.Down, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -NOPEUS);
315        Keyboard.Listen(Key.Right, ButtonState.Down, Kaanna, "Liikkuu vasemmalle", pelaaja1, -pyoriminenNopeus);
316
317        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
318        Keyboard.Listen(Key.Z, ButtonState.Down, lisaaHAX, "HAX");
319        Keyboard.Listen(Key.X, ButtonState.Down, poistaHAX, "HAX off");
320        Keyboard.Listen<PhysicsObject,PhysicsObject>(Key.K, ButtonState.Down, TormaaViholliseen, "kill",pelaaja1,null);
321        Keyboard.Listen(Key.R, ButtonState.Down, Aloitus, "reset");
322
323        /*Keyboard.Listen(Key.Right, ButtonState.Released, () => pelaaja1.Stop(), null);
324        Keyboard.Listen(Key.Left, ButtonState.Released, () => pelaaja1.Stop(), null);
325        Keyboard.Listen(Key.Down, ButtonState.Released, () => pelaaja1.Stop(), null);
326        Keyboard.Listen(Key.Up, ButtonState.Released, () => pelaaja1.Stop(), null);*/
327        //Keyboard.Listen(Key.Up, ButtonState.Down, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
328
329    }
330
331    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
332
333    {
334        Vihollinen = new PhysicsObject(40.0, 40.0, Shape.Diamond);
335
336        Vihollinen.Color = Color.Red;
337
338        const int RUUDUN_KOKO = 40;
339
340        Vihollinen.Position = paikka;
341
342        PhysicsObject LisaaVihollinen = new PhysicsObject(RUUDUN_KOKO / 2, RUUDUN_KOKO / 2);
343        Add(Vihollinen);
344
345        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
346        labyrinttiAivot.Speed = 200.0;
347        if (nopeusHax)
348        {
349            labyrinttiAivot.Speed = 600.0;
350        }
351        aivolista.Add(labyrinttiAivot);
352        labyrinttiAivot.LabyrinthWallTag = "seina";
353
354        Vihollinen.Brain = labyrinttiAivot;
355
356        Vihollinen.Tag = "Vihollinen";
357
358        Add(Vihollinen);
359
360
361    }
362
363
364
365
366    void Liikuta(PhysicsObject hahmo, double nopeus)
367    {
368        Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle);
369        hahmo.Push(pelaajanSuunta);
370        //hahmo.Push(suunta);
371        // hahmo.Angle = suunta.Angle;
372    }
373    //void Liikuta2(PhysicsObject hahmo)
374
375    void Kaanna(PhysicsObject hahmo, double suunta)
376    {
377        hahmo.Angle += Angle.FromDegrees(suunta);
378    }
379
380
381    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
382    {
383        nykyinenAse = "tahti";
384
385        MessageDisplay.Add("you pick special item");
386
387        pisteLaskuri.Value += 10;
388
389        erikoisvoima.Play();
390
391        tahti.Destroy();
392
393    }
394
395    void TormaaItem2(PhysicsObject hahmo, PhysicsObject Item2)
396    {
397        MessageDisplay.Add("you pick special item");
398        nykyinenAse = "item2";
399        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
400        pisteLaskuri.Value += 10;
401        erikoisvoima.Play();
402        Item2.Destroy();
403
404    }
405
406    void TormaaLaser(PhysicsObject hahmo, PhysicsObject Item2)
407    {
408        nykyinenAse = "laser";
409        MessageDisplay.Add("you pick special item");
410        pisteLaskuri.Value += 10;
411        erikoisvoima.Play();
412        Item2.Destroy();
413    }
414
415    void TormaaItem4(PhysicsObject hahmo, PhysicsObject Item4)
416    {
417        MessageDisplay.Add("you pick special item");
418        nykyinenAse = "item4";
419        //Timer.SingleShot(30, delegate () { nykyinenAse = "perus"; });
420        pisteLaskuri.Value += 10;
421        erikoisvoima.Play();
422        Item4.Destroy();
423
424    }
425
426    void TormaaydinPommi(PhysicsObject hahmo, PhysicsObject ydinPommi)
427    {
428        MessageDisplay.Add("you pick super item");
429        nykyinenAse = "ydinPommi";
430        Timer.SingleShot(10, delegate () { nykyinenAse = "perus"; });
431        pisteLaskuri.Value += 1000;
432        superVoima.Play();
433        ydinPommi.Destroy();
434
435    }
436
437    void LisaaSpawn(Vector paikka, double leveys, double korkeus)
438    {
439        spawnit.Add(paikka);
440    }
441    void esinespawn()
442    {
443
444        // 5.0 30.0
445        Timer ajastin = new Timer();
446        ajastin.Interval = RandomGen.NextDouble(5.0, 5.0);
447        ajastin.Timeout += delegate
448        {
449            Vector arvottupaikka = spawnit[RandomGen.NextInt(spawnit.Count - 1)];
450
451            int luku = RandomGen.NextInt(0, 103);
452
453            if (luku < 25)
454            {
455                LisaaTahti(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
456            }
457            else if (luku < 50)
458            {
459                LisaaItem2(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
460            }
461            else if (luku < 75)
462            {
463                LisaaLaser(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
464            }
465            else if (luku < 100)
466            {
467                LisaaItem4(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
468            }
469
470            else if (luku < 103)
471            {
472                LisaaYdinPommi(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
473            }
474        };
475        ajastin.Start();
476
477    }
478
479    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
480    {
481        if (kohde.Tag.Equals("Vihollinen"))
482        {
483            if (!ammus.Tag.Equals("plasma"))
484                ammus.Destroy();
485            kohde.Destroy();
486
487            pisteLaskuri.Value += 100;
488        }
489    }
490
491    void AmmuAseella()
492    {
493        if (nykyinenAse == "tahti")
494        {
495            HeitaKranaatti(pelaaja1, 250);
496            nykyinenAse = "perus";
497            return;
498        }
499
500        if (minigun)
501        {
502            HeitaKranaatti(pelaaja1, 250);
503            return;
504        }
505
506        if (nykyinenAse == "ydinPommi")
507        {
508            HeitaKranaatti(pelaaja1, 3000);
509            ydinPommiAani.Play();
510            nykyinenAse = "perus";
511            return;
512        }
513
514        Vector ammuksenKoko = new Vector(10, 10);
515        Color ammuksenVari = Color.Gray;
516        pelaajan1Ase.FireRate = 1;
517
518        if (nykyinenAse == "item2")
519        {
520            pelaajan1Ase.FireRate = 50;
521        }
522
523       
524
525        if (nykyinenAse == "item4")
526        {
527            pelaajan1Ase.FireRate = 50;
528            ammuksenVari = Color.DarkGreen;
529            ammuksenKoko = new Vector(100, 100);
530            pallo.Play();
531
532        }
533
534        if (nykyinenAse == "laser")
535        {
536            ammuksenVari = Color.Red;
537            pelaajan1Ase.FireRate = 100;
538            ammuksenKoko = new Vector(40, 2);
539
540            if (!laserAani.IsPlaying)
541            {
542                laserAani.Play();
543            }
544            Timer.SingleShot(1, delegate () { nykyinenAse = "perus"; });
545        }
546
547
548
549
550
551        PhysicsObject ammus = pelaajan1Ase.Shoot();
552        if (ammus != null)
553        {
554            ammus.Size = ammuksenKoko;
555            ammus.Image = null;
556            ammus.Shape = Shape.Circle;
557            ammus.Color = ammuksenVari;
558
559            ammus.MaximumLifetime = TimeSpan.FromSeconds(3.0);
560
561            if (nykyinenAse == "item4")
562            {
563                ammus.MaximumLifetime = TimeSpan.FromSeconds(30.0);
564                ammus.IgnoresCollisionResponse = true;
565                ammus.Image = plasmakuva;
566                ammus.MaxVelocity = 100;
567                ammus.Tag = "plasma";
568                nykyinenAse = "perus";
569            }
570        }
571    }
572
573    void LisaaVihollisSpawn(Vector paikka, double leveys, double korkeus)
574    {
575        vihuspawnit.Add(paikka);
576    }
577
578    //void TormaaViholliseen(PhysicsObject ammus, PhysicsObject Sihollinen)
579
580    void vihollisspawn()
581    {
582
583        //1.0 3.0
584
585        vihuajastin = new Timer();
586        vihuajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
587        vihuajastin.Timeout += delegate
588        {
589            Vector arvottupaikka = vihuspawnit[RandomGen.NextInt(vihuspawnit.Count - 1)];
590            LisaaVihollinen(arvottupaikka, RUUDUN_KOKO, RUUDUN_KOKO);
591
592        };
593        vihuajastin.Start();
594
595    }
596
597    void TormaaViholliseen(PhysicsObject hahmo, PhysicsObject tahti)
598
599    {
600        hahmo.Destroy();
601        NOPEUS = 800;
602        topLista.EnterAndShow(pisteLaskuri.Value);
603        topLista.HighScoreWindow.Closed += delegate (Window a) { Begin(); };
604
605        // Timer.SingleShot(3.0,Begin);
606
607        poistaHAX();
608    }
609
610    void HeitaKranaatti(PhysicsObject pelaaja, double radius)
611    {
612        Grenade kranaatti = new Grenade(4.0);
613        kranaatti.Explosion.MaxRadius = radius;
614        pelaaja.Throw(kranaatti, Angle.FromDegrees(30), 30000);
615        kranaatti.Explosion.AddShockwaveHandler("Vihollinen", KranaattiOsui);
616
617        Keyboard.Clear();
618        LisaaNappaimet();
619    }
620
621    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
622    {
623
624        rajahdyksenKohde.Destroy();
625        pisteLaskuri.Value += 100;
626    }
627
628    void LisaaYdinPommi(Vector paikka, double leveys, double korkeus)
629
630    {
631        PhysicsObject pommi = PhysicsObject.CreateStaticObject(leveys, korkeus);
632        pommi.IgnoresCollisionResponse = true;
633        pommi.Position = paikka;
634        pommi.Image = YdinPommikuva;
635        pommi.Tag = "ydinPommi";
636        Add(pommi);
637    }
638
639    void lisaaHAX()
640
641    {
642
643        InputWindow kysymysIkkuna = new InputWindow("HAX");
644        kysymysIkkuna.TextEntered += ProcessInput;
645        Add(kysymysIkkuna);
646
647    }
648
649    void poistaHAX()
650
651    {
652        minigun = false;
653        parina = false;
654        nopeusHax = false;
655        NOPEUS = 800;
656
657        Image arvottukuva = RandomGen.SelectOne<Image>(pelaajankuvat);
658        pelaaja1.Image = arvottukuva;
659
660        parina = false;
661        Camera.Reset();
662        Camera.Follow(pelaaja1);
663        Camera.ZoomFactor = 1.2;
664        Camera.StayInLevel = true;
665        Level.Background.Color = Color.White;
666        MediaPlayer.Stop();
667        vihuajastin.Interval = RandomGen.NextDouble(1.0, 3.0);
668        if (pistehaxajastin != null)
669        {
670            pistehaxajastin.Stop();
671        }
672        foreach (LabyrinthWandererBrain aivot in aivolista)
673        {
674            aivot.Speed = 200;
675        }
676    }
677
678    void Aloitus()
679
680    {
681        pelaaja1.Position = aloituspaikka;     
682    }
683
684
685
686
687}
Note: See TracBrowser for help on using the repository browser.