source: 2016/30/SamuelL/jotain/jotain/jotain/jotain.cs @ 10335

Revision 8250, 19.8 KB checked in by jotapoti, 3 years ago (diff)
Line 
1using System;
2using System.Linq;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class jotain : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    AssaultRifle ase1;
17    bool ase1Flipattu = false;
18    bool otettuOsumaa = false;
19    IntMeter helat;
20
21    Image idle = LoadImage("idle");
22    Animation hahmokävely;
23    Animation vihanneskävely;
24    Animation vaihtoanimaatio;
25    Animation BossSaapuu;
26    Image pelaajaputoaa = LoadImage("fall");
27    Image tahtiKuva = LoadImage("tahti");
28    Image aavikkotausta2 = LoadImage("aavikkotausta2");
29    Image kasvi1 = LoadImage("tausta - kasvi 1");
30    Image kasvi2 = LoadImage("tausta - kasvit 2");
31    Image taustaruoho = LoadImage("tausta ruoho");
32    Image tuli = LoadImage("tulikuva");
33    Image Pimeyskuva = LoadImage("pimeys");
34    Image valokuva = LoadImage("valokuva");
35    Image aavikkotausta1 = LoadImage("aavikkotausta");
36    Image Isokivi = LoadImage("kivi2");
37    Image pienikivi = LoadImage("kivi");
38    Image puu = LoadImage("puuu");
39    Image Asekuva = LoadImage("kivääri");
40    Image Tähtäin = LoadImage("tähtäin");
41    Image[] Hirviökuvat = LoadImages("hirviö1", "hirviö2");
42    Image[] vihanneskuvat = LoadImages("vihanneskavely\\vihanneskavely", 1, 9);
43    Image alienpesä = LoadImage("pesä");
44    Image ufomaassa = LoadImage("ufomaa2");
45    Image ufoilma = LoadImage("UFO2");
46    Image Avaruus = LoadImage("Avaruus tausta");
47    Image Laaser = LoadImage("laaser");
48    Image Hammas = LoadImage("vihollisenHammas");
49    Image BossIdle = LoadImage("BossIdle");
50    Image BossIdle2 = LoadImage("BossIdle");
51
52    int kenttänumero = 1;
53
54    Animation kävely;
55
56    SoundEffect maaliAani = LoadSoundEffect("maali");
57    SoundEffect TuliPalo = LoadSoundEffect("tuli");
58    SoundEffect pistolshot = LoadSoundEffect("PistolShot");
59    SoundEffect spooky = LoadSoundEffect("spooky");
60    SoundEffect alien = LoadSoundEffect("aline");
61    SoundEffect liekinheitin = LoadSoundEffect("liekinheitin");
62
63    public override void Begin()
64    {
65
66        AloitaKentta();
67
68
69
70    }
71
72    void LuoKentta()
73    {
74        ase1Flipattu = false;
75        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttänumero);
76        kentta.SetTileMethod('#', LisaaTaso);
77        kentta.SetTileMethod('*', LisaaTahti);
78        kentta.SetTileMethod('N', LisaaPelaaja);
79        kentta.SetTileMethod('U', Lisaaufo, ufomaassa, -1);
80        //kentta.SetTileMethod('K', LisaaKasvi, kasvi2, -1);
81        //kentta.SetTileMethod('r', Lisaaruoho, taustaruoho, 1);
82        kentta.SetTileMethod('T', Lisaatuli);
83        kentta.SetTileMethod('V', LisaaVaihto);
84        kentta.SetTileMethod('O', Lisaakivi, Isokivi, 1);
85        kentta.SetTileMethod('o', Lisaakivi, pienikivi, -1);
86        kentta.SetTileMethod('p', Lisaapuu, puu, 1);
87        kentta.SetTileMethod('L', Lisaapesä);
88        kentta.SetTileMethod('v', lisäävihannes);
89        kentta.SetTileMethod('F', lisaaUfo);
90        kentta.SetTileMethod('L', lisaalaaser);
91        kentta.SetTileMethod('B', lisaaBoss);
92        //kentta.SetTileMethod('B', LisaaTausta);
93        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
94        kentta.Optimize('#');
95        if (kenttänumero == 1)
96        {
97            //Level.Background.Image = aavikkotausta2;
98            GameObject tausta = new GameObject(Level.Width, Level.Height / 2);
99            tausta.Y += tausta.Height / 2;
100            tausta.Image = aavikkotausta2;
101            Add(tausta, -3);
102            Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
103
104            GameObject tausta2 = new GameObject(Level.Width, Level.Height / 2);
105            tausta2.Image = aavikkotausta1;
106            tausta2.Y -= tausta2.Height / 2;
107            Add(tausta2, -2);
108
109        }
110        else if (kenttänumero == 2)
111        {
112            Level.Background.Image = Avaruus;
113        }
114        Level.Background.FitToLevel();
115
116        //Level.CreateBorders();
117        Level.CreateHorizontalBorders(0.0, false, Color.Black);
118    }
119
120    void LisaaTaso(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        taso.Position = paikka;
124        taso.IsVisible = true;
125        taso.Tag = "taso";
126        Add(taso);
127        taso.Color = Color.DarkYellow;
128    }
129    void Lisaaufo(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
130    {
131        GameObject ufomaassa = new GameObject(leveys * 4.5, korkeus * 4);
132        ufomaassa.Position = paikka + new Vector(0, 0);
133        Add(ufomaassa, taso);
134        ufomaassa.Image = kuva;
135
136        //GameObject valo = new GameObject(100, 100);
137        //valo.Image = valokuva;
138        //valo.Position = paikka;
139        //valo.Y += 50;
140        //Add(valo, 3);
141    }
142
143    void Lisaaruoho(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
144    {
145        //GameObject ruoho = new GameObject(leveys, korkeus);
146        //ruoho.Position = paikka + new Vector();
147        //Add(ruoho, taso);
148        //ruoho.Image = kuva;
149
150    }
151
152    void LisaaTahti(Vector paikka, double leveys, double korkeus)
153    {
154        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
155        tahti.IgnoresCollisionResponse = true;
156        tahti.Position = paikka;
157        tahti.Image = tahtiKuva;
158        tahti.Tag = "tahti";
159        Add(tahti);
160    }
161    void OtaOsumaa(PhysicsObject a, PhysicsObject b)
162    {
163        if (!otettuOsumaa)
164        {
165            helat.Value--;
166            otettuOsumaa = true;
167        }
168        Timer.SingleShot(3, delegate { otettuOsumaa = false; });
169    }
170
171    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
172    {
173        pelaaja1 = new PlatformCharacter(leveys * 1.5, korkeus * 1.7);
174        pelaaja1.Position = paikka;
175        pelaaja1.Mass = 4.0;
176        pelaaja1.Image = idle;
177        pelaaja1.Tag = "pelaaja1";
178        pelaaja1.CollisionIgnoreGroup = 3;
179        pelaaja1.AnimWalk = hahmokävely;
180        pelaaja1.AnimIdle = new Animation(idle);
181        pelaaja1.AnimFall = new Animation(pelaajaputoaa);
182        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
183        Add(pelaaja1);
184        AddCollisionHandler(pelaaja1, "vaihto", tormaavaihtoon);
185        AddCollisionHandler(pelaaja1, "hirviö", OtaOsumaa);
186        AddCollisionHandler(pelaaja1, "juures", OtaOsumaa);
187        //AddCollisionHandler(pelaaja1) "hammas", otaOsumaa);
188
189        helat = new IntMeter(5, 0, 5);
190        helat.LowerLimit += delegate
191        {
192            kenttänumero = 1;
193            AloitaKentta();
194        };
195
196        ProgressBar elamaPalkki = new ProgressBar(50, 10);
197        elamaPalkki.Y = 50;
198        elamaPalkki.BindTo(helat);
199        pelaaja1.Add(elamaPalkki);
200
201
202
203        Timer ajastin = new Timer();
204        ajastin.Interval = 0.05;
205        ajastin.Timeout += delegate
206        {
207
208        };
209        ajastin.Start();
210
211        ase1 = new AssaultRifle(Asekuva.Width, Asekuva.Height);
212        ase1.Image = Asekuva;
213        ase1.Size *= 0.7;
214        ase1.FireRate = 7.0;
215        ase1.Tag = "ase";
216        ase1.AttackSound = pistolshot;
217
218        Add(ase1);
219    }
220
221    void LisaaNappaimet()
222    {
223        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
224        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
225
226        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
227        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
228        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
229        Keyboard.Listen(Key.R, ButtonState.Pressed, vaihto, "pelaaja vaihtaa asetta");
230        Mouse.Listen(MouseButton.Left, ButtonState.Down, ammuaseella, "Liikkuu vasemmalle");
231
232
233        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
234
235        ControllerOne.Listen(Button.A, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
236        ControllerOne.Listen(Button.B, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
237        ControllerOne.Listen(Button.BigButton, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
238
239        Mouse.IsCursorVisible = false;
240
241
242
243        GameObject hiiri = new GameObject(Tähtäin);
244        hiiri.Size *= 0.1;
245        Add(hiiri, 3);
246
247        Timer hiiriAjastin = new Timer();
248        hiiriAjastin.Interval = 0.01;
249        hiiriAjastin.Timeout += delegate
250        {
251            hiiri.Position = Mouse.PositionOnWorld;
252        };
253        hiiriAjastin.Start();
254
255        Mouse.ListenMovement(0.0, KaannetaanAsetta, "");
256
257        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
258    }
259    void KaannetaanAsetta(AnalogState hiirenTila)
260    {
261        Vector suunta = Mouse.PositionOnWorld - pelaaja1.Position;
262        ase1.Position = pelaaja1.Position + suunta.Normalize() * 30;
263        ase1.Angle = suunta.Angle;
264
265        double kulma = suunta.Angle.Degrees;
266
267        if (kulma < 90 && kulma > -90)
268        {
269            if (ase1Flipattu)
270            {
271                ase1.FlipImage();
272                ase1Flipattu = false;
273            }
274        }
275        else
276        {
277            if (!ase1Flipattu)
278            {
279                ase1.FlipImage();
280                ase1Flipattu = true;
281            }
282        }
283
284    }
285
286    void Liikuta(PlatformCharacter hahmo, double nopeus)
287    {
288        hahmo.Walk(nopeus);
289    }
290
291    void Hyppaa(PlatformCharacter hahmo, double nopeus)
292    {
293        hahmo.Jump(nopeus);
294    }
295
296    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
297    {
298        maaliAani.Play();
299        MessageDisplay.Add("Keräsit tähden!");
300        tahti.Destroy();
301    }
302
303    void Lisaatuli(Vector paikka, double leveys, double korkeus)
304    {
305
306        Flame liekki = new Flame(tuli);
307        liekki.MinLifetime = 0.1;
308        liekki.MaxLifetime = 0.5;
309        liekki.MinScale = 10;
310        liekki.MaxScale = 30;
311        liekki.Position = paikka;
312        Add(liekki);
313
314        Timer ajastin = new Timer();
315        ajastin.Interval = 0.05;
316        ajastin.Timeout += delegate
317        {
318            liekki.Position = paikka + RandomGen.NextVector(0, 30);
319
320            double e = Vector.Distance(liekki.Position, pelaaja1.Position);
321            double voimakkuus = 1.0 - (e / 900);
322            if (voimakkuus < 0) voimakkuus = 0;
323            MediaPlayer.Volume = voimakkuus;
324        };
325        ajastin.Start();
326    }
327
328    void LisaaVaihto(Vector paikka, double leveys, double korkeus)
329    {
330        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
331        taso.Position = paikka;
332        taso.IsVisible = false;
333        Add(taso);
334        taso.Tag = "vaihto";
335    }
336    void VaihdaKenttaa()
337    {
338        kenttänumero++;
339        AloitaKentta();
340    }
341
342    void AloitaKentta()
343    {
344        ClearAll();
345        kävely = LoadAnimation("pelaaja");
346        Gravity = new Vector(0, -1000);
347        hahmokävely = LoadAnimation("hahmoanimaatio");
348        vaihtoanimaatio = LoadAnimation("Kivaarisisaan");
349        vihanneskävely = LoadAnimation("vihanneskavely");
350        BossSaapuu = LoadAnimation("Boss");
351        vaihtoanimaatio.Played += delegate ()
352        {
353            ase1.Animation = null;
354            Mouse.Enable(MouseButton.Left);
355        };
356
357        SmoothTextures = false;
358
359        LuoKentta();
360        LisaaNappaimet();
361
362        Camera.Follow(pelaaja1);
363        Camera.ZoomFactor = 1.2;
364        Camera.StayInLevel = true;
365
366        if (kenttänumero == 1)
367        {
368            MediaPlayer.Play("tuli");
369            MediaPlayer.IsRepeating = true;
370            MediaPlayer.Volume = 1.0;
371        }
372        else if (kenttänumero == 2)
373        {
374            MediaPlayer.Stop();
375            MediaPlayer.Play("spooky");
376            MediaPlayer.IsRepeating = true;
377        }
378    }
379    void tormaavaihtoon(PhysicsObject pelaaja, PhysicsObject vaihto)
380    {
381        VaihdaKenttaa();
382
383
384
385    }
386    void Lisaakivi(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
387    {
388        GameObject Isokivi = new GameObject(leveys * 1, korkeus * 1);
389        Isokivi.Position = paikka + new Vector(0, 0);
390        Add(Isokivi, taso);
391        Isokivi.Image = kuva;
392
393    }
394    void Lisaapuu(Vector paikka, double leveys, double korkeus, Image kuva, int taso)
395    {
396        GameObject puu = new GameObject(leveys * 3, korkeus * 3);
397        puu.Position = paikka + new Vector(0, 0);
398        Add(puu, taso);
399        puu.Image = kuva;
400
401
402
403    }
404    void ammuaseella()
405    {
406        PhysicsObject ammus = ase1.Shoot();
407        Vector ampumispaikka = ase1.AbsolutePosition;
408
409        if (ammus != null)
410        {
411            ammus.Size *= 1.0;
412            ammus.Image = null;
413            ammus.Color = Color.Black;
414            ammus.Shape = Shape.Rectangle;
415            ammus.Position += ase1.AbsoluteAngle.GetVector() * 20;
416            ammus.MaximumLifetime = TimeSpan.FromSeconds(5);
417            ammus.Tag = "ammus";
418
419            Timer ajastin = new Timer();
420            ajastin.Interval = 0.01;
421            ajastin.Timeout += delegate
422            {
423                GameObject vana = new GameObject(ammus.Width * 1.7, ammus.Height * 0.4);
424                vana.Angle = (ammus.Position - ampumispaikka).Angle;
425                vana.Color = Color.Black; //new Color(0, 0, 0, 128);
426                vana.Position = ammus.Position;
427                vana.FadeColorTo(Color.Transparent, 0.5);
428                vana.LifetimeLeft = TimeSpan.FromSeconds(0.5);
429                Add(vana);
430            };
431            ajastin.Start();
432
433            AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b)
434            {
435                ammus.Destroy();
436                ajastin.Stop();
437            });
438        }
439    }
440    void Lisaapesä(Vector paikka, double leveys, double korkeus)
441    {
442        PhysicsObject pesä = PhysicsObject.CreateStaticObject(leveys * 2, korkeus * 1.5);
443        pesä.Position = paikka;
444        pesä.IsVisible = true;
445        pesä.Y -= korkeus * 0.2;
446        pesä.Tag = "pesä";
447        pesä.IgnoresCollisionResponse = true;
448        Add(pesä);
449        pesä.Color = Color.Emerald;
450        pesä.Image = alienpesä;
451
452        Timer ajastin = new Timer();
453        ajastin.Interval = 8;
454        ajastin.Timeout += delegate
455        {
456            Lisäähirviö(paikka, leveys, korkeus);
457        };
458        ajastin.Start();
459
460        IntMeter elämät = new IntMeter(12);
461        AddCollisionHandler(pesä, "ammus", delegate (PhysicsObject a, PhysicsObject b)
462        {
463            elämät.Value--;
464        });
465        elämät.LowerLimit += delegate
466        {
467            pesä.Destroy();
468            ajastin.Stop();
469            LisaaEfekti(pesä.Position);
470        };
471    }
472
473    void Lisäähirviö(Vector paikka, double leveys, double korkeus)
474    {
475        PhysicsObject hirviö = new PhysicsObject(leveys, korkeus);
476        hirviö.Animation = new Animation(Hirviökuvat);
477        hirviö.Animation.Start();
478        hirviö.Position = paikka;
479        hirviö.CanRotate = false;
480        hirviö.Tag = "hirviö";
481        Add(hirviö);
482
483        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(100);
484        satunnaisAivot.WanderRadius = 200;
485        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja1");
486        seuraajanAivot.Speed = 80;                 // Millä nopeudella kohdetta seurataan
487        seuraajanAivot.DistanceFar = 270;           // Etäisyys jolla aletaan seurata kohdetta
488        seuraajanAivot.FarBrain = satunnaisAivot;
489        hirviö.Brain = seuraajanAivot;
490
491        IntMeter elämät = new IntMeter(3);
492        AddCollisionHandler(hirviö, "ammus", delegate (PhysicsObject a, PhysicsObject b)
493        {
494            elämät.Value--;
495        });
496        elämät.LowerLimit += delegate
497        {
498            hirviö.Destroy();
499            LisaaEfekti(hirviö.Position);
500            MediaPlayer.Play("alien");
501            MediaPlayer.IsRepeating = false;
502        };
503    }
504
505    void LisaaEfekti(Vector paikka)
506    {
507        for (int i = 0; i < 10; i++)
508        {
509            PhysicsObject pala = new PhysicsObject(10, 10);
510            //pala.Image = ...
511            pala.Color = Color.DarkGreen;
512            pala.FadeColorTo(Color.Transparent, 1.0);
513            pala.LifetimeLeft = TimeSpan.FromSeconds(1.0);
514            pala.CollisionIgnoreGroup = 3;
515            pala.Position = paikka;
516            pala.Hit(RandomGen.NextVector(50, 200));
517            Add(pala);
518        }
519    }
520
521    void LisaaEfecti2(Vector juures)
522    {
523        for (int i = 0; i < 10; i++)
524        {
525            PhysicsObject pala = new PhysicsObject(10, 10);
526            pala.Color = Color.Ruby;
527            pala.FadeColorTo(Color.Transparent, 1.0);
528            pala.LifetimeLeft = TimeSpan.FromSeconds(1.0);
529            pala.CollisionIgnoreGroup = 3;
530            pala.Position = juures;
531            pala.Hit(RandomGen.NextVector(50, 200));
532            Add(pala);
533        }
534
535    }
536
537    void vaihto()
538    {
539        Mouse.Disable(MouseButton.Left);
540        ase1.Animation = vaihtoanimaatio;
541        ase1.Animation.Start();
542
543
544
545
546    }
547
548    void lisäävihannes(Vector juures, double leveys, double korkeus)
549    {
550        PlatformCharacter vihannes = new PlatformCharacter(leveys, korkeus);
551        vihannes.Animation = new Animation(vihanneskuvat.Reverse().ToArray());
552        vihannes.CanRotate = false;
553        vihannes.Tag = "juures";
554        vihannes.Animation = Animation.Mirror(vihannes.Animation);
555        vihannes.Animation.Start();
556        Add(vihannes);
557        vihannes.Position = juures;
558
559        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
560        tasoAivot.Speed = 100;
561
562        vihannes.Brain = tasoAivot;
563
564
565
566        IntMeter elämät = new IntMeter(8);
567        AddCollisionHandler(vihannes, "ammus", delegate (PhysicsObject a, PhysicsObject b)
568
569        {
570            elämät.Value--;
571        });
572        elämät.LowerLimit += delegate
573        {
574            vihannes.Destroy();
575            LisaaEfecti2(vihannes.Position);
576        };
577    }
578    void lisaalaaser(Vector juures, double leveys, double korkeus)
579    {
580
581        GameObject laaser = new GameObject(0, 0);
582
583    }
584
585    void lisaaUfo(Vector siellä, double leveys, double korkeus)
586    {
587        PhysicsObject ufo = new PhysicsObject(leveys, korkeus);
588        ufo.Position = siellä;
589        ufo.Image = ufoilma;
590        ufo.Tag = "UFO2";
591        Add(ufo);
592        ufo.Velocity = new Vector(-400, 0);
593        Camera.Follow(ufo);
594    }
595    void lisaaBoss(Vector siinä, double leveys, double korkeus)
596    {
597        PhysicsObject boss = new PhysicsObject(Window.Width, korkeus * 15);
598        boss.Position = siinä;
599        boss.Image = BossIdle;
600        Add(boss);
601        boss.MakeStatic();
602
603        LuoHammas(siinä, leveys * 3, korkeus * 4,275,-150,false);
604        LuoHammas(siinä, leveys * 4, korkeus * 5.5,590,-100,false);
605        LuoHammas(siinä, leveys * 3, korkeus * 4,-275,-150,true);
606        LuoHammas(siinä, leveys * 4, korkeus * 5.5,-590,-100,true);
607   
608
609    }
610    void LuoHammas(Vector siinä,double leveys,double korkeus,double X , double Y,bool flip)
611       {
612        PhysicsObject hammas = new PhysicsObject(leveys, korkeus);
613        hammas.Position = siinä;
614        hammas.Image = Hammas;
615        Add(hammas);
616        hammas.IgnoresGravity = true;
617        hammas.X += X;
618        hammas.Y += Y;
619        if (flip)
620            hammas.Image = Image.Mirror(Hammas);
621
622        }
623}
Note: See TracBrowser for help on using the repository browser.