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

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