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

Revision 5781, 10.6 KB checked in by sieerinn, 9 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    PlatformCharacter pelaaja1;
17    private Image[] tipunKavely = LoadImages("UusiKavely2", "TipuIso2", "UusiKavely3", "TipuIso2", "UusiKavely2", "TipuIso2", "UusiKavely1");
18    private Image[] korpinLento = LoadImages("KorppiSiipi2", "Korppi2");
19
20    Image pelaajanKuva = LoadImage("TipuIso2");
21    Image tahtiKuva = LoadImage("tahti");
22    Image[] pelaajanHyppykuvat = LoadImages("TipuIsoSiivet", "TipuIso2", "TipuIso2");
23    //Image[] pelaajanPutoamiskuva = LoadImages("TipuIso2");
24    Image pelaajanKuolemakuva = LoadImage("TipuIsoKuollut3");
25    Image vihollisenKuva = LoadImage("vihollinen1");
26    //Image[] seisomisKuva = LoadImage("TipuIso2");
27
28    Image taustaKuva = LoadImage("Kanala1");
29
30    SoundEffect maaliAani = LoadSoundEffect("Potaat");
31    SoundEffect kuolema = LoadSoundEffect("YouDied");
32    SoundEffect voitto = LoadSoundEffect("YouWin");
33
34    IntMeter hyppyLaskuri;
35    int kenttaNro = 1;
36
37    bool hyppyKaynnissa = true;
38    bool peliKaynnissa = false;
39
40    public override void Begin()
41        {
42            SmoothTextures = false;
43            SeuraavaKentta();
44
45        /*MultiSelectWindow alkuValikko = new MultiSelectWindow("Speed Chick", "Start", "Exit");
46        Add(alkuValikko);
47        alkuValikko.AddItemHandler(0, AloitaPeli);
48        alkuValikko.AddItemHandler(1, Exit);
49        alkuValikko.DefaultCancel = 1;
50        */
51    }
52
53    void SeuraavaKentta()
54    {
55        ClearAll();
56
57        if (kenttaNro == 1) LuoKentta("kentta1");
58        else if (kenttaNro == 2) LuoKentta("kentta2");
59        else if (kenttaNro == 3) LuoKentta("kentta3");
60        else if (kenttaNro > 3) Exit();
61
62        LisaaTausta();
63        LisaaNappaimet();
64        peliKaynnissa = true;
65    }
66
67
68    void AloitaPeli()
69    {
70
71    }
72
73    void LuoKentta(string KentanNimi)
74    {
75        TileMap kentta = TileMap.FromLevelAsset(KentanNimi);
76        kentta.SetTileMethod('M', LisaaMuuri);
77        kentta.SetTileMethod('#', LisaaTaso);
78        kentta.SetTileMethod('*', LisaaTahti);
79        kentta.SetTileMethod('L', LisaaPelaaja);
80        kentta.SetTileMethod('v', LisaaVihollinen);
81        kentta.SetTileMethod('P', LisaaPalikka);
82        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
83       
84        // Level.CreateBorders();
85        Level.CreateLeftBorder();
86        Level.CreateTopBorder();
87        Level.CreateBottomBorder();
88        PhysicsObject oikeaReuna = Level.CreateRightBorder();
89        oikeaReuna.Tag = "oikea";
90       
91        Level.Background.CreateGradient(Color.Red, Color.SkyBlue);
92
93        Gravity = new Vector(0, -1000);
94
95
96        Camera.FollowX(pelaaja1);
97        Camera.ZoomFactor = 1.7;
98        Camera.StayInLevel = true;
99        Camera.FollowOffset = new Vector(Screen.Width / 5 - RUUDUN_KOKO, 0.0);
100        //Camera.ZoomToLevel();
101
102        LuoHyppyLaskuri();
103
104        //Level.Background.Image = taustaKuva;
105        //Level.Background.TileToLevel();
106        //Level.Background.ScaleToLevelFull();
107
108        IsFullScreen = true;
109        // SetWindowSize(1280, 720, true);
110    }
111
112    void LisaaTausta()
113    {
114        GameObject kanalaTausta = new GameObject(Screen.Width * 2.0, Screen.Height);
115        kanalaTausta.Image = taustaKuva;
116        Add(kanalaTausta, -3);
117        Layers[-3].RelativeTransition = new Vector(0.5, 0.5);
118    }
119
120    void LisaaMuuri(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, 15);
123        PhysicsObject muurivasen = PhysicsObject.CreateStaticObject(25, 30);
124        PhysicsObject muurioikea = PhysicsObject.CreateStaticObject(25, 30);
125        PhysicsObject muuriala = PhysicsObject.CreateStaticObject(leveys, 5);
126
127        muuri.Position = new Vector(paikka.X, paikka.Y + 17.5);
128        muurivasen.Position = new Vector(paikka.X-12.5, paikka.Y-5);
129        muurioikea.Position = new Vector(paikka.X+12.5, paikka.Y-5);
130        muuriala.Position = new Vector(paikka.X, paikka.Y -22.5);
131
132        Add(muuri);
133        Add(muurivasen);
134        Add(muurioikea);
135        Add(muuriala);
136
137        muuri.Color = (Color.Brown);
138        muurivasen.Color = (Color.Blue);
139        muurioikea.Color = (Color.Black);
140        muuriala.Color = (Color.Red);
141
142        muuri.Tag = "lattia";
143        muurivasen.Tag = "vasenSeinä";
144        muurioikea.Tag = "oikeaseinä";
145        muuriala.Tag = "katto";
146    }
147
148    void LisaaTaso(Vector paikka, double leveys, double korkeus)
149    {
150        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
151        taso.Position = paikka;
152        taso.Color = (Color.Red);
153        taso.Tag = "seina";
154        Add(taso);
155    }
156
157    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
158    {
159        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
160        palikka.Position = paikka;
161        palikka.Color = (Color.Azure);
162        Add(palikka);
163        palikka.IgnoresGravity = true;
164        palikka.CanRotate = true;
165        hyppyKaynnissa = false;
166    }
167
168    void LisaaTahti(Vector paikka, double leveys, double korkeus)
169    {
170        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
171        tahti.IgnoresCollisionResponse = true;
172        tahti.Position = paikka;
173        tahti.Image = tahtiKuva;
174        tahti.Tag = "tahti";
175        Add(tahti);
176    }
177
178    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
179    {
180        pelaaja1 = new PlatformCharacter(leveys, korkeus);
181        pelaaja1.Position = paikka;
182        pelaaja1.Mass = 4.0;
183        pelaaja1.Image = pelaajanKuva;
184        pelaaja1.AnimJump = new Animation(pelaajanHyppykuvat);
185        pelaaja1.AnimFall = new Animation(pelaajanKuva);
186        pelaaja1.AnimWalk = new Animation(tipunKavely);
187        pelaaja1.AnimIdle = new Animation(pelaajanKuva);
188        //pelaaja1.AnimFall = new Animation(pelaajanPutoamiskuva);
189        pelaaja1.AnimWalk.FPS = 20;
190
191        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
192        Add(pelaaja1);
193        AddCollisionHandler(pelaaja1, "seina", TormaaKuolettavaan);
194        AddCollisionHandler(pelaaja1, "vihu", TormaaKuolettavaan);
195
196        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
197        AddCollisionHandler(pelaaja1, "lattia", TormaaMuuriin);
198    }
199
200    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
201    {
202        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
203        vihollinen.Position = paikka;
204        Add(vihollinen);
205        vihollinen.IgnoresGravity = true;
206        vihollinen.CanRotate = false;
207        vihollinen.IgnoresCollisionResponse = true;
208        vihollinen.Image =vihollisenKuva;
209        vihollinen.Tag = "vihu";
210        vihollinen.Animation = new Animation(korpinLento);
211        vihollinen.Animation.FPS = 7;
212        vihollinen.Animation.Start();
213        //Asetetaan vihollinen liikkumaan ylös-alas:
214        vihollinen.Oscillate(new Vector(0, 1), korkeus * 2, 0.4);
215    }
216
217    void TormaaKuolettavaan(PhysicsObject tormaaja, PhysicsObject kohde)
218    {
219        if (peliKaynnissa)
220        {
221            kuolema.Play();
222
223            // Asetetaan pelaajan normaali kuva kuolemiskuvaksi:
224            pelaaja1.Image = pelaajanKuolemakuva;
225
226            //Asetetaan pelaajan animaatiot kuolemisen animaatioksi (voi sisältää useammankin kuvan):
227            Animation kuolemisanimaatio = new Animation(pelaajanKuolemakuva);
228            pelaaja1.AnimFall = kuolemisanimaatio;
229            pelaaja1.AnimJump = kuolemisanimaatio;
230            pelaaja1.AnimIdle = kuolemisanimaatio;
231
232            MessageDisplay.Add("You Died!");
233
234            PoistaPelaamisnappaimet();
235            Timer.SingleShot(1.8, SeuraavaKentta);
236            peliKaynnissa = false;
237        }
238}
239
240
241    void TormaaMuuriin(PhysicsObject tormaaja, PhysicsObject kohde)
242    {
243
244        hyppyLaskuri.Value = 0;
245        hyppyKaynnissa = true;
246    }
247
248    void LisaaNappaimet()
249    {
250        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
251        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
252        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
253        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
254        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
255
256
257        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
258        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
259        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
260        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
261
262
263        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
264
265    }
266
267
268    void PoistaPelaamisnappaimet()
269    {
270        Keyboard.Disable(Key.Space);
271        Keyboard.Disable(Key.Right);
272        Keyboard.Disable(Key.Left);
273
274
275        ControllerOne.Disable(Button.A);
276        ControllerOne.Disable(Button.DPadRight);
277        ControllerOne.Disable(Button.DPadLeft);
278    }
279
280    void Liikuta(PlatformCharacter hahmo, double nopeus)
281    {
282        hahmo.Walk(nopeus);
283    }
284
285    void Hyppaa(PlatformCharacter hahmo, double nopeus)
286    {
287        if (hyppyKaynnissa)
288        {
289        hahmo.ForceJump(nopeus);
290        hyppyLaskuri.Value += 1;
291        }
292    }
293
294    void LuoHyppyLaskuri()
295    {
296        hyppyLaskuri = new IntMeter(0);
297        hyppyLaskuri.MaxValue = 2;
298        hyppyLaskuri.UpperLimit += hypynSammutus;
299    }
300
301    void hypynSammutus()
302    {
303        hyppyKaynnissa = false;
304    }
305
306
307    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
308    {
309        maaliAani.Play();
310        MessageDisplay.Add("Score!");
311        tahti.Destroy();
312    }
313
314    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
315    {
316        MessageDisplay.Add("You Win!");
317        Gravity = Vector.Zero; // Pelaaja ei enää putoa alas
318        //StopAll(); // Pysäyttää kaikki oliot mm. vihollisen liikkeen
319        PoistaPelaamisnappaimet();
320        voitto.Play();
321        kenttaNro++;
322        Timer.SingleShot(1.3, SeuraavaKentta);
323    }
324
325}
Note: See TracBrowser for help on using the repository browser.