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

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