source: 2014/koodauskerho/38/VilhoP/Oma/Lintupeli.txt @ 5781

Revision 5781, 8.2 KB checked in by sieerinn, 5 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 = 40;
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("TipuIsoSiivet");
24    Image pelaajanKuolemakuva = LoadImage("TipuIsoKuollut3");
25    Image vihollisenKuva = LoadImage("vihollinen1");
26
27    Image taustaKuva = LoadImage("vaalea2");
28
29
30    SoundEffect maaliAani = LoadSoundEffect("Potaat");
31    SoundEffect kuolema = LoadSoundEffect("YouDied");
32
33    IntMeter hyppyLaskuri;
34
35    bool peliKaynnissa = true;
36    bool hyppyKaynnissa = true;
37
38    public override void Begin()
39        {
40
41            SetWindowSize(1280, 720);
42        Gravity = new Vector(0, -1000);
43
44        LuoKentta();
45        LisaaNappaimet();
46
47        Camera.Follow(pelaaja1);
48        Camera.ZoomFactor = 2;
49        Camera.StayInLevel = true;
50        Camera.FollowOffset = new Vector(Screen.Width / 5 - RUUDUN_KOKO, 0.0);
51
52        LuoHyppyLaskuri();
53
54        Level.Background.Image = taustaKuva;
55    }
56
57
58    void LuoKentta()
59    {
60        TileMap kentta = TileMap.FromLevelAsset("kentta2");
61        kentta.SetTileMethod('M', LisaaMuuri);
62        kentta.SetTileMethod('#', LisaaTaso);
63        kentta.SetTileMethod('*', LisaaTahti);
64        kentta.SetTileMethod('L', LisaaPelaaja);
65        kentta.SetTileMethod('v', LisaaVihollinen);
66        kentta.SetTileMethod('P', LisaaPalikka);
67        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
68       
69        // Level.CreateBorders();
70        Level.CreateLeftBorder();
71        Level.CreateTopBorder();
72        Level.CreateBottomBorder();
73        PhysicsObject oikeaReuna = Level.CreateRightBorder();
74        oikeaReuna.Tag = "oikea";
75       
76        Level.Background.CreateGradient(Color.Red, Color.SkyBlue);
77    }
78
79    void LisaaMuuri(Vector paikka, double leveys, double korkeus)
80    {
81        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
82        muuri.Position = paikka;
83        Add(muuri);
84        muuri.Color = (Color.Brown);
85        muuri.Tag = "lattia";
86    }
87
88    void LisaaTaso(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
91        taso.Position = paikka;
92        taso.Color = (Color.Red);
93        taso.Tag = "seina";
94        Add(taso);
95    }
96
97    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
98    {
99        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        palikka.Position = paikka;
101        palikka.Color = (Color.DarkJungleGreen);
102        Add(palikka);
103        palikka.IgnoresGravity = true;
104        palikka.CanRotate = true;
105    }
106
107    void LisaaTahti(Vector paikka, double leveys, double korkeus)
108    {
109        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
110        tahti.IgnoresCollisionResponse = true;
111        tahti.Position = paikka;
112        tahti.Image = tahtiKuva;
113        tahti.Tag = "tahti";
114        Add(tahti);
115    }
116
117    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
118    {
119        pelaaja1 = new PlatformCharacter(leveys, korkeus);
120        pelaaja1.Position = paikka;
121        pelaaja1.Mass = 4.0;
122        pelaaja1.Image = pelaajanKuva;
123        pelaaja1.AnimJump = new Animation(pelaajanHyppykuvat);
124        pelaaja1.AnimFall = new Animation(pelaajanKuva);
125        pelaaja1.AnimWalk = new Animation(tipunKavely);
126        pelaaja1.AnimWalk.FPS = 20;
127
128        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
129        Add(pelaaja1);
130        AddCollisionHandler(pelaaja1, "seina", TormaaKuolettavaan);
131        AddCollisionHandler(pelaaja1, "vihu", TormaaKuolettavaan);
132
133        AddCollisionHandler(pelaaja1, "oikea", TormaaOikeaanReunaan);
134        AddCollisionHandler(pelaaja1, "lattia", TormaaMuuriin);
135    }
136
137    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
138    {
139        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
140        vihollinen.Position = paikka;
141        Add(vihollinen);
142        vihollinen.IgnoresGravity = true;
143        vihollinen.CanRotate = false;
144        vihollinen.IgnoresCollisionResponse = true;
145        vihollinen.Image =vihollisenKuva;
146        vihollinen.Tag = "vihu";
147        vihollinen.Animation = new Animation(korpinLento);
148        vihollinen.Animation.FPS = 7;
149        vihollinen.Animation.Start();
150        //Asetetaan vihollinen liikkumaan ylös-alas:
151        vihollinen.Oscillate(new Vector(0, 1), korkeus * 2, 0.4);
152    }
153
154    void TormaaKuolettavaan(PhysicsObject tormaaja, PhysicsObject kohde)
155    {
156        if (peliKaynnissa)
157        {
158            kuolema.Play();
159
160            // Asetetaan pelaajan normaali kuva kuolemiskuvaksi:
161            pelaaja1.Image = pelaajanKuolemakuva;
162
163            //Asetetaan pelaajan animaatiot kuolemisen animaatioksi (voi sisältää useammankin kuvan):
164            Animation kuolemisanimaatio = new Animation(pelaajanKuolemakuva);
165            pelaaja1.AnimFall = kuolemisanimaatio;
166            pelaaja1.AnimJump = kuolemisanimaatio;
167
168            MessageDisplay.Add("You Died!");
169            peliKaynnissa = false;
170            PoistaPelaamisnappaimet();
171        }
172   
173   
174}
175
176
177    void TormaaMuuriin(PhysicsObject tormaaja, PhysicsObject kohde)
178    {
179
180        hyppyLaskuri.Value = 0;
181        hyppyKaynnissa = true;
182    }
183
184    void LisaaNappaimet()
185    {
186        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
187        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
188        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
189        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
190        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
191
192
193        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
194        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
195        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
196        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
197
198
199        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
200
201    }
202
203
204    void PoistaPelaamisnappaimet()
205    {
206        Keyboard.Disable(Key.Space);
207        Keyboard.Disable(Key.Right);
208        Keyboard.Disable(Key.Left);
209
210
211        ControllerOne.Disable(Button.A);
212        ControllerOne.Disable(Button.DPadRight);
213        ControllerOne.Disable(Button.DPadLeft);
214    }
215
216    void Liikuta(PlatformCharacter hahmo, double nopeus)
217    {
218        hahmo.Walk(nopeus);
219    }
220
221    void Hyppaa(PlatformCharacter hahmo, double nopeus)
222    {
223        if (hyppyKaynnissa)
224        {
225        hahmo.ForceJump(nopeus);
226        hyppyLaskuri.Value += 1;
227        }
228    }
229
230    void LuoHyppyLaskuri()
231    {
232        hyppyLaskuri = new IntMeter(0);
233        hyppyLaskuri.MaxValue = 2;
234        hyppyLaskuri.UpperLimit += hypynSammutus;
235    }
236
237    void hypynSammutus()
238    {
239        hyppyKaynnissa = false;
240    }
241
242
243
244
245
246
247    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
248    {
249        maaliAani.Play();
250        MessageDisplay.Add("Potaat!");
251        tahti.Destroy();
252    }
253
254    void TormaaOikeaanReunaan(PhysicsObject tormaaja, PhysicsObject kohde)
255    {
256        MessageDisplay.Add("You Win!");
257        Gravity = Vector.Zero; // Pelaaja ei enää putoa alas
258        StopAll(); // Pysäyttää kaikki oliot mm. vihollisen liikkeen
259        PoistaPelaamisnappaimet();
260    }
261}
Note: See TracBrowser for help on using the repository browser.