source: 2015/27/AnttiV/hyppelypeli/hyppelypeli/hyppelypeli/hyppelypeli.cs @ 6761

Revision 6761, 11.7 KB checked in by misakana, 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 hyppelypeli : PhysicsGame
10{
11
12    List<Label> valikonKohdat;
13    //List<Label>kohta1;
14
15    int kenttaNro = 1;
16
17    const double nopeus = 600;
18    const double hyppyNopeus = 750;
19    const int RUUDUN_KOKO = 55;
20    bool pelikaynnissa = false;
21    bool kaksinpelattava = true;
22
23    PlatformCharacter pelaaja1;
24    PlatformCharacter pelaaja2;
25
26    Image pelaajanKuva = LoadImage("2");
27    Image pelaaja2Kuva = LoadImage("");
28    Image vihuKuva = LoadImage("vihu");
29    Image piikkiKuva = LoadImage("piikki");
30    Image taustaKuva = LoadImage("background-city");
31    Image lippuKuva = LoadImage("lippu");
32    // Image[] kavelykuvat = LoadImages("1var", "2", "3");
33    Image hyppyKuva = LoadImage("1var");
34    Image tausta2Kuva = LoadImage("jungle");
35
36    SoundEffect maaliAani = LoadSoundEffect("maali");
37    SoundEffect taustamusiikki = LoadSoundEffect("hissimusiikkia");
38
39    Vector checkpoint;
40
41
42    public override void Begin()
43    {
44        //AloitaPeli();
45        //SeuraavaKentta();
46        Valikko();
47    }
48
49    void LuoKentta(string kentannimi)
50    {
51
52        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
53        kentta.SetTileMethod('#', LisaaTaso);
54        kentta.SetTileMethod('*', LisaaVihu);
55        kentta.SetTileMethod('N', LisaaPelaaja);
56        kentta.SetTileMethod('P', LisaaPiikki);
57        kentta.SetTileMethod('C', LisaaCheck);
58        kentta.SetTileMethod('V', LisaaVoitto);
59        kentta.SetTileMethod('A', LisaaAlku);
60        if (kaksinpelattava)
61        { kentta.SetTileMethod('H', LisaaPelaaja2); }
62        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
63        Level.CreateBorders();
64        Level.Background.Image = tausta2Kuva;
65        Level.Background.FitToLevel();
66    }
67
68    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
69    {
70        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
71        piikki.Position = paikka;
72        piikki.Color = Color.Red;
73        Add(piikki);
74        piikki.Image = piikkiKuva;
75        piikki.Tag = "piikki";
76
77    }
78
79    void LisaaTaso(Vector paikka, double leveys, double korkeus)
80    {
81        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
82        taso.Position = paikka;
83        taso.Color = Color.Green;
84        Add(taso);
85        Image tasoKuva = LoadImage("platform");
86        taso.Image = tasoKuva;
87       
88    }
89
90    void LisaaVihu(Vector paikka, double leveys, double korkeus)
91    {
92        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
93        vihu.Position = paikka;
94        vihu.Image = vihuKuva;
95        vihu.Tag = "vihu";
96        Add(vihu);
97        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
98
99        satunnaisAivot.ChangeMovementSeconds = 3;
100        vihu.Brain = satunnaisAivot;
101        vihu.Brain.Active = true;
102    }
103    void LisaaCheck(Vector paikka, double leveys, double korkeus)
104    {
105        //checkpoint
106        PhysicsObject lippu = PhysicsObject.CreateStaticObject(leveys, korkeus * 2);
107        lippu.Tag = "lippu";
108        lippu.Image = lippuKuva;
109        lippu.Position = paikka;
110        lippu.Y += korkeus * 0.5;
111        lippu.IgnoresCollisionResponse = true;
112        Add(lippu);
113
114    }
115    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
116    {
117        pelaaja1 = Luopelaaja(paikka, leveys, korkeus);
118
119    }
120
121    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
122    {
123        pelaaja2 = Luopelaaja(paikka, leveys, korkeus);
124    }
125    PlatformCharacter Luopelaaja(Vector paikka, double leveys, double korkeus)
126    {
127        //pelaaja ja sen komennot
128        PlatformCharacter pelaaja = new PlatformCharacter(leveys, korkeus);
129        pelaaja.Position = paikka;
130        pelaaja.Mass = 4.0;
131        pelaaja.Image = pelaajanKuva;
132        //pelaaja1.AnimWalk = new Animation(kavelykuvat);
133        pelaaja.AnimJump = new Animation(hyppyKuva);
134        Add(pelaaja);
135
136        AddCollisionHandler(pelaaja, "vihu", TormaaVihuun);
137        AddCollisionHandler(pelaaja, "lippu", TormaaLippuun);
138        AddCollisionHandler(pelaaja, "piikki", TormaaPiikkiin);
139        checkpoint = paikka;
140        AddCollisionHandler(pelaaja, "voitto", VoititPelin);
141        return pelaaja;
142    }
143
144    void LisaaNappaimet()
145    {
146
147        //kontrollit
148        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
149        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
150        Keyboard.Listen(Key.R, ButtonState.Pressed, Restart, "Restart");
151        Keyboard.Listen(Key.I, ButtonState.Pressed, Valikkoon, "Valikkoon");
152        //pelaaja1
153        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
154        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
155        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
156
157        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
158        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
159        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
160        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
161        //pelaaja2
162        if (kaksinpelattava)
163        {
164            Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
165            Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
166            Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
167
168            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta2, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
169            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta2, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
170            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa2, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
171        }
172    }
173
174    void Liikuta(PlatformCharacter hahmo, double nopeus)
175    {
176        hahmo.Walk(nopeus);
177    }
178    void Liikuta2(PlatformCharacter hahmo, double nopeus)
179    {
180        hahmo.Walk(nopeus);
181    }
182
183    void Restart()
184    {
185        LisaaNappaimet();
186    }
187
188    void Hyppaa(PlatformCharacter hahmo, double nopeus)
189    {
190        hahmo.Jump(nopeus);
191    }
192
193    void Hyppaa2(PlatformCharacter hahmo, double nopeus)
194    {
195        hahmo.Jump(nopeus);
196    }
197
198    void Valikkoon()
199    {
200        LisaaNappaimet();
201        Valikko();
202
203    }
204
205
206    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
207    {
208        //vihun komennot
209        if (vihu.Top - 0.2 * vihu.Height < hahmo.Bottom)
210        {
211            maaliAani.Play();
212            MessageDisplay.Add("Sinne meni!");
213            vihu.Destroy();
214            ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.1);
215        }
216        else
217        {
218            MessageDisplay.Add("Kuolit.");
219            hahmo.Destroy();
220           
221        }
222    }
223
224    void Alku(PhysicsObject alku)
225    {
226       
227
228    }
229    void TormaaLippuun(PhysicsObject hahmo, PhysicsObject lippu)
230    {
231        checkpoint = lippu.Position;
232    }
233    void TormaaPiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
234    {
235        pelaaja1.Position = checkpoint;
236        pelaaja2.Position = checkpoint;
237
238
239    }
240    void LisaaVoitto(Vector paikka, double leveys, double korkeus)
241    {
242        //toinen kenttä
243        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
244        taso.Position = paikka;
245        taso.Color = Color.Blue;
246        Add(taso);
247        taso.Tag = "voitto";
248        //MessageDisplay.Add("Kenttä läpi!");
249        //kenttaNro++;
250        //SeuraavaKentta();
251    }
252
253    void VoititPelin(PhysicsObject pelaaja, PhysicsObject maali)
254    {
255        MessageDisplay.Add("Kenttä läpi!");
256        kenttaNro++;
257        SeuraavaKentta();
258    }
259
260    void SeuraavaKentta()
261    {
262        IsPaused = false;
263        //toinen kenttä2
264        ClearAll();
265        pelikaynnissa = true;
266
267        if (kenttaNro == 1) LuoKentta("kentta1");
268        else if (kenttaNro == 2) LuoKentta("kentta2");
269        else if (kenttaNro == 3) LuoKentta("kentta3");
270        else if (kenttaNro > 3) Exit();
271
272        LisaaNappaimet();
273
274
275        Gravity = new Vector(0, -1000);
276
277
278        Camera.Follow(pelaaja1);
279        Camera.ZoomFactor = 1.2;
280        Camera.StayInLevel = true;
281    }
282
283    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
284    {
285        kenttaNro++;
286        SeuraavaKentta();
287    }
288
289    void TormasiPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
290    {
291        SeuraavaKentta();
292    }
293    void Valikko()
294    {
295        Mouse.IsCursorVisible = true;
296
297        valikonKohdat = new List<Label>();
298
299        Label kohta1 = new Label("Aloita uusi peli");
300        kohta1.Position = new Vector(0, 40);
301        valikonKohdat.Add(kohta1);
302        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, delegate { kaksinpelattava = false; SeuraavaKentta(); }, null);
303
304
305        Label kohta2 = new Label("Parhaat pisteet");
306        kohta2.Position = new Vector(0, 0);
307        valikonKohdat.Add(kohta2);
308        //Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, ParhaatPisteet, null);
309
310
311        Label kohta3 = new Label("Lopeta peli");
312        kohta3.Position = new Vector(0, -40);
313        valikonKohdat.Add(kohta3);
314        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
315
316        if (pelikaynnissa)
317        {
318            Label kohta4 = new Label("Jatka Peliä");
319            kohta4.Position = new Vector(0, 80);
320            valikonKohdat.Add(kohta4);
321            Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Jatkapelia, null);
322        }
323
324        Label kohta5 = new Label("Kahden Pelaajan Moodi");
325        kohta5.Position = new Vector(0, -80);
326        valikonKohdat.Add(kohta5);
327        Mouse.ListenOn(kohta5, MouseButton.Left, ButtonState.Pressed, Kahdenpelaajanmoodi, null);
328
329        foreach (Label valikonKohta in valikonKohdat)
330        {
331            Add(valikonKohta);
332            valikonKohta.Tag = "tuhottavavalikonkohta";
333        }
334
335        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
336       
337
338        IsPaused = true;
339
340    }
341
342    void ValikossaLiikkuminen(AnalogState hiirenTila)
343    {
344        foreach (Label kohta in valikonKohdat)
345        {
346            if (Mouse.IsCursorOn(kohta))
347            {
348                kohta.TextColor = Color.Red;
349            }
350            else
351            {
352                kohta.TextColor = Color.Black;
353            }
354        }
355
356
357    }
358    void Jatkapelia()
359    {
360        List<GameObject> valikonkohdat = GetObjectsWithTag("tuhottavavalikonkohta");
361        foreach(GameObject valikonkohta in valikonkohdat)
362        {
363            valikonkohta.Destroy();
364        }
365        IsPaused = false;
366    }
367    void Kahdenpelaajanmoodi()
368    {
369        kaksinpelattava = true;
370        SeuraavaKentta();
371    }
372    void LisaaAlku(Vector alkupaikka, double leveys, double korkeus)
373{
374    //checkpoint
375    PhysicsObject alku = PhysicsObject.CreateStaticObject(leveys, korkeus);
376    alku.Tag = "alku";
377    PhysicsObject alku1 = new PhysicsObject(40.0, 40.0);
378    alku.Position = alkupaikka;
379    alku.IgnoresCollisionResponse = true;
380    Add(alku);
381
382}
383}
Note: See TracBrowser for help on using the repository browser.