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

Revision 6789, 14.1 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    IntMeter pisteLaskuri;
18
19    //random shaishet
20    const double nopeus = 600;
21    const double hyppyNopeus = 750;
22    const int RUUDUN_KOKO = 55;
23    bool pelikaynnissa = false;
24    bool kaksinpelattava = true;
25
26    //pelaajat
27    PlatformCharacter pelaaja1;
28    PlatformCharacter pelaaja2;
29
30    //krafiikat
31    Image pelaajanKuva = LoadImage("2");
32    Image pelaaja1Kuva = LoadImage("player1var");
33    Image pelaaja2Kuva = LoadImage("player2var");
34    Image vihuKuva = LoadImage("vihu");
35    Image piikkiKuva = LoadImage("piikki");
36    Image taustaKuva = LoadImage("background-city");
37    Image lippuKuva = LoadImage("lippu");
38    Image hyppyKuva = LoadImage("1var");
39    Image tausta2Kuva = LoadImage("background");
40    Image voileipaKuva = LoadImage("sandwich");
41    Image tekstiKuva = LoadImage("naita");
42    Image teksti2Kuva = LoadImage("teksti");
43
44    //ääniefektit
45    SoundEffect maaliAani = LoadSoundEffect("maali");
46    SoundEffect kuolemaaani = LoadSoundEffect("kuolema");
47
48
49    Vector checkpoint;
50
51
52    public override void Begin()
53    {
54        //tautamusiikki
55        MediaPlayer.Play("hissimusiikkia");
56        MediaPlayer.IsRepeating = true;
57
58        //AloitaPeli();
59        //SeuraavaKentta();
60        Valikko();
61       
62    }
63
64    void LuoKentta(string kentannimi)
65    {
66        //kenttä krafiikat
67        TileMap kentta = TileMap.FromLevelAsset(kentannimi);
68        kentta.SetTileMethod('#', LisaaTaso);
69        kentta.SetTileMethod('*', LisaaVihu);
70        kentta.SetTileMethod('N', LisaaPelaaja);
71        kentta.SetTileMethod('P', LisaaPiikki);
72        kentta.SetTileMethod('C', LisaaCheck);
73        kentta.SetTileMethod('V', LisaaVoitto);
74        kentta.SetTileMethod('A', LisaaAlku);
75        kentta.SetTileMethod('v', LisaaVoileipa);
76        kentta.SetTileMethod('t', LisaaTeksti);
77        kentta.SetTileMethod('T', LisaaTeksti2);
78        if (kaksinpelattava)
79        { kentta.SetTileMethod('H', LisaaPelaaja2); }
80        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
81        Level.CreateBorders();
82        Level.Background.Image = tausta2Kuva;
83        Level.Background.FitToLevel();
84    }
85
86    void LisaaPiikki(Vector paikka, double leveys, double korkeus)
87    {
88        //piikin lisääminen
89        PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus);
90        piikki.Position = paikka;
91        piikki.Color = Color.Red;
92        Add(piikki);
93        piikki.Image = piikkiKuva;
94        piikki.Tag = "piikki";
95
96    }
97
98    void LisaaTeksti(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject teksti = PhysicsObject.CreateStaticObject(leveys *4, korkeus);
101        teksti.Position = paikka;
102        teksti.Image = tekstiKuva;
103        teksti.Tag = "naita";
104        Add(teksti);
105        teksti.IgnoresCollisionResponse = true;
106    }
107
108    void LisaaTeksti2(Vector paikka, double leveys, double korkeus)
109    {
110        PhysicsObject teksti2 = PhysicsObject.CreateStaticObject(leveys * 4, korkeus);
111        teksti2.Position = paikka;
112        teksti2.Image = tekstiKuva;
113        teksti2.Tag = "teksti";
114        Add(teksti2);
115        teksti2.IgnoresCollisionResponse = true;
116    }
117
118    void KeraaVoileipa(PhysicsObject pelaaja, PhysicsObject voileipa)
119    {
120        voileipa.Destroy();
121        pisteLaskuri.Value += 1;
122
123    }
124
125    void LuoPistelaskuri()
126    {
127        //pistelaskurin luonti
128        pisteLaskuri = new IntMeter(0);
129
130        Label pistenaytto = new Label(); 
131        pistenaytto.X = Screen.Left + 100;
132        pistenaytto.Y = Screen.Top - 100;
133        pistenaytto.TextColor = Color.Black;
134        pistenaytto.Color = Color.White;
135        pistenaytto.IntFormatString = "voileivät : {0}";
136
137        pistenaytto.BindTo(pisteLaskuri);
138        Add(pistenaytto);
139
140    }
141
142
143    void LisaaTaso(Vector paikka, double leveys, double korkeus)
144    {
145        //tasonluonti
146        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
147        taso.Position = paikka;
148        taso.Color = Color.Green;
149        Add(taso);
150        Image tasoKuva = LoadImage("mario");
151        taso.Image = tasoKuva;
152       
153    }
154
155    void LisaaVihu(Vector paikka, double leveys, double korkeus)
156    {
157        //vihunlisääminen
158        PlatformCharacter vihu = new PlatformCharacter(leveys, korkeus);
159        vihu.Position = paikka;
160        vihu.Image = vihuKuva;
161        vihu.Tag = "vihu";
162        Add(vihu);
163        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
164
165        satunnaisAivot.ChangeMovementSeconds = 3;
166        vihu.Brain = satunnaisAivot;
167        vihu.Brain.Active = true;
168    }
169    void LisaaCheck(Vector paikka, double leveys, double korkeus)
170    {
171        //checkpoint
172        PhysicsObject lippu = PhysicsObject.CreateStaticObject(leveys, korkeus * 2);
173        lippu.Tag = "lippu";
174        lippu.Image = lippuKuva;
175        lippu.Position = paikka;
176        lippu.Y += korkeus * 0.5;
177        lippu.IgnoresCollisionResponse = true;
178        Add(lippu);
179
180    }
181    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
182    {
183        pelaaja1 = Luopelaaja(paikka, leveys, korkeus);
184        pelaaja1.Image = pelaajanKuva;
185
186        if (kaksinpelattava)
187        {
188            pelaaja1.Image = pelaaja1Kuva;
189        }
190    }
191
192    void LisaaPelaaja2(Vector paikka, double leveys, double korkeus)
193    {
194        pelaaja2 = Luopelaaja(paikka, leveys, korkeus);
195        pelaaja2.Image = pelaaja2Kuva;
196    }
197    PlatformCharacter Luopelaaja(Vector paikka, double leveys, double korkeus)
198    {
199        //pelaaja ja sen komennot
200        PlatformCharacter pelaaja = new PlatformCharacter(leveys, korkeus);
201        pelaaja.Position = paikka;
202        pelaaja.Mass = 4.0;
203        Add(pelaaja);
204
205        //pelaajan törmäyskäsittelijät
206        AddCollisionHandler(pelaaja, "vihu", TormaaVihuun);
207        AddCollisionHandler(pelaaja, "lippu", TormaaLippuun);
208        AddCollisionHandler(pelaaja, "piikki", TormaaPiikkiin);
209        AddCollisionHandler(pelaaja, "voileipa", KeraaVoileipa);
210        checkpoint = paikka;
211        AddCollisionHandler(pelaaja, "voitto", VoititPelin);
212        return pelaaja;
213    }
214
215    void LisaaNappaimet()
216    {
217
218        //kontrollit
219        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
220        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
221        Keyboard.Listen(Key.R, ButtonState.Pressed, Restart, "Restart");
222        Keyboard.Listen(Key.I, ButtonState.Pressed, Valikkoon, "Valikkoon");
223
224        //pelaaja1
225        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
226        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
227        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
228
229        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
230        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
231        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
232        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
233
234        //pelaaja2
235        if (kaksinpelattava)
236        {
237            Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
238            Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus);
239            Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
240
241            ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Liikuta2, "Pelaaja liikkuu vasemmalle", pelaaja2, -nopeus);
242            ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Liikuta2, "Pelaaja liikkuu oikealle", pelaaja2, nopeus);
243            ControllerTwo.Listen(Button.A, ButtonState.Pressed, Hyppaa2, "Pelaaja hyppää", pelaaja2, hyppyNopeus);
244        }
245    }
246    //pelaajien toiminnot
247    void Liikuta(PlatformCharacter hahmo, double nopeus)
248    {
249        hahmo.Walk(nopeus);
250    }
251    void Liikuta2(PlatformCharacter hahmo, double nopeus)
252    {
253        hahmo.Walk(nopeus);
254    }
255
256    void Restart()
257    {
258        LisaaNappaimet();
259    }
260
261    void Hyppaa(PlatformCharacter hahmo, double nopeus)
262    {
263        hahmo.Jump(nopeus);
264    }
265
266    void Hyppaa2(PlatformCharacter hahmo, double nopeus)
267    {
268        hahmo.Jump(nopeus);
269    }
270
271    void Valikkoon()
272    {
273        LisaaNappaimet();
274        Valikko();
275
276    }
277
278
279    void TormaaVihuun(PhysicsObject hahmo, PhysicsObject vihu)
280    {
281        //vihun komennot
282        if (vihu.Top - 0.2 * vihu.Height < hahmo.Bottom)
283        {
284            maaliAani.Play();
285            MessageDisplay.Add("Sinne meni!");
286            vihu.Destroy();
287            ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.1);
288        }
289        else
290        {
291            MessageDisplay.Add("Kuolit.");
292            hahmo.Destroy();
293           
294        }
295    }
296
297    void Alku(PhysicsObject alku)
298    {
299       
300
301    }
302    void TormaaLippuun(PhysicsObject hahmo, PhysicsObject lippu)
303    {
304        checkpoint = lippu.Position;
305    }
306    void TormaaPiikkiin(PhysicsObject hahmo, PhysicsObject piikki)
307    {
308        pelaaja1.Position = checkpoint;
309
310        if (pelaaja2 != null)
311        {
312            pelaaja2.Position = checkpoint;
313        }
314
315
316    }
317    void LisaaVoitto(Vector paikka, double leveys, double korkeus)
318    {
319        //toinen kenttä
320        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
321        taso.Position = paikka;
322        taso.Color = Color.Blue;
323        Add(taso);
324        taso.Tag = "voitto";
325        //MessageDisplay.Add("Kenttä läpi!");
326        //kenttaNro++;
327        //SeuraavaKentta();
328    }
329
330    void LisaaVoileipa(Vector paikka, double leveys, double korkeus)
331    {
332        //kerättävät leivät
333        PhysicsObject voileipa = PhysicsObject.CreateStaticObject(leveys, korkeus);
334        voileipa.Position = paikka;
335        voileipa.Image = voileipaKuva;
336        Add(voileipa);
337        voileipa.Tag = "voileipa";
338    }
339
340    void VoititPelin(PhysicsObject pelaaja, PhysicsObject maali)
341    {
342        //kentänläpiveto
343        MessageDisplay.Add("Kenttä läpi!");
344        kenttaNro++;
345        SeuraavaKentta();
346    }
347
348    void SeuraavaKentta()
349    {
350        IsPaused = false;
351        //toinen kenttä2
352        ClearAll();
353        pelikaynnissa = true;
354
355        //kentänläpiveto
356        if (kenttaNro == 1) LuoKentta("kentta1");
357        else if (kenttaNro == 2) LuoKentta("kentta2");
358        else if (kenttaNro == 3) LuoKentta("kentta3");
359        else if (kenttaNro > 3) Exit();
360
361        LisaaNappaimet();
362        LuoPistelaskuri();
363
364        Gravity = new Vector(0, -1000);
365
366        //kameran toiminnot
367        Camera.Follow(pelaaja1);
368        Camera.ZoomFactor = 1.2;
369        Camera.StayInLevel = true;
370    }
371
372    void TormasiMaaliin(PhysicsObject pelaaja, PhysicsObject maali)
373    {
374        kenttaNro++;
375        SeuraavaKentta();
376    }
377
378    void TormasiPiikkiin(PhysicsObject pelaaja, PhysicsObject piikki)
379    {
380        SeuraavaKentta();
381    }
382    void Valikko()
383    {
384        //valikko
385        Mouse.IsCursorVisible = true;
386
387        valikonKohdat = new List<Label>();
388
389        Label kohta1 = new Label("Aloita uusi peli");
390        kohta1.Position = new Vector(0, 40);
391        valikonKohdat.Add(kohta1);
392        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, delegate { kaksinpelattava = false; SeuraavaKentta(); }, null);
393
394
395        Label kohta2 = new Label("Parhaat pisteet");
396        kohta2.Position = new Vector(0, 0);
397        valikonKohdat.Add(kohta2);
398
399
400        Label kohta3 = new Label("Lopeta peli");
401        kohta3.Position = new Vector(0, -40);
402        valikonKohdat.Add(kohta3);
403        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Exit, null);
404
405        if (pelikaynnissa)
406        {
407            Label kohta4 = new Label("Jatka Peliä");
408            kohta4.Position = new Vector(0, 80);
409            valikonKohdat.Add(kohta4);
410            Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Jatkapelia, null);
411        }
412
413        Label kohta5 = new Label("Kahden Pelaajan Moodi");
414        kohta5.Position = new Vector(0, -80);
415        valikonKohdat.Add(kohta5);
416        Mouse.ListenOn(kohta5, MouseButton.Left, ButtonState.Pressed, Kahdenpelaajanmoodi, null);
417
418        foreach (Label valikonKohta in valikonKohdat)
419        {
420            Add(valikonKohta);
421            valikonKohta.Tag = "tuhottavavalikonkohta";
422        }
423
424        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
425       
426
427        IsPaused = true;
428
429    }
430
431    void ValikossaLiikkuminen(AnalogState hiirenTila)
432    {
433        foreach (Label kohta in valikonKohdat)
434        {
435            if (Mouse.IsCursorOn(kohta))
436            {
437                kohta.TextColor = Color.Red;
438            }
439            else
440            {
441                kohta.TextColor = Color.Black;
442            }
443        }
444
445
446    }
447    void Jatkapelia()
448    {
449        List<GameObject> valikonkohdat = GetObjectsWithTag("tuhottavavalikonkohta");
450        foreach(GameObject valikonkohta in valikonkohdat)
451        {
452            valikonkohta.Destroy();
453        }
454        IsPaused = false;
455    }
456    void Kahdenpelaajanmoodi()
457    {
458        kaksinpelattava = true;
459        SeuraavaKentta();
460    }
461    void LisaaAlku(Vector alkupaikka, double leveys, double korkeus)
462{
463    //checkpoint
464    PhysicsObject alku = PhysicsObject.CreateStaticObject(leveys, korkeus);
465    alku.Tag = "alku";
466    alku.Position = alkupaikka;
467    alku.IgnoresCollisionResponse = true;
468    Add(alku);
469
470}
471}
Note: See TracBrowser for help on using the repository browser.