source: 2015/27/LukaP/LukanPeli/LukanPeli/LukanPeli/LukanPeli.cs @ 6793

Revision 6793, 8.3 KB checked in by lupepura, 4 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 LukanPeli : PhysicsGame
10{
11   
12    const double nopeus = 250;
13    const double hyppyNopeus = 850;
14    const int RUUDUN_KOKO = 40;
15
16    PlatformCharacter pelaaja1;
17
18    Image pelaajanKuva = LoadImage("Ukko");
19    Image tahtiKuva = LoadImage("Kolikko");
20    Image Vihunkuva = LoadImage("Vihu");
21    Image Maalinkuva = LoadImage("Maali");
22    Image taustaKuva = LoadImage("Background 3");
23    Image maankuva = LoadImage("Blokki");
24    Image Maanalainenkuva = LoadImage("Blokki");
25
26   
27
28
29
30    PhysicsObject Vihu;
31    IntMeter pistelaskuri;
32    int kenttaNro = 1;
33   
34
35   
36
37
38
39
40
41
42
43    SoundEffect maaliAani = LoadSoundEffect("maaliAani");
44    SoundEffect hyppyAani = LoadSoundEffect("HyppyAani");
45    SoundEffect KeraaKolikko = LoadSoundEffect("KeraaKolikko");
46    SoundEffect VihuKuolee = LoadSoundEffect("VihuKuolee");
47    SoundEffect VoittoAani = LoadSoundEffect("VoittoAani");
48    SoundEffect VihuKuolemaAani = LoadSoundEffect("VihuKuolemaAani");
49    SoundEffect TippuAani = LoadSoundEffect("TippuAani");
50
51    public override void Begin()
52    {
53
54
55        LuoAlkuValikko();
56       
57    }
58
59    void LuoKentta(string kentannimi)
60    {
61        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
62        kentta.SetTileMethod('#', LisaaTaso);
63        kentta.SetTileMethod('*', LisaaTahti);
64        kentta.SetTileMethod('N', LisaaPelaaja);
65        kentta.SetTileMethod('1', LisaaKolo);
66        kentta.SetTileMethod('V', LisaaVihu);
67        kentta.SetTileMethod('M', LisaaMaali);
68        IsFullScreen = true;
69       
70       
71        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
72       // Level.Background.CreateGradient(Color.White, Color.SkyBlue);
73          Level.Background.Image = taustaKuva;
74          Level.Background.TileToLevel();
75
76    }
77
78    void LisaaTaso(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        taso.Position = paikka;
82        taso.Color = Color.Green;
83        taso.Image = maankuva;
84        taso.Image = Maanalainenkuva;
85        Add(taso);
86    }
87    void LisaaKolo(Vector paikka, double leveys, double korkeus)
88    {
89        PhysicsObject kolo = PhysicsObject.CreateStaticObject(leveys, korkeus);
90        kolo.Position = paikka;
91        kolo.Tag = "kolo";
92        kolo.IgnoresCollisionResponse = true;
93        kolo.Color = Color.Transparent;
94        Add(kolo);
95    }
96
97    void LisaaTahti(Vector paikka, double leveys, double korkeus)
98    {
99        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        tahti.IgnoresCollisionResponse = true;
101        tahti.Position = paikka;
102        tahti.Image = tahtiKuva;
103        tahti.Tag = "tahti";
104        Add(tahti);
105    }
106
107    void LisaaMaali(Vector paikka, double leveys, double korkeus)
108    {
109        PhysicsObject maali = PhysicsObject.CreateStaticObject(leveys, korkeus);
110        maali.Tag = "maali";
111        maali.Position = paikka;
112        Add(maali);
113        maali.Image = Maalinkuva;
114    }
115
116    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
117    {
118        pelaaja1 = new PlatformCharacter(leveys, korkeus);
119        pelaaja1.Position = paikka;
120        pelaaja1.Mass = 4.0;
121        pelaaja1.Image = pelaajanKuva;
122        AddCollisionHandler(pelaaja1, "tahti", TormaaKolikkoon);
123        AddCollisionHandler(pelaaja1, "maali", TormaaMaaliin);
124        AddCollisionHandler(pelaaja1, "kolo", delegate(PhysicsObject a, PhysicsObject b)
125        {
126
127            a.Destroy();
128            MessageDisplay.Add("FAIL!");
129            Timer.SingleShot(1.0, SeuraavaKentta);
130            TippuAani.Play();
131            //ClearControls();
132        });
133        AddCollisionHandler(pelaaja1, "Pahis", PelaajaTormaaPahikseen);
134        Add(pelaaja1);
135    }
136
137    void LisaaNappaimet()
138    {
139        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
140        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
141
142
143        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
144        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
145        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
146
147        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
148
149        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
150        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
151        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
152
153        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
154    }
155
156    void Liikuta(PlatformCharacter hahmo, double nopeus)
157    {
158        hahmo.Walk(nopeus);
159    }
160
161    void Hyppaa(PlatformCharacter hahmo, double nopeus)
162    {
163        hahmo.Jump(nopeus);
164        hyppyAani.Play();
165    }
166
167    void TormaaKolikkoon(PhysicsObject hahmo, PhysicsObject tahti)
168    {
169        KeraaKolikko.Play();
170        MessageDisplay.Add("1X Kolikko Kerätty!");
171        tahti.Destroy();
172        pistelaskuri.Value += 1;
173
174
175
176    }
177
178    void PelaajaTormaaPahikseen(PhysicsObject pelaaja, PhysicsObject pahis)
179    {
180       
181        if (pahis.Top - 0.2 * pahis.Height< pelaaja.Bottom)
182        {
183            pahis.Destroy();
184            (pelaaja as PlatformCharacter).ForceJump(nopeus * 4);
185            VihuKuolee.Play();
186            MessageDisplay.Add("Tuhosit Puolustajan");
187        }
188        else
189        {
190            pelaaja.Destroy();           
191            MessageDisplay.Add("FAIL!");
192            VihuKuolemaAani.Play();
193            Timer.SingleShot(1.0, SeuraavaKentta);
194        } 
195    }
196
197
198    void LisaaVihu(Vector paikka, double leveys, double korkeus)
199    {
200        PlatformCharacter Vihu = new PlatformCharacter(40, 30);
201        Vihu.Shape = Shape.Rectangle;
202        Vihu.Mass = 10.0;
203        Add(Vihu);
204        Vihu.Position = paikka;
205        Vihu.Tag = "Pahis";
206        Vihu.Image = Vihunkuva;
207
208
209        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
210        tasoAivot.Speed = 250;
211        Vihu.Brain = tasoAivot;
212
213
214
215
216
217    }
218
219
220
221   void Luopistelaskuri()
222    {
223         pistelaskuri = new IntMeter(0);
224
225        Label pisteNaytto = new Label();
226        pisteNaytto.X = Screen.Left + 100;
227        pisteNaytto.Y = Screen.Top - 100;
228        pisteNaytto.TextColor = Color.Black;
229        pisteNaytto.Color = Color.Blue;
230        pisteNaytto.Title = "kolikot";
231
232        pisteNaytto.BindTo(pistelaskuri);
233        Add(pisteNaytto);
234    }
235
236
237
238
239    public void SeuraavaKentta()
240    {
241        ClearAll();
242
243        if (kenttaNro == 1) LuoKentta("kentta1");
244        else if (kenttaNro == 2) LuoKentta("kentta2");
245        else if (kenttaNro == 3) LuoKentta("kentta3");
246        else if (kenttaNro > 3) Exit();
247
248        LisaaNappaimet();
249        Luopistelaskuri();
250
251
252
253        Camera.Follow(pelaaja1);
254        Camera.ZoomFactor = 1.2;
255        Camera.StayInLevel = true;
256        Gravity = new Vector(0, -1000);
257
258    }
259
260   
261
262    void TormaaMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
263    {
264        //Kasvatetaan kenttänumeroa yhdellä ja siirrytään seuraavaan kenttään:
265        kenttaNro++;
266        VoittoAani.Play();
267        SeuraavaKentta();
268    }
269
270    void TormasiPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
271    {
272        //Sama kenttä ladataan alusta jos kenttänumeroa ei kasvateta:
273        SeuraavaKentta();
274    }
275
276   
277   void LuoAlkuValikko()
278   {
279    MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita Peli", "Lopeta");
280
281     Add(alkuValikko);
282
283
284     alkuValikko.AddItemHandler(0, AloitaPeli);
285     alkuValikko.AddItemHandler(1, Exit);
286     alkuValikko.DefaultCancel = 1;
287     alkuValikko.Color = Color.Red;
288   
289
290
291   }
292   void AloitaPeli()
293   {
294       SeuraavaKentta();
295   }
296
297   
298   
299
300
301
302
303   
304
305   void luotausta()
306   {
307       Level.Background.Image = taustaKuva;
308   }
309
310
311   
312
313
314
315
316   
317   }
318
319
320
321
322
323
324
325
326
327
328
Note: See TracBrowser for help on using the repository browser.