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

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