source: 2016/30/TaavettiV/streetalien2/streetalien2/streetalien2/streetalien2.cs @ 9479

Revision 9479, 17.8 KB checked in by mianhayr, 17 months 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 streetalien2 : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    PlatformCharacter pelaaja2;
17
18    GameObject tahtain;
19    Image aseenkuva = LoadImage("parasase");
20    Image pelaajanKuva = LoadImage("pelityyppiparas");
21    Image tahtiKuva = LoadImage("tahti");
22
23    Image pompKuva = LoadImage("pomp");
24    Image asevihukuva = LoadImage("kesken");
25    Image tähtäinkuva = LoadImage("tähtäin");
26    Image vauvaBoss = LoadImage("bosspoop");
27    Image vihreaBossKuva = LoadImage("outohirvio");
28    Image Ythomas = LoadImage("Ythomas");
29    Image knightkuva = LoadImage("knight");
30    Image ketjukuva = LoadImage("ketju");
31
32
33    SoundEffect maaliAani = LoadSoundEffect("maali");
34
35
36
37    class Asevihu : PlatformCharacter
38    {
39        private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
40        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
41
42        public Asevihu(double leveys, double korkeus)
43            : base(leveys, korkeus)
44        {
45            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
46        }
47
48    }
49
50    int kenttaNumero = 1;
51
52
53
54    public override void Begin()
55    {
56        //Window.Fullscreen = true;
57
58        ClearAll();
59        SmoothTextures = false;
60
61        PhysicsObject kissa = new PhysicsObject(40, 20);
62        kissa.Shape = Shape.Rectangle;
63        kissa.Mass = 1000000.10000000;
64
65        Add(kissa);
66
67        tahtain = new GameObject(40, 40);
68        tahtain.Image = tähtäinkuva;
69        Add(tahtain, 3);
70
71
72        Gravity = new Vector(0, -1000);
73
74        LuoKentta();
75        LisaaNappaimet();
76        LuoPistelaskuri();
77
78        Camera.Follow(pelaaja1);
79        Camera.ZoomFactor = 1.2;
80        Camera.StayInLevel = true;
81    }
82
83
84
85    IntMeter pisteLaskuri;
86
87    void LuoPistelaskuri()
88    {
89        pisteLaskuri = new IntMeter(0);
90
91        Label pisteNaytto = new Label();
92        pisteNaytto.X = Screen.Left + 100;
93        pisteNaytto.Y = Screen.Top - 100;
94        pisteNaytto.TextColor = Color.Black;
95        pisteNaytto.Color = Color.White;
96
97        pisteNaytto.BindTo(pisteLaskuri);
98        Add(pisteNaytto);
99    }
100
101
102    void LuoKentta()
103    {
104        MediaPlayer.Play("taustamusa");
105        TileMap kentta = TileMap.FromLevelAsset("kentta" + kenttaNumero);
106        kentta.SetTileMethod('#', LisaaTaso);
107        kentta.SetTileMethod('*', LisaaTahti);
108        kentta.SetTileMethod('N', lisaapelaaja1);
109        kentta.SetTileMethod('n', lisaapelaaja2);
110        kentta.SetTileMethod('p', LisaaOlio);
111        kentta.SetTileMethod('A', LisaaOlio2);
112        kentta.SetTileMethod('m', LisaaOlio3);
113        kentta.SetTileMethod('B', LisaaOlio4);
114        kentta.SetTileMethod('V', LisaaOlio5);
115        kentta.SetTileMethod('y', LisaaOlio6);
116        kentta.SetTileMethod('K', lisaaMaali);
117        kentta.SetTileMethod('I', lisaaketju);
118        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
119        Level.CreateBorders();
120
121        Level.Background.CreateGradient(Color.DarkRed, Color.LightBlue);
122    }
123
124    void LisaaTaso(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        taso.Position = paikka;
128        taso.Color = Color.DarkBrown;
129        Add(taso);
130        taso.Image = LoadImage("metalli");
131    }
132    void lisaaMaali(Vector paikka, double leveys, double korkeus)
133    {
134        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
135
136        maali.Tag = "maali";
137        maali.Position = paikka;
138        Add(maali);
139    }
140
141    void Lisaametallii(Vector paikka, double leveys, double korkeus)
142    {
143        PhysicsObject metalli = new PhysicsObject(leveys, korkeus);
144        metalli.Position = paikka;
145        metalli.Color = Color.Green;
146        metalli.Tag = "metalli";
147        Add(metalli);
148        metalli.MakeStatic();
149
150        metalli.Image = LoadImage("metalli");
151
152    }
153
154
155    void lisaaketju(Vector paikka, double leveys, double korkeus)
156    {
157        PhysicsObject ketju = PhysicsObject.CreateStaticObject(leveys*0.3, korkeus);
158        ketju.IgnoresCollisionResponse = true;
159        ketju.Position = paikka;
160        ketju.Image = ketjukuva;
161        ketju.Tag = "ketju";
162        Add(ketju);
163    }
164    void LisaaTahti(Vector paikka, double leveys, double korkeus)
165    {
166        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
167        tahti.IgnoresCollisionResponse = true;
168        tahti.Position = paikka;
169        tahti.Image = tahtiKuva;
170        tahti.Tag = "tahti";
171        Add(tahti);
172    }
173    void LisaaOlio(Vector paikka, double leveys, double korkeus)
174    {
175        PlatformCharacter p = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
176        p.Position = paikka;
177        p.Image = pompKuva;
178        Add(p);
179        p.Tag = "p";
180
181        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
182        tasoAivot.Speed = 100;
183
184        tasoAivot.FallsOffPlatforms = true;
185        tasoAivot.TriesToJump = true;
186
187        p.Brain = tasoAivot;
188
189    }
190
191    void LisaaOlio2(Vector paikka, double leveys, double korkeus)
192    {
193        Asevihu asevihu = new Asevihu(leveys * 0.9, korkeus * 0.9);
194        asevihu.Position = paikka;
195        asevihu.Image = asevihukuva;
196        Add(asevihu);
197        asevihu.Tag = "A";
198
199        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
200        tasoAivot.Speed = 100;
201
202        tasoAivot.FallsOffPlatforms = true;
203        tasoAivot.TriesToJump = true;
204
205        asevihu.Brain = tasoAivot;
206
207        //AssaultRifle ase = new AssaultRifle(30, 10);
208        //ase.ProjectileCollision = VihuAmmusOsui;
209        //asevihu.Add(ase);
210        asevihu.Weapon = new AssaultRifle(30, 10);
211        asevihu.Weapon.ProjectileCollision = VihuAmmusOsui;
212
213        Timer aikaLaskuri = new Timer();
214        aikaLaskuri.Interval = 2;
215        aikaLaskuri.Timeout += () => AmmuAseella(asevihu);
216        aikaLaskuri.Start();
217    }
218    void LisaaOlio3(Vector paikka, double leveys, double korkeus)
219    {
220        PlatformCharacter m = new PlatformCharacter(leveys * 0.9, korkeus * 0.9);
221        m.Position = paikka;
222        m.Image = knightkuva;
223        Add(m);
224        m.Tag = "m";
225
226        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
227        tasoAivot.Speed = 100;
228
229        tasoAivot.FallsOffPlatforms = true;
230        tasoAivot.TriesToJump = true;
231
232        m.Brain = tasoAivot;
233
234    }
235
236
237    void LisaaOlio4(Vector paikka, double leveys, double korkeus)
238    {
239        OutoHirvio B = new OutoHirvio(leveys * 1.0, korkeus * 1.0);
240        B.Position = paikka;
241        B.Image = vauvaBoss;
242        Add(B);
243        B.Tag = "B";
244
245
246        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
247        tasoAivot.Speed = 100;
248
249        tasoAivot.FallsOffPlatforms = true;
250        tasoAivot.TriesToJump = true;
251
252        B.Brain = tasoAivot;
253
254    }
255
256    void LisaaOlio6(Vector paikka, double leveys, double korkeus)
257    {
258        PlatformCharacter y = new PlatformCharacter(leveys * 1.0, korkeus * 1.0);
259        y.Position = paikka;
260        y.Image = Ythomas;
261        Add(y);
262        y.Tag = "y";
263
264        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
265        tasoAivot.Speed = 900;
266
267        tasoAivot.FallsOffPlatforms = true;
268        tasoAivot.TriesToJump = true;
269
270        y.Brain = tasoAivot;
271
272    }
273    void LisaaOlio5(Vector paikka, double leveys, double korkeus)
274    {
275        OutoHirvio m = new OutoHirvio(leveys * 2.9, korkeus * 2.9);
276        m.Position = paikka;
277        m.Image = vihreaBossKuva;
278        Add(m);
279        m.Tag = "m";
280
281        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
282        tasoAivot.Speed = 100;
283
284        tasoAivot.FallsOffPlatforms = true;
285        tasoAivot.TriesToJump = true;
286
287        m.Brain = tasoAivot;
288
289    }
290
291    void Tormaap(PhysicsObject pelaaja1, PhysicsObject p)
292    {
293        pelaaja1.Destroy();
294
295        Explosion rajahdys = new Explosion(50);
296        rajahdys.Position = p.Position;
297        Add(rajahdys);
298    }
299
300    PlatformCharacter LuoPelaaja(Vector paikka, double leveys, double korkeus)
301    {
302        PlatformCharacter pelaaja = new PlatformCharacter(leveys * 0.7, korkeus * 0.9);
303        pelaaja.Position = paikka;
304        pelaaja.Mass = 3.0;
305        pelaaja.Tag = "pelaaja";
306        pelaaja.Image = pelaajanKuva;
307        AddCollisionHandler(pelaaja, "tahti", TormaaTahteen);
308        AddCollisionHandler(pelaaja, "p", CollisionHandler.ExplodeBoth(999, true));
309        AddCollisionHandler(pelaaja, "B", CollisionHandler.ExplodeBoth(999, true));
310        AddCollisionHandler(pelaaja, "maali", paasiMaalin);
311        AddCollisionHandler(pelaaja, "m", Tormaap);
312        AddCollisionHandler(pelaaja, "y", Rajayta);
313
314        Add(pelaaja);
315
316
317
318        pelaaja.Destroyed += pelinlopussa;
319
320        pelaaja.Weapon = new AssaultRifle(30, 10);
321        pelaaja.Weapon.ProjectileCollision = AmmusOsui;
322        pelaaja.Weapon.InfiniteAmmo = true;
323        pelaaja.Weapon.Power.DefaultValue = 400;
324        pelaaja.Weapon.AmmoIgnoresGravity = true;
325        pelaaja.Weapon.AmmoIgnoresExplosions = true;
326        pelaaja.Weapon.CanHitOwner = false;
327        pelaaja.Weapon.Image = aseenkuva;
328        pelaaja.Weapon.Y = 5;
329
330        pelaaja.Weapon.FireRate = 10;
331
332        pelaaja.Weapon.FireRate = 50;
333
334        return pelaaja;
335
336    }
337
338    void paasiMaalin(PhysicsObject pelaaja, PhysicsObject maali)
339    {
340        kenttaNumero++;
341
342        ClearAll();
343        Begin();
344
345
346    }
347    void lisaapelaaja1(Vector paikka, double leveys, double korkeus)
348    {
349        pelaaja1 = LuoPelaaja(paikka, leveys, korkeus);
350    }
351
352    void lisaapelaaja2(Vector paikka, double leveys, double korkeus)
353    {
354        pelaaja2 = LuoPelaaja(paikka, leveys, korkeus);
355    }
356
357    void Rajayta(PhysicsObject tormaaja, PhysicsObject Kohde)
358    {
359        int pMaxMaara = 3;
360        // Alustetaan räjähdysjärjestelmä
361        // Parametrit:
362        // * kuva: mitä tekstuuria räjähdyksen
363        //   hiukkasten halutaan käyttävän
364        // * pMaxMaara: räjähdyksen käyttämien
365        //   hiukkasten eli partikkeleiden maksimimäärä
366        ExplosionSystem rajahdys =
367        new ExplosionSystem(LoadImage("Thomasräjähdys"), pMaxMaara);
368        rajahdys.MaxScale = 1000;
369
370
371        // Lisätään järjestelmä peliin
372        Add(rajahdys);
373
374        int pMaara = 50;
375        // "Käynnistetään" räjähdys
376        rajahdys.AddEffect(tormaaja.X, Kohde.Y, pMaara);
377        tormaaja.Destroy();
378    }
379
380
381
382
383
384
385
386
387    void LisaaNappaimet()
388    {
389        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
390        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
391
392        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
393        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
394        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
395
396        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
397        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
398        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
399        Keyboard.Listen(Key.L, ButtonState.Down, HeitaKranaatti, "heitä kranaatti", pelaaja2);
400        //Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2,-nopeus);
401        //Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2,nopeus);
402        //Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, pelaaja1.hyppyNopeus);
403        //Keyboard.Listen(Key.O, ButtonState.Down, fly, "pelaaja lentää", pelaaja2, flynopeus);
404
405        Keyboard.Listen(Key.Enter, ButtonState.Pressed, KysyTeksti, "kysytaan pelajalta tekstiä");
406
407        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
408
409        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
410        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
411        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
412        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
413        Keyboard.Listen(Key.E, ButtonState.Down, HeitaKranaatti, "heitä kranaatti", pelaaja1);
414
415        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
416        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null, pelaaja1);
417
418
419
420
421    }
422    void KysyTeksti()
423    {
424        InputWindow viestiIkkuna = new InputWindow("Kirjoista viesti");
425        viestiIkkuna.TextEntered += ProcessInput;
426        Add(viestiIkkuna);
427    }
428    void ProcessInput(InputWindow ikkuna)
429    {
430        string viesti = ikkuna.InputBox.Text;
431        MessageDisplay.Add(viesti);
432
433        // pätkitään vastaus moneen palaseen:
434        string[] palat = viesti.Split(new char[] { ' ' });
435
436        // jos palasia oli tasan näin monta kappaletta:
437        if (palat.Length == 2)
438        {
439            // tarkistetaan, oliko eka sana tämä:
440            if (palat[0] == "gravity")
441            {
442                // asetetaan painovoiman oletus:
443                double luku = -1000;
444                // jos toinen palanen oli luettavissa lukuna:
445                if (double.TryParse(palat[1], out luku))
446                {
447                    // asetetaan painovoimaksi luku
448                    Gravity = new Vector(0, luku);
449                }
450            }
451        }
452    }
453    void KuunteleLiiketta(AnalogState hiirenTila)
454    {
455        tahtain.Position = Mouse.PositionOnWorld;
456        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
457
458    }
459
460
461    void Liikuta(PlatformCharacter hahmo, double nopeus)
462    {
463        hahmo.Walk(nopeus);
464    }
465
466    void Hyppaa(PlatformCharacter hahmo, double nopeus)
467    {
468        hahmo.Jump(nopeus);
469    }
470
471    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
472    {
473        maaliAani.Play();
474        MessageDisplay.Add("keräsit paskan!");
475        tahti.Destroy();
476    }
477    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
478    {
479        ammus.Destroy();
480        if (kohde.Tag.Equals("m"))
481        {
482            //ShowMessageWindow("Osu");
483            if ((kohde as OutoHirvio).AloitaAjastin())
484            {
485                (kohde as OutoHirvio).Ajastin.Timeout += delegate { SpawnaaUusiBosspoop(kohde.Position); };
486            }
487            (kohde as OutoHirvio).ElamaLaskuri.Value--;
488        }
489        if (kohde.Tag.ToString() == "p")
490        {
491            kohde.Destroy();
492            pisteLaskuri.Value += 1;
493        }
494        if (kohde.Tag == "A")
495        {
496
497            (kohde as Asevihu).ElamaLaskuri.Value--;
498            // kohde.Destroy();
499        }
500
501
502    }
503
504    void SpawnaaUusiBosspoop(Vector paikka)
505    {
506        LisaaOlio4(paikka, RUUDUN_KOKO / 2.0, RUUDUN_KOKO / 2.0);
507
508
509    }
510
511    void VihuAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
512    {
513        ammus.Destroy();
514        if (kohde.Tag == "pelaaja")
515        {
516            kohde.Destroy();
517        }
518    }
519    void AmmuAseella(Asevihu asevihu)
520    {
521        if (asevihu.IsDestroyed) return;
522
523        PhysicsObject ammus = asevihu.Weapon.Shoot();
524
525        if (ammus != null)
526        {
527            //ammus.Size *= 0.10;
528            ammus.Width = 20;
529            ammus.Height = 1;
530            //ammus.Image = ...
531            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
532        }
533
534
535    }
536    void AmmuAseella(PlatformCharacter pelaaja)
537    {
538        if (pelaaja.IsDestroyed) return;
539
540        PhysicsObject ammus = pelaaja.Weapon.Shoot();
541
542        if (ammus != null)
543        {
544            //ammus.Size *= 0.10;
545            ammus.Width = 20;
546            ammus.Height = 1;
547            //ammus.Image = ...
548            ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
549        }
550
551
552
553    }
554    void HeitaKranaatti(PlatformCharacter pelaaja)
555    {
556        if (pelaaja.IsDestroyed) return;
557
558        Grenade kranu = new Grenade(3.0);
559        pelaaja1.Throw(kranu, Angle.FromDegrees(50), 10000);
560
561        kranu.Explosion.AddShockwaveHandler("A", KranaattiOsui);
562
563        kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
564    }
565    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
566    {
567        rajahdyksenKohde.Destroy();
568    }
569
570    void pelinlopussa()
571    {
572        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
573        Add(alkuValikko);
574
575        alkuValikko.AddItemHandler(0, Begin);
576        alkuValikko.AddItemHandler(1, Exit);
577    }
578}
579
580class OutoHirvio : PlatformCharacter
581{
582    private IntMeter elamaLaskuri = new IntMeter(30, 0, 30);
583    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
584    public Timer Ajastin = new Timer();
585    public OutoHirvio(double leveys, double korkeus)
586        : base(leveys, korkeus)
587    {
588        this.Ajastin.Interval = 1.0;
589
590        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
591    }
592
593    public bool AloitaAjastin()
594    {
595        if (this.Ajastin.Enabled == true)
596        {
597            return false;
598        }
599        else
600        {
601            this.Ajastin.Start();
602        }
603
604        return true;
605
606    }
607
608}
Note: See TracBrowser for help on using the repository browser.