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

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