source: 2014/koodauskerho/38/VilhoP/Oma/Lapsylintu.cs @ 5794

Revision 5794, 17.7 KB checked in by hesahave, 7 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 Lapsylintu : PhysicsGame
10{
11    const double nopeus = 200;
12
13    const double hyppyNopeus = 400;
14    const int RUUDUN_KOKO = 50;
15
16    GameObject lapinakyvaPalikka;
17    List<PhysicsObject> lisatytPalikat = new List<PhysicsObject>();
18
19    PlatformCharacter pelaaja1;
20    private Image[] tipunKavely1 = LoadImages("UusiKavely2", "TipuIso2", "UusiKavely3", "TipuIso2", "UusiKavely2", "TipuIso2", "UusiKavely1");
21    PlatformCharacter pelaaja2;
22    private Image[] tipunKavely2 = LoadImages("pelaaja2kavely2", "pelaaja2", "pelaaja2kavely3", "pelaaja2", "pelaaja2kavely2", "pelaaja2", "pelaaja2kavely1");
23
24    private Image[] korpinLento = LoadImages("KorppiSiipi2", "Korppi2");
25
26    Image pelaajanKuva = LoadImage("TipuIso2");
27    Image pelaajanKuva2 = LoadImage("pelaaja2");
28    Image tahtiKuva = LoadImage("tahti");
29    Image[] pelaajanHyppykuvat = LoadImages("TipuIsoSiivet", "TipuIso2", "TipuIsoSiivet", "TipuIso2");
30    //Image[] pelaajanPutoamiskuva = LoadImages("TipuIso2");
31    Image[] pelaajanHyppykuvat2 = LoadImages("pelaaja2siivet", "pelaaja2", "pelaaja2siivet", "pelaaja2");
32    Image pelaajanKuolemakuva = LoadImage("TipuIsoKuollut3");
33    Image pelaajanKuolemakuva2 = LoadImage("pelaaja2kuollut");
34    Image vihollisenKuva = LoadImage("vihollinen1");
35    //Image[] seisomisKuva = LoadImage("TipuIso2");
36    Image kursorinKuva = LoadImage("lapinakyvaPalikka");
37
38    Image taustaKuva = LoadImage("Ulkoilma3");
39
40    SoundEffect maaliAani = LoadSoundEffect("Potaat");
41    SoundEffect kuolema = LoadSoundEffect("YouDied");
42    SoundEffect voitto = LoadSoundEffect("YouWin");
43    IntMeter hyppyLaskuri;
44    IntMeter kuolemienMaaraLaskuri;
45    IntMeter pisteLaskuri;
46    int kenttaNro = 1;
47
48    bool hyppyKaynnissa = true;
49    bool peliKaynnissa = true;
50    bool voiLaittaaPalikan = true;
51
52    public override void Begin()
53    {
54        SmoothTextures = false;
55        SeuraavaKentta();
56        MediaPlayer.Play("TipuMusa2");
57        MultiSelectWindow alkuValikko = new MultiSelectWindow("Escape from Henhouse", "Start", "Exit");
58
59        Add(alkuValikko);
60        alkuValikko.AddItemHandler(0, AloitaPeli);
61        alkuValikko.AddItemHandler(1, Exit);
62        alkuValikko.DefaultCancel = 1;
63        LuoPistelaskuri();
64    }
65
66    void SeuraavaKentta()
67    {
68        ClearAll();
69
70        if (kenttaNro == 1) LuoKentta("kentta1");
71        else if (kenttaNro == 2) LuoKentta("kentta2");
72        else if (kenttaNro == 3) LuoKentta("kentta3");
73        else if (kenttaNro > 3) Exit();
74
75        LisaaTausta();
76        LisaaNappaimet();
77        MediaPlayer.IsRepeating = true;
78        LuoPistelaskuri();
79        peliKaynnissa = true;
80    }
81
82
83    void AloitaPeli()
84    {
85
86    }
87
88    void LuoKentta(string KentanNimi)
89    {
90        LisaaLapinakyvaPalikka(new Vector(0, 0), RUUDUN_KOKO, RUUDUN_KOKO);
91
92        TileMap kentta = TileMap.FromLevelAsset(KentanNimi);
93        kentta.SetTileMethod('M', LisaaMuuri);
94        kentta.SetTileMethod('#', LisaaTaso);
95        kentta.SetTileMethod('*', LisaaTahti);
96        kentta.SetTileMethod('L', LisaaPelaaja1);
97        kentta.SetTileMethod('T', LisaaPelaaja2);
98        kentta.SetTileMethod('v', LisaaVihollinen);
99        kentta.SetTileMethod('P', LisaaPalikka);
100        kentta.SetTileMethod('O', LisaaOikeaReuna);
101        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
102
103        //Level.CreateBorders();
104        //Level.CreateLeftBorder();
105        //Level.CreateTopBorder();
106        //Level.CreateBottomBorder();
107
108        //PhysicsObject oikeaReuna = Level.CreateRightBorder();
109        //oikeaReuna.Tag = "oikea";
110
111        Level.Background.CreateGradient(Color.Red, Color.SkyBlue);
112
113        Gravity = new Vector(0, -1000);
114
115
116        Camera.FollowX(pelaaja1, pelaaja2);
117        Camera.ZoomFactor = 1.5;
118        Camera.StayInLevel = false;
119        //Camera.FollowOffset = new Vector(Screen.Width / 5 - RUUDUN_KOKO, 0.0);
120        //Camera.ZoomToLevel();
121
122        LuoHyppyLaskuri();
123        LuoKuolemienMääräLaskuri();
124        //Level.Background.Image = taustaKuva;
125        //Level.Background.TileToLevel();
126        //Level.Background.ScaleToLevelFull();
127
128        //IsFullScreen = true;
129        // SetWindowSize(1280, 1024 true);
130    }
131
132    void LisaaTausta()
133    {
134        GameObject pelinTausta = new GameObject(Screen.Width * 2.5, Screen.Height * 2.5);
135        pelinTausta.Image = taustaKuva;
136        Add(pelinTausta, -3);
137        Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
138
139    }
140
141    void LisaaMuuri(Vector paikka, double leveys, double korkeus)
142    {
143        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, 15);
144        PhysicsObject muurivasen = PhysicsObject.CreateStaticObject(25, 30);
145        PhysicsObject muurioikea = PhysicsObject.CreateStaticObject(25, 30);
146       
147        PhysicsObject muuriala = PhysicsObject.CreateStaticObject(leveys, 5);
148
149        muuri.Position = new Vector(paikka.X, paikka.Y + 17.5);
150        muurivasen.Position = new Vector(paikka.X - 12.5, paikka.Y - 5);
151        muurioikea.Position = new Vector(paikka.X + 12.5, paikka.Y - 5);
152        muuriala.Position = new Vector(paikka.X, paikka.Y - 22.5);
153       
154        Add(muuri);
155        Add(muurivasen);
156        Add(muurioikea);
157        Add(muuriala);
158
159        muuri.Color = (Color.Green);
160        muurivasen.Color = (Color.Black);
161        muurioikea.Color = (Color.Black);
162        muuriala.Color = (Color.Black);
163
164        /*muuri.Tag = "lattia";
165        muurivasen.Tag = "vasenSeinä";
166        muurioikea.Tag = "oikeaSeinä";
167        muuriala.Tag = "katto"; */
168
169        muuri.Tag = "lattia";
170        muurivasen.Tag = "lattia";
171        muurioikea.Tag = "lattia";
172        muuriala.Tag = "katto";
173    }
174
175    void HiiriPalikka(Vector paikka, double leveys, double korkeus)
176    {
177        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
178        palikka.Position = paikka;
179        Add(palikka);
180        palikka.Tag = "lattia";
181        palikka.Color = Color.Green;
182        lisatytPalikat.Add(palikka);
183    }
184
185    void LisaaTaso(Vector paikka, double leveys, double korkeus)
186    {
187        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
188        taso.Position = paikka;
189        taso.Color = (Color.Red);
190        taso.Tag = "seina";
191        Add(taso);
192    }
193
194    void LisaaOikeaReuna(Vector paikka, double leveys, double korkeus)
195    {
196        PhysicsObject oikeaReuna = PhysicsObject.CreateStaticObject(leveys, korkeus);
197        oikeaReuna.Position = paikka;
198        oikeaReuna.Color = (Color.Yellow);
199        oikeaReuna.Tag = "oikea";
200        Add(oikeaReuna);
201    }
202
203    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
206        palikka.Position = paikka;
207        palikka.Color = (Color.Black);
208        Add(palikka);
209        palikka.IgnoresGravity = true;
210        palikka.CanRotate = true;
211    }
212
213    void LisaaLapinakyvaPalikka(Vector paikka, double leveys, double korkeus)
214    {
215        lapinakyvaPalikka = new GameObject(RUUDUN_KOKO, RUUDUN_KOKO);
216        lapinakyvaPalikka.Position = Mouse.PositionOnWorld;
217        Add(lapinakyvaPalikka);
218        lapinakyvaPalikka.Image = kursorinKuva;
219    }
220
221    void LuoLeijuvaPalikka()
222    {
223        if (voiLaittaaPalikan)
224        {
225            if (lisatytPalikat.Count == 1)
226            {
227                lisatytPalikat[0].Destroy();
228                lisatytPalikat.RemoveAt(0);
229                voiLaittaaPalikan = false;
230                Timer.SingleShot(4, LaittaaPalikanTrueksi);
231            }
232            HiiriPalikka(Mouse.PositionOnWorld, RUUDUN_KOKO, RUUDUN_KOKO);
233        }
234    }
235
236    void LaittaaPalikanTrueksi()
237    {
238        voiLaittaaPalikan = true;
239    }
240
241    void LisaaTahti(Vector paikka, double leveys, double korkeus)
242    {
243        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
244        tahti.IgnoresCollisionResponse = true;
245        tahti.Position = paikka;
246        tahti.Image = tahtiKuva;
247        tahti.Tag = "tahti";
248        Add(tahti);
249    }
250
251    void LisaaPelaaja1(Vector paikka, double leveys, double korkeus)
252    {
253        pelaaja1 = new PlatformCharacter(leveys, korkeus);
254        pelaaja1.Position = paikka;
255        pelaaja1.Mass = 4.0;
256        pelaaja1.Image = pelaajanKuva;
257        pelaaja1.AnimJump = new Animation(pelaajanHyppykuvat);
258        pelaaja1.AnimFall = new Animation(pelaajanKuva);
259        pelaaja1.AnimWalk = new Animation(tipunKavely1);
260        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
261        //pelaaja1.AnimFall = new Animation(pelaajanPutoamiskuva);
262        pelaaja1.AnimWalk.FPS = 20;
263        pelaaja1.CanRotate = true;
264
265        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
266        Add(pelaaja1);
267        AddCollisionHandler(pelaaja1, "seina", delegate(PhysicsObject tormaaja, PhysicsObject kohde)
268        {
269            TormaaKuolettavaan(tormaaja, kohde, pelaajanKuolemakuva, "Player 1", PoistaPelaamisnappaimet1);
270        });
271       
272       
273       
274        AddCollisionHandler(pelaaja1, "vihu", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { TormaaKuolettavaan(tormaaja, kohde, pelaajanKuolemakuva, "Player 1", PoistaPelaamisnappaimet1); });
275
276        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
277        AddCollisionHandler(pelaaja1, "lattia", TormaaMuuriin);
278        AddCollisionHandler(pelaaja1, "vasenSeinä", TormaaSeinaan);
279        AddCollisionHandler(pelaaja1, "oikeaseinä", TormaaSeinaan);
280
281        pelaaja1.CollisionIgnoreGroup = 1;
282    }
283
284    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
285    {
286        pelaaja2 = new PlatformCharacter(leveys, korkeus);
287        pelaaja2.Position = paikka;
288        pelaaja2.Mass = 4.0;
289        pelaaja2.Image = pelaajanKuva2;
290        pelaaja2.AnimJump = new Animation(pelaajanHyppykuvat2);
291        pelaaja2.AnimFall = new Animation(pelaajanKuva2);
292        pelaaja2.AnimWalk = new Animation(tipunKavely2);
293        pelaaja2.AnimIdle = new Animation(pelaajanKuva2);
294        //pelaaja1.AnimFall = new Animation(pelaajanPutoamiskuva);
295        pelaaja1.AnimWalk.FPS = 20;
296
297        AddCollisionHandler(pelaaja2, "tahti", TormaaTahteen);
298        Add(pelaaja2);
299        AddCollisionHandler(pelaaja2, "seina", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { TormaaKuolettavaan(tormaaja, kohde, pelaajanKuolemakuva2, "Player 2", PoistaPelaamisnappaimet2); });
300        AddCollisionHandler(pelaaja2, "vihu", delegate(PhysicsObject tormaaja, PhysicsObject kohde) { TormaaKuolettavaan(tormaaja, kohde, pelaajanKuolemakuva2, "Player 2", PoistaPelaamisnappaimet2); });
301
302        AddCollisionHandler(pelaaja2, "oikea", TormaaOikeaanReunaan);
303        AddCollisionHandler(pelaaja2, "lattia", TormaaMuuriin);
304        AddCollisionHandler(pelaaja2, "vasenSeinä", TormaaSeinaan);
305        AddCollisionHandler(pelaaja2, "oikeaseinä", TormaaSeinaan);
306
307        pelaaja2.CollisionIgnoreGroup = 2;
308    }
309
310    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
311    {
312        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
313        vihollinen.Position = paikka;
314        Add(vihollinen);
315        vihollinen.IgnoresGravity = true;
316        vihollinen.CanRotate = false;
317        vihollinen.IgnoresCollisionResponse = true;
318        vihollinen.Image = vihollisenKuva;
319        vihollinen.Tag = "vihu";
320        vihollinen.Animation = new Animation(korpinLento);
321        vihollinen.Animation.FPS = 7;
322        vihollinen.Animation.Start();
323        //Asetetaan vihollinen liikkumaan ylös-alas:
324        vihollinen.Oscillate(new Vector(0, 1), korkeus * 2, 0.4);
325    }
326
327    void TormaaKuolettavaan(PhysicsObject tormaaja, PhysicsObject kohde, Image kuolemiskuva, String teksti, Action poistaKontrollit)
328    {
329        kuolema.Play();
330
331        PhysicsObject kuollut = new PhysicsObject(tormaaja.Width, tormaaja.Height);
332        kuollut.Image = kuolemiskuva;
333        kuollut.Position = tormaaja.Position;
334        Add(kuollut);
335        tormaaja.Destroy();
336
337        if (tormaaja == pelaaja1) kuollut.CollisionIgnoreGroup = 2;
338        else kuollut.CollisionIgnoreGroup = 1;
339
340        poistaKontrollit();
341        MessageDisplay.Add(teksti +" died");
342        kuolemienMaaraLaskuri.Value++;
343        RemoveCollisionHandlers(tormaaja, null, kohde.Tag);
344        //if(tormaaja == pelaaja1) Camera.Follow(pelaaja2);
345        //else Camera.Follow(pelaaja1);
346    }
347
348    void Dying()
349    {
350        Timer.SingleShot(1.8, SeuraavaKentta);
351    }
352
353    void TormaaSeinaan(PhysicsObject tormaaja, PhysicsObject kohde)
354    {
355
356    }
357
358    void TormaaMuuriin(PhysicsObject tormaaja, PhysicsObject kohde)
359    {
360
361        hyppyLaskuri.Value = 0;
362        hyppyKaynnissa = true;
363    }
364
365    void LisaaNappaimet()
366    {
367        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
368        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
369        Keyboard.Listen(Key.NumPad0, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
370        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
371        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
372        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, LuoLeijuvaPalikka, "Luo palikan");
373        Mouse.ListenMovement(0.1, liikutaPalikkaa, "Liikuttaa palikkaa");
374
375        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
376        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
377        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
378        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
379
380
381        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
382        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
383        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
384      //Keyboard.Listen(Key.Space, ButtonState.Down, Leijuta, "Leijuu");
385
386        ControllerTwo.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
387        ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
388        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
389        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
390
391        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
392
393    }
394
395
396    void liikutaPalikkaa(AnalogState hiirenTila)
397    {
398        lapinakyvaPalikka.X = Mouse.PositionOnWorld.X;
399        lapinakyvaPalikka.Y = Mouse.PositionOnWorld.Y;
400
401        Vector hiirenLiike = hiirenTila.MouseMovement;
402    }
403
404
405    //void Leijuta()
406    //{
407    //    pelaaja1.Velocity = new Vector(0, 1);
408    //}
409
410    void PoistaPelaamisnappaimet1()
411    {
412
413        Keyboard.Disable(Key.Space);
414        Keyboard.Disable(Key.A);
415        Keyboard.Disable(Key.D);
416
417        ControllerOne.Disable(Button.A);
418        ControllerOne.Disable(Button.DPadRight);
419        ControllerOne.Disable(Button.DPadLeft);
420    }
421
422    void PoistaPelaamisnappaimet2()
423    {
424        Keyboard.Disable(Key.NumPad0);
425        Keyboard.Disable(Key.Right);
426        Keyboard.Disable(Key.Left);
427
428        ControllerTwo.Disable(Button.A);
429        ControllerTwo.Disable(Button.DPadRight);
430        ControllerTwo.Disable(Button.DPadLeft);
431    }
432
433
434    void Liikuta(PlatformCharacter hahmo, double nopeus)
435    {
436        hahmo.Walk(nopeus);
437    }
438
439    void Hyppaa(PlatformCharacter hahmo, double nopeus)
440    {
441        if (hyppyKaynnissa)
442        {
443            hahmo.ForceJump(nopeus);
444            hyppyLaskuri.Value += 1;
445        }
446    }
447
448    void LuoHyppyLaskuri()
449    {
450        hyppyLaskuri = new IntMeter(0);
451        hyppyLaskuri.MaxValue = 2;
452        hyppyLaskuri.UpperLimit += hypynSammutus;
453    }
454
455    void LuoKuolemienMääräLaskuri()
456    {
457        kuolemienMaaraLaskuri = new IntMeter(0);
458        kuolemienMaaraLaskuri.MaxValue = 2;
459        kuolemienMaaraLaskuri.UpperLimit += Dying;
460    }
461
462    void LuoPistelaskuri()
463    {
464        pisteLaskuri = new IntMeter(0);
465
466        Label pisteNaytto = new Label();
467        pisteNaytto.X = Screen.Right - 100;
468        pisteNaytto.Y = Screen.Top - 100;
469        pisteNaytto.TextColor = Color.Black;
470        pisteNaytto.Color = Color.Orange;
471        pisteNaytto.Title = "Points";
472
473        pisteNaytto.BindTo(pisteLaskuri);
474        Add(pisteNaytto);
475    }
476
477    void hypynSammutus()
478    {
479        hyppyKaynnissa = false;
480    }
481
482
483    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
484    {
485        maaliAani.Play();
486        MessageDisplay.Add("Score!");
487        tahti.Destroy();
488        pisteLaskuri.Value += 1;
489    }
490
491    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
492    {
493        if(peliKaynnissa)
494        {
495            MessageDisplay.Add("You Win!");
496            Gravity = Vector.Zero; // Pelaaja ei enää putoa alas
497            //StopAll(); // Pysäyttää kaikki oliot mm. vihollisen liikkeen
498            PoistaPelaamisnappaimet1();
499            PoistaPelaamisnappaimet2();
500            voitto.Play();
501            kenttaNro++;
502            Timer.SingleShot(1.3, SeuraavaKentta);
503            peliKaynnissa = false;
504        }
505    }
506
507}
Note: See TracBrowser for help on using the repository browser.