source: 2018/24/ValtteriM/DeathrunDDC/DeathrunDDC/DeathrunDDC.cs @ 10335

Revision 9768, 17.4 KB checked in by vajumono, 16 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Widgets;
7
8public class DeathrunDDC : PhysicsGame
9{
10    const double nopeus = 200;
11    const double hyppyNopeus = 450;
12    const int RUUDUN_KOKO = 40;
13    const int ERILAISIA_ANSOJA = 7;
14    const int ANSOJEN_MAARA = 10;
15    bool[] ansaCoolingDown = new bool[ERILAISIA_ANSOJA];
16    PlatformCharacter pelaaja2;
17    PlatformCharacter pelaaja1;
18    PlatformCharacter pelaaja3;
19    PlatformCharacter pelaaja4;
20    Image pelaajan2Kuva = LoadImage("p2");
21    Image pelaajan1Kuva = LoadImage("p1");
22    Image pelaajan3Kuva = LoadImage("p3");
23    Image pelaajan4Kuva = LoadImage("p4");
24    Image kytkimenkuva = LoadImage("nappi");
25    Image laavankuva = LoadImage("lava");
26    Image ansankuva = LoadImage("silta");
27    Image ansankuva3 = LoadImage("blox");
28    Image kytkimenkuva2 = LoadImage("nappi");
29    Image pomonkuva = LoadImage("pomo");
30    Image hainkuva = LoadImage("hai");
31    Image ansankuva5 = LoadImage("train");
32    Image holenkuva = LoadImage("hole");
33    Image maalinkuva = LoadImage("jousi");
34    Key[,] pelaajienNappaimet;
35    void AloitaAlusta()
36    {
37        ClearAll();
38        LisaaNappaimet();
39        LuoKentta();
40        for (int i = 0; i < ansaCoolingDown.Length; i++)
41        {
42            ansaCoolingDown[i] = false;
43        }
44       
45       
46    }
47    //
48   
49
50    public override void Begin()
51    {
52       
53
54        LisaaNappaimet();
55        LuoKentta();
56       
57
58       
59        //Camera.ZoomFactor = 1.2;
60        //Camera.StayInLevel = true;
61    }
62
63    void LuoKentta()
64    {
65        Gravity = new Vector(0, -1000);
66        pelaaja1 = new PlatformCharacter(10, 10);
67        TileMap kentta = TileMap.FromLevelAsset("alkujuttu");
68        TileMap alku = TileMap.FromLevelAsset("kentta1");
69        int rivi = -1;
70        rivi += yhdistaKartat(kentta, alku, rivi);
71        for (int i = 0; i < ANSOJEN_MAARA; i++)
72        {
73            alku = TileMap.FromLevelAsset("ansa"+ RandomGen.NextInt(ERILAISIA_ANSOJA));
74            rivi += yhdistaKartat(kentta, alku, rivi);
75        }
76        alku = TileMap.FromLevelAsset("turva");
77        yhdistaKartat(kentta, alku, rivi);
78        kentta.SetTileMethod('#', LisaaTaso);
79        kentta.SetTileMethod('e', Lisaamaali);
80        kentta.SetTileMethod('b', LisaaTaso2);
81        kentta.SetTileMethod('f', LisaaTaso3);
82        kentta.SetTileMethod('1', LisaaPelaaja1);
83        kentta.SetTileMethod('2', LisaaPelaaja2);
84        kentta.SetTileMethod('3', LisaaPelaaja3);
85        kentta.SetTileMethod('4', LisaaPelaaja4);
86        kentta.SetTileMethod('Y', SiirraPelaaja);
87        kentta.SetTileMethod('t', lisaaansa);
88        kentta.SetTileMethod('T', lisaaansa2);
89        kentta.SetTileMethod('h', lisaaansa3);
90        kentta.SetTileMethod('k', lisaakytkin);
91        kentta.SetTileMethod('K', lisaakytkin2);
92        kentta.SetTileMethod('r', lisaakytkin3);
93        kentta.SetTileMethod('R', lisaakytkin4);
94        kentta.SetTileMethod('u', lisaakytkin5);
95        kentta.SetTileMethod('G', lisaakytkin6);
96        kentta.SetTileMethod('l', lisaalaava);
97        kentta.SetTileMethod('y', lisaapomo);
98        kentta.SetTileMethod('s', lisaahai);
99        kentta.SetTileMethod('w', lisaaansa5);
100        kentta.SetTileMethod('g', lisaahole);
101        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
102        Level.CreateBorders();
103        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
104        Camera.Follow(pelaaja1, pelaaja2, pelaaja3, pelaaja4);
105        Camera.Zoom(1.5);
106    }
107
108    int yhdistaKartat(TileMap kentta, TileMap liitettavaOsa, int aloitusSarake)
109    {
110        for (int i = 0; i < liitettavaOsa.ColumnCount; i++)
111        {
112            for (int j = 0; j < liitettavaOsa.RowCount; j++)
113            {
114                kentta.SetTile(j, i+aloitusSarake+1, liitettavaOsa.GetTile(j, i));
115            }
116        }
117        return liitettavaOsa.ColumnCount;
118    }
119
120    void LisaaTaso(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        taso.Position = paikka;
124        taso.Color = Color.Gray;
125        taso.Tag = "Taso";
126        taso.CollisionIgnoreGroup = 3;
127        Add(taso);
128    }
129    void LisaaTaso2(Vector paikka, double leveys, double korkeus)
130    {
131        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
132        taso.Position = paikka;
133        taso.Color = Color.Gray;
134        Add(taso);
135        taso.Tag = "taso";
136    }
137    void Lisaamaali(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
140        maali.Position = paikka;
141        maali.Image = maalinkuva;
142        Add(maali);
143        maali.Tag = "maali";
144    }
145    void LisaaTaso3(Vector paikka, double leveys, double korkeus)
146    {
147        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
148        taso.Position = paikka;
149        taso.Color = Color.Gray;
150        Add(taso);
151        taso.Tag = "seinaTaso";
152    }
153    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
154    {
155        pelaaja1 = LisaaPelaaja(paikka, leveys, korkeus, pelaajan1Kuva, 1);
156    }
157    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
158    {
159        pelaaja2 = LisaaPelaaja(paikka, leveys, korkeus, pelaajan2Kuva, 2);
160    }
161    void LisaaPelaaja3(Vector paikka, double leveys, double korkeus)
162    {
163        pelaaja3 = LisaaPelaaja(paikka, leveys, korkeus, pelaajan3Kuva, 3);
164    }
165    void LisaaPelaaja4(Vector paikka, double leveys, double korkeus)
166    {
167        pelaaja4 = LisaaPelaaja(paikka, leveys, korkeus, pelaajan4Kuva, 4);
168    }
169    void SiirraPelaaja(Vector paikka, double leveys, double korkeus)
170    {
171        PlatformCharacter pelaaja = RandomGen.SelectOne(pelaaja1, pelaaja2, pelaaja3, pelaaja4);
172        pelaaja.Position = paikka;
173    }
174    void lisaaansa(Vector paikka, double leveys, double korkeus)
175    {
176        PhysicsObject ansa = PhysicsObject.CreateStaticObject(leveys, korkeus);
177        ansa.Position = paikka;
178        Add(ansa);
179        ansa.Tag = "ansa";
180
181 }
182    void lisaaansa2(Vector paikka, double leveys, double korkeus)
183    {
184        PhysicsObject ansa2 = PhysicsObject.CreateStaticObject(leveys*11, korkeus*1);
185        ansa2.Position = paikka;
186        Add(ansa2);
187        ansa2.Tag = "ansa2";
188        ansa2.Image = ansankuva;
189    }
190    void lisaaansa3(Vector paikka, double leveys, double korkeus)
191    {
192        PhysicsObject ansa3 = new PhysicsObject(leveys * 11, korkeus * 3);
193        ansa3.Position = paikka;
194        ansa3.IgnoresGravity = true;
195        Add(ansa3);
196        ansa3.Tag = "ansa3";
197        AddCollisionHandler(ansa3, "taso", Osuilaavaan);
198        ansa3.Image = ansankuva3;
199    }
200    void lisaaansa4(Vector paikka, double leveys, double korkeus)
201    {
202        PhysicsObject ansa4 = PhysicsObject.CreateStaticObject(leveys, korkeus);
203        ansa4.Position = paikka;
204        Add(ansa4);
205        ansa4.Tag = "ansa4";
206
207    }
208    void lisaaansa5(Vector paikka, double leveys, double korkeus)
209    {
210        PlatformCharacter ansa5 = new PlatformCharacter(leveys * 4, korkeus * 4);
211        ansa5.Position = paikka;
212        Add(ansa5);
213        ansa5.Tag = "ansa5";
214        ansa5.Image = ansankuva5;
215        AddCollisionHandler(ansa5, "taso", Osuilaavaan);
216        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
217        tasoAivot.Speed = 400;
218
219        ansa5.Brain = tasoAivot;
220    }
221
222    void lisaakytkin(Vector paikka, double leveys, double korkeus)
223    {
224        PhysicsObject kytkin = PhysicsObject.CreateStaticObject(leveys, korkeus*0.8);
225        kytkin.Position = paikka;
226        Add(kytkin);
227        kytkin.Image = kytkimenkuva;
228        kytkin.Tag = "kytkin";
229    }
230    void lisaakytkin2(Vector paikka, double leveys, double korkeus)
231    {
232        PhysicsObject kytkin2 = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
233        kytkin2.Position = paikka;
234        Add(kytkin2);
235        kytkin2.Image = kytkimenkuva2;
236        kytkin2.Tag = "kytkin2";
237    }
238    void lisaakytkin3(Vector paikka, double leveys, double korkeus)
239    {
240        PhysicsObject kytkin3 = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
241        kytkin3.Position = paikka;
242        Add(kytkin3);
243        kytkin3.Image = kytkimenkuva;
244        kytkin3.Tag = "kytkin3";
245    }
246    void lisaakytkin4(Vector paikka, double leveys, double korkeus)
247    {
248        PhysicsObject kytkin4 = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
249        kytkin4.Position = paikka;
250        Add(kytkin4);
251        kytkin4.Image = kytkimenkuva;
252        kytkin4.Tag = "kytkin4";
253    }
254    void lisaakytkin5(Vector paikka, double leveys, double korkeus)
255    {
256        PhysicsObject kytkin5 = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
257        kytkin5.Position = paikka;
258        Add(kytkin5);
259        kytkin5.Image = kytkimenkuva;
260        kytkin5.Tag = "kytkin5";
261    }
262    void lisaakytkin6(Vector paikka, double leveys, double korkeus)
263    {
264        PhysicsObject kytkin6 = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
265        kytkin6.Position = paikka;
266        Add(kytkin6);
267        kytkin6.Image = kytkimenkuva;
268        kytkin6.Tag = "kytkin6";
269    }
270    void lisaalaava(Vector paikka, double leveys, double korkeus)
271    {
272        PhysicsObject laava = PhysicsObject.CreateStaticObject(leveys, korkeus * 0.8);
273        laava.Position = paikka;
274        Add(laava);
275        laava.Image = laavankuva;
276        laava.Tag = "laava";
277    }
278    void lisaapomo(Vector paikka, double leveys, double korkeus)
279    {
280        GameObject pomo = new GameObject(leveys*4, korkeus * 4);
281        pomo.Position = paikka;
282        Add(pomo);
283        pomo.Image = pomonkuva;
284       
285    }
286    void lisaahole(Vector paikka, double leveys, double korkeus)
287    {
288        GameObject hole = new GameObject(leveys, korkeus * 0.8);
289        hole.Position = paikka;
290        Add(hole, -1);
291        hole.Image = holenkuva;
292        hole.Tag = "hole";
293    }
294    void lisaahai(Vector paikka, double leveys, double korkeus)
295    {
296        PhysicsObject hai = new PhysicsObject(leveys*5, korkeus *2.5);
297        hai.Position = paikka;
298        Add(hai);
299        hai.CollisionIgnoreGroup = 3;
300        hai.Image = hainkuva;
301        hai.Tag = "hai";
302        AddCollisionHandler(hai, "taso", Osuilaavaan);
303    }
304    PlatformCharacter LisaaPelaaja( Vector paikka, double leveys, double korkeus, Image kuva, int pelaajaNro)
305    {
306
307        PlatformCharacter pelaaja = new PlatformCharacter(leveys, korkeus);
308        pelaaja.Position = paikka;
309        pelaaja.Mass = 4.0;
310        pelaaja.Image = kuva;
311        Add(pelaaja);
312        LisaaPelaajanNappaimet(pelaajaNro, pelaaja);
313        pelaaja.Tag = "pelaaja";
314        AddCollisionHandler(pelaaja, "kytkin", PelaajaOsuiKytkimeen);
315        AddCollisionHandler(pelaaja, "kytkin2", PelaajaOsuiKytkimeen2);
316        AddCollisionHandler(pelaaja, "kytkin3", PelaajaOsuiKytkimeen3);
317        AddCollisionHandler(pelaaja, "kytkin4", PelaajaOsuiKytkimeen4);
318        AddCollisionHandler(pelaaja, "kytkin5", PelaajaOsuiKytkimeen5);
319        AddCollisionHandler(pelaaja, "kytkin6", PelaajaOsuiKytkimeen6);
320        AddCollisionHandler(pelaaja, "laava", Osuilaavaan);
321        AddCollisionHandler(pelaaja, "maali", Osuimaaliin);
322        AddCollisionHandler(pelaaja, "ansa5", Osuilaavaan);
323        AddCollisionHandler(pelaaja, "ansa3", Osuilaavaan);
324        AddCollisionHandler(pelaaja, "hai", Osuilaavaan);
325        return pelaaja;
326    }
327    void PelaajaOsuiKytkimeen(PhysicsObject pelaaja, PhysicsObject kytkin)
328    {
329        if (ansaCoolingDown[1]) return;
330        foreach (var ansa in GetObjectsWithTag("ansa"))
331        {
332            Vector aloituspaikka = ansa.Position;
333            ansa.Destroy();
334            Timer.SingleShot(3.0,
335  delegate { lisaaansa(aloituspaikka, RUUDUN_KOKO, RUUDUN_KOKO);
336      Timer.SingleShot(3.0, delegate { ansaCoolingDown[1] = false; });
337  }
338);
339            ansaCoolingDown[1] = true;
340           
341
342        }
343    }
344       void PelaajaOsuiKytkimeen2(PhysicsObject pelaaja, PhysicsObject kytkin2)
345    {
346        if (ansaCoolingDown[2]) return;
347        foreach (var ansa2 in GetObjectsWithTag("ansa2"))
348        {
349            Vector aloituspaikka = ansa2.Position;
350            ansa2.Destroy();
351            Timer.SingleShot(3.0,     
352  delegate
353  {
354      lisaaansa2(aloituspaikka, RUUDUN_KOKO, RUUDUN_KOKO);
355      Timer.SingleShot(3.0, delegate { ansaCoolingDown[2] = false; });
356  }
357);
358            ansaCoolingDown[2] = true;
359        }
360    }
361    void PelaajaOsuiKytkimeen3(PhysicsObject pelaaja, PhysicsObject kytkin3)
362    {
363        foreach (var ansa in GetObjectsWithTag("ansa3"))
364        {
365            Vector aloituspaikka = ansa.Position;
366            ansa.MoveTo(ansa.Position+new Vector(0,-1000), 100);
367            Timer.SingleShot(3.0,
368  delegate { lisaaansa3(aloituspaikka, RUUDUN_KOKO, RUUDUN_KOKO); }
369);
370        }
371    }
372
373    void PelaajaOsuiKytkimeen4(PhysicsObject pelaaja, PhysicsObject kytkin4)
374    {
375        if (ansaCoolingDown[4]) return;
376        foreach (var ansa4 in GetObjectsWithTag("seinaTaso"))
377        {
378            for (int i = 1; i < 5; i++)
379            {
380                LisaaTuhoutuvaTaso(ansa4.Position + new Vector(0, i*RUUDUN_KOKO), RUUDUN_KOKO, RUUDUN_KOKO);
381               
382            }
383            Timer.SingleShot(6.0, delegate { ansaCoolingDown[4] = false; });
384            ansaCoolingDown[4] = true;
385        }
386    }
387
388    void PelaajaOsuiKytkimeen5(PhysicsObject pelaaja, PhysicsObject kytkin5)
389    {
390        if (ansaCoolingDown[5]) return;
391        foreach (GameObject reika in GetObjectsWithTag("hole"))
392        {
393            lisaaansa5(reika.Position + new Vector(-RUUDUN_KOKO, 2 * RUUDUN_KOKO), RUUDUN_KOKO, RUUDUN_KOKO);
394           
395            foreach (var ansa in GetObjectsWithTag("ansa5"))
396            {
397                Vector aloituspaikka = ansa.Position;
398                ansa.MoveTo(ansa.Position+new Vector(-5*RUUDUN_KOKO,0), 100);
399
400            }
401            Timer.SingleShot(4.5, delegate { ansaCoolingDown[5] = false; });
402            ansaCoolingDown[5] = true;
403        }
404
405    }
406
407    void PelaajaOsuiKytkimeen6(PhysicsObject pelaaja, PhysicsObject kytkin6)
408    {
409
410        foreach (var ansa in GetObjectsWithTag("hai"))
411        {
412            Vector aloituspaikka = ansa.Position;
413            ansa.MoveTo(ansa.Position +  new Vector(0, 1000), 1000);
414            Timer.SingleShot(3.0,
415  delegate { lisaahai(aloituspaikka, RUUDUN_KOKO, RUUDUN_KOKO); }
416);
417        }
418    }
419    void LisaaTuhoutuvaTaso(Vector paikka, double leveys, double korkeus)
420    {
421        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
422        taso.Position = paikka;
423        taso.Color = Color.Gray;
424        taso.LifetimeLeft = TimeSpan.FromSeconds(3.0);
425        Add(taso);
426
427    }
428   
429            void Osuilaavaan(PhysicsObject pelaaja, PhysicsObject laava)
430    {
431        pelaaja.Destroy();
432        List<GameObject> pelaajatElossa = new List<GameObject>();
433        foreach (var pellaaja in GetObjectsWithTag("pelaaja"))
434        {
435            if (!pellaaja.IsDestroyed) pelaajatElossa.Add(pellaaja);
436        }
437        GameObject[] elossaOlevat = new GameObject[pelaajatElossa.Count];
438        for (int i = 0; i < elossaOlevat.Length; i++)
439        {
440            elossaOlevat[i] = pelaajatElossa[i];
441        }
442        Camera.Follow(elossaOlevat);
443     
444    }
445    void Osuimaaliin(PhysicsObject pelaaja, PhysicsObject maali)
446    {
447        MessageDisplay.Add("Competitors won");
448    }
449    void LisaaNappaimet()
450    {
451        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
452        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
453        Keyboard.Listen(Key.F2, ButtonState.Pressed, AloitaAlusta, "reset");
454
455        LuoNappaintaulukko();
456        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
457
458        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
459        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
460        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
461
462        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
463
464   }
465    void LisaaPelaajanNappaimet(int pelaajaNro, PlatformCharacter pelaaja)
466    {
467        Keyboard.Listen(pelaajienNappaimet[pelaajaNro - 1, 0], ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
468        Keyboard.Listen(pelaajienNappaimet[pelaajaNro - 1, 1], ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeus);
469        Keyboard.Listen(pelaajienNappaimet[pelaajaNro - 1, 2], ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja, nopeus);
470       
471    }
472    void LuoNappaintaulukko()
473    {
474        pelaajienNappaimet = new Key[4, 3]
475        {
476            {Key.W, Key.A, Key.D },
477            {Key.Up, Key.Left, Key.Right },
478            {Key.I, Key.J, Key.L },
479            {Key.NumPad8, Key.NumPad4, Key.NumPad6 }
480        };
481    } 
482    void Liikuta(PlatformCharacter hahmo, double nopeus)
483    {
484        hahmo.Walk(nopeus);
485    }
486
487    void Hyppaa(PlatformCharacter hahmo, double nopeus)
488    {
489        hahmo.Jump(nopeus);
490    }
491   
492
493}
Note: See TracBrowser for help on using the repository browser.