source: 2016/30/TaavettiV/Street Alien Domination/Street Alien Domination/Street_Alien_Domination/Street_Alien_Domination.cs @ 10334

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