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

Revision 9466, 15.2 KB checked in by mianhayr, 20 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 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 =4;
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        pelaaja.Weapon.FireRate = 1000;
266        return pelaaja;
267    }
268
269    void paasiMaalin(PhysicsObject pelaaja, PhysicsObject maali)
270    {
271        kenttaNumero++;
272
273        ClearAll();
274        Begin();
275
276
277    }
278    void lisaapelaaja1(Vector paikka, double leveys, double korkeus)
279    {
280        pelaaja1 = LuoPelaaja(paikka, leveys, korkeus);
281    }
282
283    void lisaapelaaja2(Vector paikka, double leveys, double korkeus)
284    {
285        pelaaja2 = LuoPelaaja(paikka, leveys, korkeus);
286    }
287
288    void Rajayta(PhysicsObject tormaaja, PhysicsObject Kohde)
289    {
290        int pMaxMaara = 3;
291        // Alustetaan räjähdysjärjestelmä
292        // Parametrit:
293        // * kuva: mitä tekstuuria räjähdyksen
294        //   hiukkasten halutaan käyttävän
295        // * pMaxMaara: räjähdyksen käyttämien
296        //   hiukkasten eli partikkeleiden maksimimäärä
297        ExplosionSystem rajahdys =
298        new ExplosionSystem(LoadImage("Thomasräjähdys"), pMaxMaara);
299        rajahdys.MaxScale = 1000;
300           
301           
302        // Lisätään järjestelmä peliin
303        Add(rajahdys);
304
305        int pMaara = 50;
306        // "Käynnistetään" räjähdys
307        rajahdys.AddEffect(tormaaja.X, Kohde.Y, pMaara);
308        tormaaja.Destroy();
309    }
310       
311
312       
313       
314         
315
316   
317
318    void LisaaNappaimet()
319    {
320        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
321        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
322
323        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
324        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
325        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
326
327        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
328        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
329        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
330
331        Keyboard.Listen(Key.Enter, ButtonState.Pressed, KysyTeksti, "kysytaan pelajalta tekstiä");
332
333        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
334
335        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
336        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
337        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
338        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
339        Keyboard.Listen(Key.E, ButtonState.Pressed, HeitaKranaatti, "heitä kranaatti", pelaaja1);
340
341        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
342        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, null,pelaaja1);
343    }
344    void KysyTeksti()
345    {
346        InputWindow viestiIkkuna = new InputWindow("Kirjoista viesti");
347        viestiIkkuna.TextEntered += ProcessInput;
348        Add(viestiIkkuna);
349    }
350    void ProcessInput(InputWindow ikkuna)
351    {
352        string viesti = ikkuna.InputBox.Text;
353        MessageDisplay.Add(viesti);
354       
355        // pätkitään vastaus moneen palaseen:
356        string[] palat=viesti.Split(new char[] {' '});
357
358        // jos palasia oli tasan näin monta kappaletta:
359        if (palat.Length==2)
360        {
361            // tarkistetaan, oliko eka sana tämä:
362            if(palat[0]=="gravity")
363            {
364                // asetetaan painovoiman oletus:
365                double luku = -1000;
366                // jos toinen palanen oli luettavissa lukuna:
367                if (double.TryParse(palat[1], out luku))
368                {
369                    // asetetaan painovoimaksi luku
370                    Gravity = new Vector(0, luku);
371                }
372            }
373        }
374    }
375    void KuunteleLiiketta(AnalogState hiirenTila)
376    {
377        tahtain.Position = Mouse.PositionOnWorld;
378        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
379
380    }
381
382
383    void Liikuta(PlatformCharacter hahmo, double nopeus)
384    {
385        hahmo.Walk(nopeus);
386    }
387
388    void Hyppaa(PlatformCharacter hahmo, double nopeus)
389    {
390        hahmo.Jump(nopeus);
391    }
392
393    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
394    {
395        maaliAani.Play();
396        MessageDisplay.Add("keräsit paskan!");
397        tahti.Destroy();
398    }
399    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
400    {
401        ammus.Destroy();
402        if (kohde.Tag.Equals("m"))
403        {
404            //ShowMessageWindow("Osu");
405            if ((kohde as OutoHirvio).AloitaAjastin())
406            {
407                (kohde as OutoHirvio).Ajastin.Timeout += delegate { SpawnaaUusiBosspoop(kohde.Position); };
408            }
409            (kohde as OutoHirvio).ElamaLaskuri.Value--;
410        }
411        if (kohde.Tag.ToString() == "p")
412        {
413            kohde.Destroy();
414        }
415        if (kohde.Tag =="A")
416        {
417            kohde.Destroy();
418        }
419       
420
421    }
422
423    void SpawnaaUusiBosspoop(Vector paikka)
424    {
425        LisaaOlio4(paikka, RUUDUN_KOKO / 2.0, RUUDUN_KOKO / 2.0);
426
427
428    }
429
430    void VihuAmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
431    {
432        ammus.Destroy();
433        if (kohde.Tag == "pelaaja")
434        {
435            kohde.Destroy();
436        }
437    }
438
439    void AmmuAseella(PlatformCharacter pelaaja)
440    {
441        if (pelaaja.IsDestroyed) return;
442
443        PhysicsObject ammus = pelaaja.Weapon.Shoot();
444
445        if (ammus != null)
446        {
447            //ammus.Size *= 0.10;
448            ammus.Width = 20;
449            ammus.Height = 1;
450            //ammus.Image = ...
451            ammus.MaximumLifetime = TimeSpan.FromSeconds(10.0);
452        }
453
454       
455 
456    }
457    void HeitaKranaatti(PlatformCharacter pelaaja)
458    {
459        if (pelaaja.IsDestroyed) return;
460
461        Grenade kranu = new Grenade(3.0);
462        pelaaja1.Throw(kranu, Angle.FromDegrees(50), 10000);
463
464        kranu.Explosion.AddShockwaveHandler("A", KranaattiOsui);
465
466        kranu.Explosion.AddShockwaveHandler("p", KranaattiOsui);
467    }
468    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
469    {
470        rajahdyksenKohde.Destroy();
471    }
472
473   void pelinlopussa()
474    {
475        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Lopeta");
476        Add(alkuValikko);
477
478        alkuValikko.AddItemHandler(0, Begin);
479        alkuValikko.AddItemHandler(1, Exit);
480    }
481}
482
483class OutoHirvio : PlatformCharacter
484{
485    private IntMeter elamaLaskuri = new IntMeter(30, 0, 30);
486    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
487    public Timer Ajastin = new Timer();
488    public OutoHirvio(double leveys, double korkeus)
489        : base(leveys, korkeus)
490    {
491        this.Ajastin.Interval = 1.0;
492
493        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
494    }
495
496    public bool AloitaAjastin()
497    {
498        if (this.Ajastin.Enabled == true)
499        {
500            return false;
501        }
502        else
503        {
504            this.Ajastin.Start();
505        }
506
507        return true;
508
509    }
510
511}
Note: See TracBrowser for help on using the repository browser.