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

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