source: 2016/23/EelisK/DarkEmptyFull/DarkEmptyFull/DarkEmptyFull/DarkEmptyFull.cs @ 7239

Revision 7239, 20.4 KB checked in by jotapoti, 3 years ago (diff)

Axelin ja Eelisken tekemät pelit

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8class Pelaaja : PhysicsObject
9
10{
11    public int Elamat { get; set; }
12   
13    public Pelaaja(double leveys, double korkeus, int elamia)
14        : base(leveys, korkeus)
15    {
16        Elamat = elamia;
17       
18    }
19}
20class Hyvis : PhysicsObject
21
22{
23    //private SoundEffect RajahdysAani1;
24
25    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
26    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
27    public Timer Hyvisampuu = new Timer();
28    public Hyvis(double leveys, double korkeus, SoundEffect aani, Animation animaatio)
29        : base(leveys, korkeus)
30    {
31        elamaLaskuri.LowerLimit += delegate
32        {
33
34            //animaatio.Start();
35            aani.Play();
36            this.Hyvisampuu.Stop();
37            this.Destroy();
38
39        };
40
41    }
42
43}
44class Enemycruiser : PhysicsObject
45
46{
47    //private SoundEffect RajahdysAani1;
48   
49    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
50    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
51    public Timer vihollinenampuu = new Timer();
52    public Timer hyvisampuu = new Timer();
53    public Enemycruiser(double leveys, double korkeus, SoundEffect aani, Animation animaatio)
54        : base(leveys, korkeus)
55    {
56        elamaLaskuri.LowerLimit += delegate 
57        {
58
59            //animaatio.Start();
60            aani.Play();
61            this.vihollinenampuu.Stop();
62             this.Destroy();
63
64        };
65
66    }
67
68}
69
70public class DarkEmptyFull : PhysicsGame
71{
72
73    DoubleMeter elamaLaskuri;
74    //const double nopeus = 35;
75    AssaultRifle pelaajamalkuase;
76    //AssaultRifle cruisergun;
77    Vector Isspawnpoint = new Vector(100, 200);
78    Vector PelaajanSpawnpoint = new Vector(0, 0);
79    Vector VihollisenRandomGen = new Vector(100, 600);
80    Image PunaAlus = LoadImage("Avaruusalus_red_engines_off");
81    Animation PunaAlusPaalla;
82    Image Tausta1 = LoadImage("Starry_sky");
83    Image PunanenLaser = LoadImage("Ammus");
84    Image assteroidimage1 = LoadImage("Asteroid");
85    //PhysicsObject seurattavaHitbox;
86    //FollowerBrain seuraajanAivot;
87    Image enemycruiserimg = LoadImage("Enemy_cruiser_engines_off");
88    Image velociraptorimg = LoadImage("Velociraptorenginesoff");
89    Image issimg = LoadImage("iss");
90
91    Image punainerinkula = LoadImage("punenenympyrä");
92    Image sininenrinkulaimg = LoadImage("hyvis_rinkula");
93    Animation enemycruiserimgpaalla;
94    Animation ShipExplosionanimation;
95    Animation velociraptoranimaatio;
96    Pelaaja pelaaja;
97    SoundEffect LaaserinAmmunta1 = LoadSoundEffect("Laser_1");
98    SoundEffect LaaserinAmmunta2 = LoadSoundEffect("Laser_2");
99    SoundEffect RajahdysAani1 = LoadSoundEffect("Explosion_1");
100    SoundEffect RajahdysAani2 = LoadSoundEffect("Explosion_2");
101    public override void Begin()
102    {
103        PunaAlusPaalla = LoadAnimation("RedSpaceShipAnimation");
104        enemycruiserimgpaalla = LoadAnimation("EnemyCruiserAnimation");
105        velociraptoranimaatio = LoadAnimation("Velociraptor_animation");
106        ShipExplosionanimation = LoadAnimation("Explosionhoo");
107        // TODO: Kirjoita ohjelmakoodisi tähän
108        SetWindowSize(1280, 720);
109        SmoothTextures = false;
110        Avaruus();
111        Camera.Follow(pelaaja);
112        Camera.ZoomFactor = 2.2;
113        Camera.StayInLevel = true;
114
115
116
117
118
119        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
120        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
121
122    }
123    void LuoElamaLaskuri()
124    {
125     
126        elamaLaskuri = new DoubleMeter(10);
127        elamaLaskuri.MaxValue = 10;
128        elamaLaskuri.LowerLimit += ElamaLoppui;
129
130        ProgressBar elamaPalkki = new ProgressBar(112.5, 45);
131        elamaPalkki.X = Screen.Left + 150;
132        elamaPalkki.Y = Screen.Top - 20;
133        elamaPalkki.BindTo(elamaLaskuri);
134        elamaPalkki.Image = LoadImage("hp-bar1");
135        elamaPalkki.BarImage = LoadImage("hp-bar");
136        Add(elamaPalkki);
137    }
138
139    void ElamaLoppui()
140    {
141        Exit();
142    }
143
144    void Avaruus()
145    {
146
147        Level.Width = 2500;
148        Level.Height = 2500;
149        LisaaPelaaja(PelaajanSpawnpoint, 24, 24);
150        LisaaHyvis(new Vector(0, 300),25, 25);
151        Iss(Isspawnpoint, 70, 70);
152        LisaaVihollinen1(VihollisenRandomGen, 24, 24);       
153            Planet(Level.GetRandomPosition(), 100, 100);       
154            LisaaIcePlanet(Level.GetRandomPosition(), 100, 100);       
155            LisaaRingPlanet(Level.GetRandomPosition(), 148, 148);
156            LisaaLavaPlanet(Level.GetRandomPosition(), 100, 100);
157        LuoElamaLaskuri();
158        LisaaVihollinen1(new Vector(0, -200), 24, 24);
159
160        LisaaVihollinen1(new Vector(0, 100), 24, 24);
161        MediaPlayer.Play("pelimusaaoldschool");
162        MediaPlayer.IsRepeating = true;
163        for (int i = 0; i < 100; i++)
164            LisaaAsssteroid1(Level.GetRandomPosition(), 48, 48);
165
166        Level.Background.Image = Tausta1;
167        PelaajanKontrollit();
168        Level.Background.TileToLevel();
169        //PelaajanKontrollit();
170        Level.CreateBorders();
171    }
172    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
173    {
174        pelaaja = new Pelaaja(24, 24, 10);
175        pelaaja.Position = paikka;
176        pelaaja.Image = PunaAlus;
177        pelaaja.Shape = Shape.FromImage(PunaAlus);
178        pelaaja.Tag = "pelaaja";
179        pelaaja.Mass = 8.0;
180        pelaaja.MaxVelocity = 200;
181        pelaaja.CollisionIgnoreGroup = 1;
182        pelaajamalkuase = new AssaultRifle(10, 10);
183        pelaajamalkuase.Angle = Angle.FromDegrees(90);
184       // pelaajamalkuase.Ammo.Value = 1000;
185        pelaajamalkuase.ProjectileCollision = AmmusOsui;
186        pelaajamalkuase.IsVisible = false;
187        pelaaja.Add(pelaajamalkuase);
188
189
190        Add(pelaaja);
191
192    }
193    void Iss(Vector paikka, double leveys, double korkeus)
194
195    {
196        PhysicsObject iss = new PhysicsObject(70, 70);
197        iss.Position = paikka;
198        iss.Image = issimg;
199        iss.Shape = Shape.FromImage(issimg);
200        iss.Mass = 30.0;
201        iss.MaxVelocity = 40;
202        iss.IgnoresCollisionResponse = true;
203        PathFollowerBrain isskomento = new PathFollowerBrain();
204        List<Vector> polku = new List<Vector>();
205       
206
207
208
209        isskomento.Path = polku;
210        isskomento.Loop = true;
211        // Aivoille täytyy määrittää nopeus, jolla liikutaan:
212        iss.AngularVelocity = RandomGen.NextDouble(0.0, 0.2);
213        isskomento.Speed = 75;
214        iss.Brain = isskomento;
215
216        Add(iss, -1);
217    }
218    void LisaaHyvis(Vector paikka, double leveys, double korkeus)
219    {
220        Hyvis hyvisalus1 = new Hyvis(25, 25, RajahdysAani2, ShipExplosionanimation);
221        hyvisalus1.Position = paikka;
222        hyvisalus1.Image = velociraptorimg;
223        hyvisalus1.Shape = Shape.FromImage(velociraptorimg);
224        hyvisalus1.Mass = 10.0;
225        hyvisalus1.MaxVelocity = 200;
226        hyvisalus1.Tag = "hyvis";
227
228        hyvisalus1.ElamaLaskuri.LowerLimit += delegate ()
229
230
231        {
232            GameObject temp = new GameObject(46, 46);
233            temp.Animation = ShipExplosionanimation;
234            temp.Position = hyvisalus1.Position;
235            Add(temp);
236            temp.Animation.Start();
237            temp.Animation.Played += () => temp.Destroy();
238        };
239        FollowerBrain seuraajanAivot = new FollowerBrain("vihollinen");
240        Vector vihollisenSuunta = Vector.FromLengthAndAngle(1500, hyvisalus1.Angle + Angle.FromDegrees(90));
241        hyvisalus1.Push(vihollisenSuunta);        // Millä nopeudella kohdetta seurataan
242        seuraajanAivot.DistanceFar = 200;
243        seuraajanAivot.Active = true;                       // Etäisyys jolla aletaan seurata kohdetta
244        seuraajanAivot.TurnWhileMoving = true;
245        AssaultRifle cruisergun = new AssaultRifle(10, 10);
246        //hyvisalus1.Tag = "vihollinen";
247        cruisergun.ProjectileCollision = HyviksenAmmusOsui;
248        cruisergun.IsVisible = false;
249
250
251
252        hyvisalus1.Hyvisampuu.Interval = 2;
253        hyvisalus1.Hyvisampuu.Timeout += delegate { VihollinenAmpui(cruisergun); };
254        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
255        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
256        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
257        hyvisalus1.Brain = seuraajanAivot;
258        // seuraajanAivot.DistanceToTarget.AddTrigger(100, TriggerDirection.Down, aktivoiaivot);
259        bool aktivoitu = false;
260        seuraajanAivot.TargetClose += delegate
261        {
262            if (!aktivoitu)
263            {
264                enemycruiserimgpaalla.FPS = 15;
265                hyvisalus1.Animation = velociraptoranimaatio;
266                hyvisalus1.Animation.Start();
267                seuraajanAivot.DistanceFar += 400;
268                hyvisalus1.Hyvisampuu.Start();
269                aktivoitu = true;
270
271                // pysäytys:
272                // vihollinen1.Animation = new Animation(enemycruiserimg);
273            }
274        };
275        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
276        Timer tyonto = new Timer();
277        tyonto.Interval = 1;
278        tyonto.Timeout += delegate
279        {
280            if (seuraajanAivot.DistanceToTarget < 100)
281            {
282                seuraajanAivot.Speed = -50;
283            }
284            else
285            {
286                seuraajanAivot.Speed = 140;
287            }
288        };
289        tyonto.Start();
290
291        Timer ajastin = new Timer();
292        ajastin.Interval = RandomGen.NextDouble(1.0, 10.0);
293        ajastin.Timeout += delegate
294        {
295            hyvisalus1.Push(new Vector(1000, 0));
296            ajastin.Interval = RandomGen.NextDouble(1.0, 10.0);
297        };
298        ajastin.Start();
299
300        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
301        Timer ajastin2 = new Timer();
302        ajastin2.Interval = RandomGen.NextDouble(1.0, 10.0);
303        ajastin2.Timeout += delegate
304        {
305            hyvisalus1.Push(new Vector(1000, 0));
306            ajastin2.Interval = RandomGen.NextDouble(1.0, 10.0);
307        };
308        ajastin2.Start();
309         hyvisalus1.Add(cruisergun);
310        Add(hyvisalus1);
311   
312
313       
314    }
315    void HyviksenAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
316
317    {
318        if (kohde.Tag.Equals("vihollinen"))
319
320            (kohde as Enemycruiser).ElamaLaskuri.Value--;
321
322        {
323            RajahdysAani2.Play();
324            // Timer.SingleShot Exit();
325        }
326        ammus.Destroy();
327
328
329    }
330    void LisaaVihollinen1(Vector paikka, double leveys, double korkeus)
331
332    {
333        Enemycruiser vihollinen1 = new Enemycruiser(32, 32,RajahdysAani1,ShipExplosionanimation);
334        vihollinen1.Position = paikka;
335        vihollinen1.Image = enemycruiserimg;
336        vihollinen1.ElamaLaskuri.LowerLimit += delegate () 
337        {
338            GameObject temp = new GameObject(46, 46);
339            temp.Animation = ShipExplosionanimation;
340            temp.Position = vihollinen1.Position;
341            Add(temp);
342            temp.Animation.Start();
343            temp.Animation.Played += ()=> temp.Destroy();
344            };
345        vihollinen1.Shape = Shape.FromImage(enemycruiserimg);
346        vihollinen1.Mass = 10.0;
347
348        vihollinen1.MaxVelocity = 200;
349        AssaultRifle cruisergun = new AssaultRifle(10, 10);
350        vihollinen1.Tag = "vihollinen";
351        cruisergun.ProjectileCollision = VihollisenAmmusOsui;
352        cruisergun.IsVisible = false;
353
354
355
356        vihollinen1.vihollinenampuu.Interval = 2;
357        vihollinen1.vihollinenampuu.Timeout += delegate { VihollinenAmpui(cruisergun); };
358
359        // vihollinen1.Angle = Angle.FromDegrees(90);
360
361
362        //vihollinen1.Angle = Angle.FromDegrees(180);
363        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja,"hyvis");
364       
365        Vector pelaajanSuunta = Vector.FromLengthAndAngle(1500, vihollinen1.Angle + Angle.FromDegrees(90));
366        vihollinen1.Push(pelaajanSuunta);        // Millä nopeudella kohdetta seurataan
367        seuraajanAivot.DistanceFar = 200;
368        seuraajanAivot.Active = true;                       // Etäisyys jolla aletaan seurata kohdetta
369        seuraajanAivot.TurnWhileMoving = true;
370
371        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
372        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
373        //seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
374        vihollinen1.Brain = seuraajanAivot;
375        // seuraajanAivot.DistanceToTarget.AddTrigger(100, TriggerDirection.Down, aktivoiaivot);
376        bool aktivoitu = false;
377        seuraajanAivot.TargetClose += delegate
378        {
379            if (!aktivoitu)
380            {
381                enemycruiserimgpaalla.FPS = 15;
382                vihollinen1.Animation = enemycruiserimgpaalla;
383                vihollinen1.Animation.Start();
384                seuraajanAivot.DistanceFar += 10000;
385                vihollinen1.vihollinenampuu.Start();
386                aktivoitu = true;
387
388                // pysäytys:
389                // vihollinen1.Animation = new Animation(enemycruiserimg);
390            }
391        };
392        // Tapahtuma, joka tapahtuu kun ollaan lähellä kohdetta
393
394        Timer tyonto = new Timer();
395        tyonto.Interval = 1;
396        tyonto.Timeout += delegate
397        {
398            if(seuraajanAivot.DistanceToTarget < 100)
399            {
400                seuraajanAivot.Speed = 50;
401            }
402            else
403            {
404                seuraajanAivot.Speed = 140;
405            }
406        };
407        tyonto.Start();
408
409        Timer ajastin = new Timer();
410        ajastin.Interval = RandomGen.NextDouble(1.0, 10.0);
411        ajastin.Timeout += delegate
412        {
413            vihollinen1.Push(new Vector(1000, 0));
414            ajastin.Interval = RandomGen.NextDouble(1.0, 10.0);
415        };
416        ajastin.Start();
417       
418        vihollinen1.Add(cruisergun);
419        Add(vihollinen1);
420    }
421    void VihollisAlueenPunainenRange(Vector paikka, double leveys, double korkeus)
422    {
423        GameObject punainenalue = new GameObject(600,600);
424        punainenalue.Position = paikka;
425        punainenalue.Image = punainerinkula;
426        Timer luovihollinen = new Timer();
427        luovihollinen.Interval = 10;
428        luovihollinen.Timeout += delegate
429        {
430            if (Vector.Distance(paikka, pelaaja.Position) < 300)
431            {
432                LisaaVihollinen1(paikka, 48, 48);
433            }
434        };
435        luovihollinen.Start();
436        Add(punainenalue);
437    }
438    void HyvisAlueenSininenRinkula(Vector paikka, double leveys, double korkeus)
439    {
440        GameObject sininenalue = new GameObject(600, 600);
441        sininenalue.Position = paikka;
442        sininenalue.Image = sininenrinkulaimg;
443        Timer luohyvis = new Timer();
444        luohyvis.Interval = 10;
445        luohyvis.Timeout += delegate
446        {
447            if (Vector.Distance(paikka, pelaaja.Position) < 300)
448            {
449                LisaaHyvis(paikka, 48, 48);
450            }
451        };
452        luohyvis.Start();
453        Add(sininenalue);
454    }
455    void Planet(Vector paikka, double leveys, double korkeus)
456
457    {
458        GameObject planet = new GameObject(leveys, korkeus);
459        planet.Position = paikka;
460        Image planetimg = LoadImage("planet");
461        planet.Image = planetimg;
462        Add(planet, -1);
463    }
464    void LisaaIcePlanet(Vector paikka, double leveys, double korkeus)
465
466    {
467       
468        GameObject iceplanet = new GameObject(leveys, korkeus);
469        iceplanet.Position = paikka;
470        Image iceplanetimg = LoadImage("Iceplanet");
471        iceplanet.Image = iceplanetimg;
472        HyvisAlueenSininenRinkula(iceplanet.Position,600,600);
473        Add(iceplanet, -1);
474    }
475    void LisaaRingPlanet(Vector paikka, double leveys, double korkeus)
476
477    {
478        GameObject ringplanet = new GameObject(leveys, korkeus);
479        ringplanet.Position = paikka;
480        Image ringplanetimg = LoadImage("Ringplanet");
481        ringplanet.Image = ringplanetimg;
482        Add(ringplanet, -1);
483    }
484    void LisaaLavaPlanet(Vector paikka, double leveys, double korkeus)
485
486    {
487        GameObject lavaplanet = new GameObject(leveys, korkeus);
488        lavaplanet.Position = paikka;
489        Image lavaplanetimg = LoadImage("Lavaplanet");
490        lavaplanet.Image = lavaplanetimg;
491        VihollisAlueenPunainenRange(lavaplanet.Position,600, 600 );
492        Add(lavaplanet, -1);
493    }
494    void LisaaAsssteroid1(Vector paikka, double leveys, double korkeus)
495    {
496        PhysicsObject assteroid = new PhysicsObject(leveys, korkeus);
497        assteroid.Position = paikka;
498        assteroid.Image = assteroidimage1;
499        assteroid.Shape = Shape.FromImage(assteroidimage1);
500        assteroid.Mass = 60;
501        assteroid.MaxVelocity = 30;
502        assteroid.Velocity = RandomGen.NextVector(5,30);
503        assteroid.AngularVelocity = RandomGen.NextDouble(0.0, 0.6);
504        Add(assteroid);
505    }
506
507    void VihollisenAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
508    {
509        if (kohde.Tag.Equals("pelaaja"))
510            elamaLaskuri.Value--;
511            if (kohde.Tag.Equals("pelaaja"))
512            (kohde as Pelaaja).Elamat--;
513
514       
515
516        if (pelaaja.Elamat <= 0)
517
518        {
519            RajahdysAani2.Play();
520          // Timer.SingleShot Exit();
521        }
522       // ammus.Destroy();
523        if (kohde.Tag.Equals("hyvis"))
524
525            (kohde as Hyvis).ElamaLaskuri.Value--;
526
527        {
528            RajahdysAani2.Play();
529            // Timer.SingleShot Exit();
530        }
531        ammus.Destroy();
532
533    }
534    void HyvisAmpui(AssaultRifle ase)
535    {
536        PhysicsObject ammus = ase.Shoot();
537        if (ammus != null)
538
539        {
540            ammus.Image = PunanenLaser;
541            ammus.Size *= 1;
542            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
543            LaaserinAmmunta1.Play();
544        }
545    }
546
547    void VihollinenAmpui(AssaultRifle ase)
548    {
549        PhysicsObject ammus = ase.Shoot();
550        if (ammus != null)
551
552        {
553            ammus.Image = PunanenLaser;
554            ammus.Size *= 1;
555            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
556            LaaserinAmmunta2.Play();
557
558        }
559
560
561
562    }
563
564    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
565    {
566        if (kohde.Tag.Equals("vihollinen"))
567        {
568            (kohde as Enemycruiser).ElamaLaskuri.Value--;
569        }
570        ammus.Destroy();
571
572    }
573
574    void PelaajanKontrollit()
575    {
576        Keyboard.Listen(Key.Space, ButtonState.Pressed, AmmusAseella, "Ammu", pelaajamalkuase);
577        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaaVasemmalle, null);
578        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaaOikealle, null);
579        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 10000));
580        Keyboard.Listen(Key.Up, ButtonState.Pressed, () =>
581        {
582            PunaAlusPaalla.FPS = 15;
583            pelaaja.Animation = PunaAlusPaalla;
584            pelaaja.Animation.Start();
585        }, null);
586        Keyboard.Listen(Key.Up, ButtonState.Released, () =>
587        {
588            pelaaja.Animation = new Animation(PunaAlus);
589        }, null);
590
591
592
593
594    }
595
596    void AmmusAseella(AssaultRifle ase)
597    {
598        PhysicsObject ammus = ase.Shoot();
599
600        if (ammus != null)
601
602        {
603            LaaserinAmmunta2.Play();
604            ase.AttackSound = null;
605            ammus.Size *= 1;
606            ammus.Image = PunanenLaser;
607            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
608        }
609
610    }
611
612    void LiikutaPelaajaa(Vector PelaajanSuunta)
613    {
614        pelaaja.Animation = new Animation (PunaAlusPaalla);
615
616        Vector pelaajanSuunta = Vector.FromLengthAndAngle(1500, pelaaja.Angle + Angle.FromDegrees(90));
617        pelaaja.Push(pelaajanSuunta);
618        pelaaja.LinearDamping = 1;
619
620
621    }
622    void KaannaPelaajaaVasemmalle()
623    {
624        pelaaja.AngularVelocity = 10.0;
625        pelaaja.AngularDamping = 0.5;
626    }
627    void KaannaPelaajaaOikealle()
628    {
629        pelaaja.AngularVelocity = -10.0;
630        pelaaja.AngularDamping = 0.5;
631    }
632}
Note: See TracBrowser for help on using the repository browser.