source: 2013/26/WilleK/Ensimmäinen Peli/Ensimmäinen Peli/Ensimmäinen Peli/Ensimmäinen_Peli.cs @ 4315

Revision 4315, 13.1 KB checked in by wiaukota, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Ensimmäinen_Peli : PhysicsGame
10{
11    IntMeter nopeus;
12    IntMeter hyppyNopeus;
13    IntMeter tähtilaskuri;
14    IntMeter avainlaskuri;
15    const int RUUDUN_KOKO = 40;
16
17    Vector alkupiste;
18
19    PlatformCharacter pelaaja1;
20
21    Image pelaajanKuva = LoadImage("norsu");
22    Image tahtiKuva = LoadImage("tahti");
23    Image PosuKuva = LoadImage("Possu");
24    Image LisäVoima = LoadImage("Voima");
25    Image Ruoho = LoadImage("GrassTexture");
26    Image Palikka2 = LoadImage("alkuun");
27    Image tyyppiLyoKuva = LoadImage("TyyppiLyo");
28    Image nyrkkikuva = LoadImage("Nyrkki");
29    Image maali1 = LoadImage("Maali2");
30    Image piikki2 = LoadImage("piikit");
31    Image avain2 = LoadImage("avain");
32    Image LukkoKuva = LoadImage("lukko");
33    Image SeinaKuva = LoadImage("seina");
34
35    SoundEffect maaliAani = LoadSoundEffect("maali");
36    DoubleMeter elamaLaskuri;
37
38    int kenttaNro = 1;
39
40    public override void Begin()
41    {
42        SeuraavaKentta();
43    }
44
45    void SeuraavaKentta()
46    {
47        nopeus = new IntMeter(200);
48        hyppyNopeus = new IntMeter(700);
49        tähtilaskuri = new IntMeter(0);
50        avainlaskuri = new IntMeter(0);
51
52        ClearAll();
53        Gravity = new Vector(0, -1000);
54        LuoElamaLaskuri();
55
56        if (kenttaNro == 1)
57        {
58            LuoKentta("kentta1");
59            MediaPlayer.Play("GroundTheme");
60        }
61        else if (kenttaNro == 2)
62        {
63            LuoKentta("kentta2");
64            MediaPlayer.Play("GroundTheme");
65        }
66        else if (kenttaNro == 3)
67        {
68            LuoKentta("Kentta3");
69            MediaPlayer.Play("GroundTheme");
70        }
71        else if (kenttaNro == 4)
72        {
73            LuoKentta("kentta4");
74            Level.Background.CreateGradient(Color.Black, Color.LightGray);
75            MediaPlayer.Play("MoonCastle");
76        }
77        else if (kenttaNro == 5)
78        {
79            LuoKentta("kentta5");
80            Level.Background.CreateGradient(Color.Black, Color.LightGray);
81            MediaPlayer.Play("MoonCastle");
82        }
83
84        else if (kenttaNro == 6)
85        {
86            LuoKentta("kentta6");
87            Level.Background.CreateGradient(Color.Black, Color.LightGray);
88            MediaPlayer.Play("MoonCastle");
89        }
90
91        else if (kenttaNro == 7)
92        {
93            LuoKentta("kentta7");
94            Level.Background.CreateGradient(Color.Black, Color.LightGray);
95            MediaPlayer.Play("MoonCastle");
96        }
97
98        else if (kenttaNro == 8)
99        {
100            LuoKentta("kentta8");
101            MediaPlayer.Play("GroundTheme");
102        }
103        else Exit();
104
105        LisaaNappaimet();
106        Camera.Follow(pelaaja1);
107        Camera.ZoomFactor = 1.2;
108        Camera.StayInLevel = true;
109        MediaPlayer.IsRepeating = true;
110        MediaPlayer.Volume = 0.7;
111       
112    }
113
114    void LuoKentta(string kentanNimi)
115    {
116        ColorTileMap kentta = ColorTileMap.FromLevelAsset(kentanNimi);
117        kentta.SetTileMethod(Color.Black, LisaaTaso);
118        kentta.SetTileMethod("C0C0C0", LisaaMetalli);
119        kentta.SetTileMethod("FFD800", LisaaTahti);
120        kentta.SetTileMethod("4CFF00", LisaaPelaaja);
121        kentta.SetTileMethod("0026FF", LisaaPalikka);
122        kentta.SetTileMethod("FF0000", LisaaVihu);
123        kentta.SetTileMethod("B6FF00", LisaaRuoho);
124        kentta.SetTileMethod("404040", Palikka3);
125        kentta.SetTileMethod("FF006E", Maali);
126        kentta.SetTileMethod("808080", Piikki);
127        kentta.SetTileMethod("0094FF", LisaaAvain);
128        kentta.SetTileMethod("4800FF", LisaaLukko);
129        kentta.SetTileMethod("FF00DC", LisaaSeina);
130        kentta.SetTileMethod("FF7FED", LisaaVaakaSeina);
131
132        //kentta.SetTileMethod("")
133        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
134        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
135
136        Label pisteNaytto = new Label();
137        pisteNaytto.X = Screen.Right - 100;
138        pisteNaytto.Y = Screen.Top - 100;
139        pisteNaytto.TextColor = Color.Black;
140        pisteNaytto.Color = Color.Transparent;
141
142        pisteNaytto.BindTo(tähtilaskuri);
143        Add(pisteNaytto);
144    }
145
146    void LisaaSeina(Vector paikka, double leveys, double korkeus)
147    {
148        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus * 2);
149        seina.Position = paikka;
150        seina.Y -= korkeus/2;
151        seina.Image = SeinaKuva;
152        seina.Tag = "Seina";
153        Add(seina);
154    }
155
156    void LisaaVaakaSeina(Vector paikka, double leveys, double korkeus)
157    {
158        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus * 2);
159        seina.Angle = Angle.FromDegrees(90);
160        seina.Position = paikka;
161        seina.X += leveys / 2;
162        seina.Image = SeinaKuva;
163        seina.Tag = "Seina";
164        Add(seina);
165    }
166
167    void LisaaLukko(Vector paikka, double leveys, double korkeus)
168    {
169        PhysicsObject lukko = PhysicsObject.CreateStaticObject(leveys, korkeus);
170        lukko.Position = paikka;
171        lukko.Image = LukkoKuva;
172        lukko.Tag = "Lukko";
173        Add(lukko);
174    }
175
176    void LisaaAvain(Vector paikka, double leveys, double korkeus)
177    {
178        PhysicsObject avain = PhysicsObject.CreateStaticObject(leveys, korkeus);
179        avain.IgnoresCollisionResponse = true;
180        avain.Position = paikka;
181        avain.Image = avain2;
182        avain.Tag = "Avain";
183        Add(avain);
184    }
185
186    void Piikki(Vector paikka, double leveys, double korkeus)
187    {
188        PhysicsObject piikki1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
189        piikki1.Position = paikka;
190        piikki1.Image = piikki2;
191        piikki1.Tag = "Piikki";
192        Add(piikki1);
193    }
194
195    void Palikka3(Vector paikka, double leveys, double korkeus)
196    {
197        PhysicsObject Palikka3 = PhysicsObject.CreateStaticObject(leveys, korkeus);
198        Palikka3.Image = Palikka2;
199        Palikka3.Position = paikka;
200        Add(Palikka3);
201    }
202
203    void LisaaRuoho(Vector paikka, double leveys, double korkeus)
204    {
205        PhysicsObject Ruoho1 = PhysicsObject.CreateStaticObject(leveys, korkeus);
206        Ruoho1.Image = Ruoho;
207        Ruoho1.Position = paikka;
208        Add(Ruoho1);
209    }
210
211    void LuoElamaLaskuri()
212    {
213        elamaLaskuri = new DoubleMeter(10);
214        elamaLaskuri.MaxValue = 10;
215        elamaLaskuri.LowerLimit += ElamaLoppui;
216
217        ProgressBar elamaPalkki = new ProgressBar(150, 20);
218        elamaPalkki.Left = Screen.Left + 30;
219        elamaPalkki.Top = Screen.Top - 30;
220        elamaPalkki.BindTo(elamaLaskuri);
221        elamaPalkki.BorderColor = Color.Black;
222        Add(elamaPalkki);
223    }
224
225    void ElamaLoppui()
226    {
227        MessageDisplay.Add("Elämät loppuivat.");
228        pelaaja1.Position = alkupiste;
229        elamaLaskuri.Value = elamaLaskuri.MaxValue;
230    }
231
232    void LisaaVihu(Vector paikka, double leveys, double korkeus)
233    {
234        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
235        vihu.Position = paikka;
236        vihu.Image = PosuKuva;
237        vihu.Brain = new PlatformWandererBrain();
238        vihu.Tag = "pahis";
239        Add(vihu);
240    }
241
242    void LisaaTaso(Vector paikka, double leveys, double korkeus)
243    {
244        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
245        taso.Position = paikka;
246        taso.Color = Color.Brown;
247        Add(taso);
248    }
249
250    void LisaaMetalli(Vector paikka, double leveys, double korkeus)
251    {
252        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
253        taso.Position = paikka;
254        taso.Color = Color.Gray;
255        Add(taso);
256    }
257
258    void LisaaPalikka(Vector paikka, double leveys, double korkeus)
259    {
260        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
261        palikka.IgnoresCollisionResponse = true;
262        palikka.Image = LisäVoima;
263        palikka.Position = paikka;
264        palikka.Tag = "palikka";
265        Add(palikka);
266    }
267
268    void LisaaTahti(Vector paikka, double leveys, double korkeus)
269    {
270        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
271        tahti.IgnoresCollisionResponse = true;
272        tahti.Position = paikka;
273        tahti.Image = tahtiKuva;
274        tahti.Tag = "tahti";
275        Add(tahti);
276    }
277
278    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
279    {
280        alkupiste = paikka;
281        pelaaja1 = new PlatformCharacter(leveys, korkeus);
282        pelaaja1.Position = paikka;
283        pelaaja1.Mass = 4.0;
284        pelaaja1.Image = pelaajanKuva;
285        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
286        AddCollisionHandler(pelaaja1, "palikka", TormaaPalikkaan);
287        AddCollisionHandler(pelaaja1, "pahis", CollisionHandler.AddMeterValue(elamaLaskuri, -1));
288        AddCollisionHandler(pelaaja1, "maali", TormasiMaaliin);
289        AddCollisionHandler(pelaaja1, "Piikki", TormasiPiikkiin);
290        AddCollisionHandler(pelaaja1, "Avain", TormasiAvaimeen);
291        AddCollisionHandler(pelaaja1, "Seina", TormasiSeinaan);
292        Add(pelaaja1);
293    }
294
295    void TormasiSeinaan(PhysicsObject hahmo, PhysicsObject seina)
296    {
297        if (avainlaskuri.Value > 0)
298        {
299            seina.Destroy();
300            avainlaskuri.Value--;
301        }
302    }
303
304    void TormasiAvaimeen(PhysicsObject hahmo, PhysicsObject avain)
305    {
306        maaliAani.Play();
307        avain.Destroy();
308        avainlaskuri.Value++;
309    }
310
311    void TormasiPiikkiin(PhysicsObject pelaaja, PhysicsObject maali)
312    {
313        ElamaLoppui();
314    }
315
316    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
317    {
318        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
319        kenttaNro++;
320        SeuraavaKentta();
321    }
322
323    void Maali(Vector paikka, double leveys, double korkeus)
324    {
325        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
326        maali.Image = maali1;
327        maali.Position = paikka;
328        maali.Tag = "maali";
329        Add(maali);
330    }
331
332
333    void LisaaNappaimet()
334    {
335        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
336        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
337        Keyboard.Listen(Key.R, ButtonState.Pressed, SeuraavaKentta, "Pelaa Uudestaan");
338
339        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus, -1);
340        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus, 1);
341        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
342        Keyboard.Listen(Key.Space, ButtonState.Pressed, Lyo, "Pelaaja Lyö", pelaaja1);
343
344        //Mouse.ListenMovement(0.1, Liikuta, null, pelaaja1);
345
346        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
347
348        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, nopeus, 1);
349        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus, -1);
350        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
351
352        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
353    }
354
355    void Lyo(PlatformCharacter hahmo)
356    {
357        hahmo.Image = tyyppiLyoKuva;
358        GameObject nyrkki = new GameObject(hahmo.Width, hahmo.Height);
359        nyrkki.Image = nyrkkikuva;
360        hahmo.Add(nyrkki);
361        int suunta = hahmo.FacingDirection == Direction.Right ? 1 : -1;
362        if (hahmo.FacingDirection == Direction.Left) nyrkki.Image = Image.Mirror(nyrkki.Image);
363        nyrkki.Position = new Vector(suunta * hahmo.Width, 0);
364        //nyrkki.Position = hahmo.Position + new Vector(hahmo.Width, 0);
365        //Add(nyrkki);
366
367        List<GameObject> vihutLahella = GetObjectsAt(hahmo.Position + nyrkki.Position, "pahis", nyrkki.Width);
368        vihutLahella.ForEach(x => x.Destroy());
369
370        Timer.SingleShot(0.2, delegate
371        {
372            hahmo.Image = pelaajanKuva;
373            nyrkki.Destroy();
374        });
375    }
376
377    void Liikuta(PlatformCharacter hahmo, IntMeter nopeus, int suunta)
378    {
379        hahmo.Walk(nopeus.Value * suunta);
380    }
381
382    void Hyppaa(PlatformCharacter hahmo, IntMeter nopeus)
383    {
384        hahmo.Jump(nopeus);
385    }
386
387    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
388    {
389        maaliAani.Play();
390        tahti.Destroy();
391        tähtilaskuri.Value++;
392    }
393
394    void TormaaPalikkaan(PhysicsObject hahmo, PhysicsObject palikka)
395    {
396        maaliAani.Play();
397        palikka.Destroy();
398        hyppyNopeus.Value += 200;
399        MessageDisplay.Add("Super Hyppy");
400        Timer.SingleShot(60, PalautaNopeus);
401    }
402
403    void PalautaNopeus()
404    {
405        hyppyNopeus.Value -= 100;
406    }
407}
Note: See TracBrowser for help on using the repository browser.