source: 2010/24/Vilvaini/Smile Jump/Peli.cs @ 954

Revision 954, 15.4 KB checked in by vilvaini, 9 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6
7class Tasohyppely : PhysicsGame
8{
9    const double nopeus = 300;
10    const double hyppyVoima = 4000;
11    double tasokorkeus = 0;
12    double tramppahyppy = 0;
13    double vihollistiheytys = 1;
14    double tasoleveys = 150;
15    double viholliskorkeus = 800;
16
17    //bool pelaajan1ase = false;
18    bool Kolmepelaajaa = false;
19    //bool pelaajan2ase = false;
20   
21    IntMeter pelaajan1pisteet;
22    IntMeter pelaajan2pisteet;
23
24    PlatformCharacter pelaaja1;
25    PlatformCharacter pelaaja2;
26    PlatformCharacter pelaaja3;
27    PlatformCharacter pelaaja4;
28    //PhysicsObject vihollinen;
29    PhysicsObject Alku;
30    PhysicsObject taso;
31
32    Timer aikaLaskuri;
33    Timer aikaLaskuri2;
34
35    PhysicsObject vasenReuna;
36    PhysicsObject alaReuna;
37    PhysicsObject oikeaReuna;
38    PhysicsObject DownReuna;
39   
40
41    protected override void Begin()
42    {
43        Level.Width = 1024;
44        Level.Height = 15000;
45        pelaajan1pisteet = new IntMeter(0);
46        pelaajan2pisteet = new IntMeter(0);
47
48        Camera.StayInLevel = true;
49        Alkukentta();
50    }
51
52    void Alkukentta()
53    {
54        ClearAll();
55        AlustaPistelaskurit();
56        MessageDisplay.Add("Aloita kaksinpeli (Paina 2)");
57        MessageDisplay.Add("Aloita yksinpeli (Paina 1)");
58        MessageDisplay.Add("Poistu (Paina P)");
59        Alkunappaimet();
60        lisaaPelaajat();
61        LisaaDownReuna();
62        alaReuna = Level.CreateBottomBorder();
63        Level.Background.CreateGradient(Color.Beige, Color.Wheat);
64        LisaaAloitusruutu();
65    }
66
67    private void AlustaPistelaskurit()
68    {
69        pelaajan1pisteet.Reset();
70        pelaajan2pisteet.Reset();
71    }
72
73    private void Alkunappaimet()
74    {
75        Keyboard.Listen(Key.D2, ButtonState.Pressed, seuraavaKentta, "");
76        Keyboard.Listen(Key.D1, ButtonState.Pressed, ShowControlHelp, "");
77        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
78    }
79
80    void TasoTuho(PhysicsObject taso)
81    {
82        if (pelaaja1.Y > pelaaja2.Y)
83        {
84            if (taso.Y + 1000 < pelaaja1.Y)
85            {
86                taso.Destroy();
87                pelaajan1pisteet.Value += 1;
88            }
89        }
90    }
91
92    void seuraavaKentta()
93    {
94       
95        ClearAll();
96        //pelaajan1pisteet.Reset();
97        lisaaTaso(RandomGen.NextDouble(Level.Left + 50, Level.Right - 50), Level.Bottom + 150, 150);
98
99        TeeReunat();
100        TeePistenaytot();
101
102        // Asetetaan painovoima
103        Gravity = new Vector(0, -600);
104
105        luoKentta();
106        lisaaNappaimet();
107    }
108
109    void TeePistenaytot()
110    {
111        // luodaan pistelaskunäyttö
112        ValueDisplay pisteNaytto = new ValueDisplay();
113        pisteNaytto.Text = "Pelaaja 1: ";
114        pisteNaytto.X = Screen.Left + 250;
115        pisteNaytto.Y = Screen.Top - 100;
116        pisteNaytto.ValueColor = Color.Red;
117        pisteNaytto.TextColor = Color.Red;
118        pisteNaytto.BindTo(pelaajan1pisteet);
119        Add(pisteNaytto);    // lisätään peliin
120
121
122        // luodaan pistelaskunäyttö
123        ValueDisplay pisteNaytto2 = new ValueDisplay();
124        pisteNaytto2.Text = "Pelaaja 2: ";
125        pisteNaytto2.X = Screen.Right - 250;
126        pisteNaytto2.Y = Screen.Top - 100;
127        pisteNaytto2.ValueColor = Color.Red;
128        pisteNaytto2.TextColor = Color.Red;
129        pisteNaytto2.BindTo(pelaajan2pisteet);
130        Add(pisteNaytto2);    // lisätään peliin
131
132    }
133
134    void TeeReunat()
135    {
136        vasenReuna = Level.CreateLeftBorder();
137        vasenReuna.Restitution = 0.0;
138        vasenReuna.IsVisible = false;
139
140        alaReuna = Level.CreateBottomBorder();
141        vasenReuna.Restitution = 0.0;
142        vasenReuna.IsVisible = false;
143
144        oikeaReuna = Level.CreateRightBorder();
145        vasenReuna.Restitution = 0.0;
146        vasenReuna.IsVisible = false;
147    }
148
149    void LisaaAloitusruutu()
150    {
151        Alku = PhysicsObject.CreateStaticObject(800, 400);
152        Alku.X = 0;
153        Alku.Y = Level.Bottom + 300;
154        Alku.Image = LoadImage("Smile Jump aloitusruutu");
155        Alku.IgnoresCollisionResponse = true;
156        Alku.IgnoresPhysicsLogics = true;
157        Add(Alku);
158    }
159
160    void KasittelePallonTormays(PhysicsObject pelaaja1, PhysicsObject kohde)
161    {
162        if (kohde == oikeaReuna)
163        {
164            pelaaja1.X = Level.Left + 30;
165        }
166        else if (kohde == vasenReuna)
167        {
168            pelaaja1.X = Level.Right - 30;
169        }
170    }
171
172    void TasonTormays(PhysicsObject taso, PhysicsObject kohde)
173    {
174        if (kohde == DownReuna)
175        {
176            taso.Destroy();
177        }
178         
179    }
180
181    void Pelaaja1Osui(PhysicsObject p1, PhysicsObject kohde)
182    {
183        if (kohde == DownReuna)
184        {
185            pelaajan2pisteet.Value += 1;
186            p1.Destroy();
187            if (pelaajan2pisteet >= 2)
188            {
189                MessageDisplay.TextColor = Color.White;
190                MessageDisplay.Add("Pelaaja 2 voitti pelin.");
191                Alkukentta();
192            }
193            else
194            {
195                seuraavaKentta();
196            }
197        }
198
199        if (kohde.Tag.ToString() == "vihollinen")
200        {
201            kohde.Destroy();
202            pelaajan2pisteet.Value += 1;
203            p1.Destroy();
204            if (pelaajan2pisteet < 2)
205            { 
206                seuraavaKentta();
207            }
208        }
209         
210    }
211
212    void Pelaaja2Osui(PhysicsObject p2, PhysicsObject kohde)
213    {
214        if (kohde == DownReuna)
215        {
216            pelaajan1pisteet.Value++;
217            p2.Destroy();
218            if (pelaajan1pisteet >= 2)
219            {
220                MessageDisplay.TextColor = Color.White;
221                MessageDisplay.Add("Pelaaja 1 voitti pelin.");
222                Alkukentta();
223            }
224            else
225            {
226                seuraavaKentta();
227            }
228        }
229
230        if (kohde.Tag.ToString() == "vihollinen")
231        {
232            pelaajan1pisteet.Value++;
233            kohde.Destroy();
234            p2.Destroy();
235            if (pelaajan1pisteet < 2)
236            {
237                seuraavaKentta();
238            }
239        }
240
241    }
242
243    void VihollisKaantyVR(PhysicsObject vihulainen, PhysicsObject kohde)
244    {
245        if (kohde == vasenReuna)
246        {
247            vihulainen.Velocity = new Vector(220.0, 0.0);
248        }
249
250    }
251
252    void VihollisKaantyOR(PhysicsObject vihulainen, PhysicsObject kohde)
253    {
254        if (kohde == oikeaReuna)
255        {
256            vihulainen.Velocity = new Vector(-220.0, 0.0);
257        }
258
259    }
260
261    void luoKentta()
262    {
263        MessageDisplay.Add("Pompi pidemmälle kuin toinen pelaaja!");
264        tasokorkeus = 50;
265        tasoleveys = 150;
266        for (int i = 0; i < 145; i++)
267        {           
268            lisaaTaso(RandomGen.NextDouble(Level.Left + 50, -150), Level.Bottom + tasokorkeus + RandomGen.NextDouble(10.0, 15.0), tasoleveys);
269            lisaaTaso(RandomGen.NextDouble(150, Level.Right - 50), Level.Bottom + tasokorkeus + RandomGen.NextDouble(0.0, 5.0), tasoleveys);
270            tasokorkeus = tasokorkeus + 170;
271            tasoleveys = tasoleveys - 1;
272        }
273        vihollistiheytys = 0;
274        viholliskorkeus = 0;
275        for (int v = 0; v < 55; v++)
276        {
277            viholliskorkeus = viholliskorkeus + 600 - vihollistiheytys;
278            LisaaVihollinen(RandomGen.NextDouble(Level.Left , Level.Right), Level.Bottom + viholliskorkeus + RandomGen.NextDouble(0.0, 40.0));
279            vihollistiheytys = vihollistiheytys + 10;
280        }
281
282        tasokorkeus = 150;
283        tasoleveys = 150;
284        for (int h = 0; h < 75; h++)
285        {
286            lisaaTaso(RandomGen.NextDouble(150, -150), Level.Bottom + tasokorkeus + RandomGen.NextDouble(5.0, 15.0), tasoleveys);
287            tasoleveys = tasoleveys - 2;
288            tasokorkeus = tasokorkeus + 170;
289        }
290
291        //LisaaDownReuna(Camera.Position.Y - 200);
292        LisaaDownReuna();
293       
294        Level.Background.CreateGradient(Color.SkyBlue, Color.DarkBlue);
295        lisaaPelaajat();
296
297        aikaLaskuri = new Timer();
298        aikaLaskuri.Interval = 1; 
299        aikaLaskuri.Trigger += aikaLoppui;
300        Add(aikaLaskuri); 
301        aikaLaskuri.Start(1);
302
303        Level.Width = 1024;
304        Level.Height = 15000;
305
306        LisaaVihollinen(0.0, Level.Bottom + 500);
307        Camera.StayInLevel = true;
308       
309        pelaajan1pisteet.MaxValue = 2;
310    }
311
312    void lisaaTaso(double x, double y, double leveys)
313    {
314        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, 30);
315        taso.Color = Color.Green;
316        taso.X = x;
317        taso.Y = y;
318        taso.Image = LoadImage("Smile Jump(laatta)");
319        AddCollisionHandler(taso, TasonTormays);
320        Add(taso);
321    }
322
323    void lisaaPelaajat()
324    {
325        pelaaja1 = new PlatformCharacter(40, 40);
326        pelaaja1.Mass = 4.0;
327        pelaaja1.Shape = Shapes.Circle;
328        pelaaja1.Image = LoadImage("smile jump(keltainen pelaaja) (2)");
329        pelaaja1.X = 0;
330        pelaaja1.Y = Level.Bottom + 50;
331
332        pelaaja2 = new PlatformCharacter(40, 40);
333        pelaaja2.Mass = 4.0;
334        pelaaja2.Shape = Shapes.Circle;
335        pelaaja2.Image = LoadImage("smile jump (vihreä pelaaja) (2)");
336        pelaaja2.X = 50;
337        pelaaja2.Y = Level.Bottom + 50;
338
339       
340       
341       
342       
343        AddCollisionHandler(pelaaja1, KasittelePallonTormays);
344        AddCollisionHandler(pelaaja2, KasittelePallonTormays);
345       
346        Add(pelaaja1); 
347        Add(pelaaja2);
348    }
349
350    void lisaaPelaaja3()
351    {
352        pelaaja3 = new PlatformCharacter(40, 40);
353        pelaaja3.Mass = 4.0;
354        pelaaja3.Shape = Shapes.Circle;
355        pelaaja3.Image = LoadImage("smile jump(keltainen pelaaja) (2)");
356        pelaaja3.X = -50;
357        pelaaja3.Y = Level.Bottom + 50;
358
359        AddCollisionHandler(pelaaja3, KasittelePallonTormays);
360
361        Add(pelaaja3);
362    }
363
364    void lisaaPelaaja4()
365    {
366        pelaaja4 = new PlatformCharacter(40, 40);
367        pelaaja4.Mass = 4.0;
368        pelaaja4.Shape = Shapes.Circle;
369        pelaaja4.Image = LoadImage("smile jump (vihreä pelaaja) (2)");
370        pelaaja4.X = 100;
371        pelaaja4.Y = Level.Bottom + 50;
372
373        AddCollisionHandler(pelaaja4, KasittelePallonTormays);
374
375        Add(pelaaja4);
376    }
377
378    void LisaaVihollinen(double x, double y)
379    {
380        PhysicsObject vihollinen = new PhysicsObject(60, 60);
381        vihollinen.Image = LoadImage("smile jump(vihollinen) (2)");
382        vihollinen.Tag = "vihollinen";
383        vihollinen.Shape = Shapes.Circle;
384        vihollinen.X = x;
385        vihollinen.Y = y;
386        vihollinen.IgnoresCollisionResponse = true;
387        vihollinen.IgnoresPhysicsLogics = true;
388        vihollinen.Velocity = new Vector(220.0, 0.0);
389        Add(vihollinen);
390
391        AddCollisionHandler(vihollinen, VihollisKaantyOR);
392        AddCollisionHandler(vihollinen, VihollisKaantyVR);
393    }
394
395    void LisaaTramppaika(double tr)
396    {
397        tramppahyppy = tr;
398        aikaLaskuri2 = new Timer();                     // luodaan uusi ajastin, nimeltä aikaLaskuri
399        aikaLaskuri2.Interval = 1;                      // ajastukseksi 5 sekuntia
400        aikaLaskuri2.Trigger += new Timer.TriggerHandler(aikaLoppui2);  //   // asetetaan tapahtuma, kun aikaLaskuri kun 5 sekuntia on kulunut.
401        Add(aikaLaskuri2);                       // lisätään aikaLaskuri peliin
402        aikaLaskuri2.Start(1);
403    }
404
405
406
407    private void aikaLoppui(Timer sender)
408    {
409        AddCollisionHandler(pelaaja1, Pelaaja1Osui);
410        AddCollisionHandler(pelaaja2, Pelaaja2Osui);
411    }
412
413    // TODO: kesken
414    private void aikaLoppui2(Timer sender)
415    {
416        if (tramppahyppy == 2)
417        {
418            pelaaja2.IgnoresCollisionResponse = false;
419            pelaaja2.IgnoresPhysicsLogics = false;
420        }
421        else
422        {
423            pelaaja1.IgnoresCollisionResponse = false;
424            pelaaja1.IgnoresPhysicsLogics = false;
425        }
426
427    }
428
429    void lisaaNappaimet()
430    {
431        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
432        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
433
434        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
435        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
436        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
437
438        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus);
439        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, nopeus);
440        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, hyppyVoima);
441
442        lisaaGamePadNappaimet(ControllerOne);
443    }
444
445    // TODO: kesken
446    //void KasitteleAse(PhysicsObject Ase, PhysicsObject pelaaja)
447    //{
448    //    if (pelaaja == pelaaja1)
449    //    {
450    //        pelaajan1ase = true;
451    //    }
452    //    else if (pelaaja == pelaaja2)
453    //    {
454    //        pelaajan2ase = true;
455     //   }
456   // }   
457   
458    void lisaaGamePadNappaimet(GamePad controller)
459    {
460        controller.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
461
462        controller.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja3, -nopeus);
463        controller.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja3, nopeus);
464        controller.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja3, hyppyVoima);
465    }
466
467    void liikuta(PlatformCharacter hahmo, double nopeus)
468    {
469        hahmo.Walk(nopeus);
470    }
471
472    void hyppaa(PlatformCharacter hahmo, double voima)
473    {
474        hahmo.Jump(voima);
475    }
476
477    /// <summary>
478    /// DownReuna tuhoaa pelaajat ja tasot, jotka ovat
479    /// ruudun alapuolella.
480    /// </summary>
481    void LisaaDownReuna()
482    {
483        DownReuna = new PhysicsObject(2000, 100);
484        DownReuna.X = 0;
485        DownReuna.Y = Level.Bottom + 50;
486        DownReuna.IgnoresCollisionResponse = true;
487        DownReuna.IgnoresGravity = true;
488        Add(DownReuna);
489    }
490   
491    protected override void Update(Time time)
492    {
493        if (Kolmepelaajaa == true)
494            {
495                if (pelaaja1.Y > pelaaja2.Y)
496                {
497                    if (pelaaja1.Y > pelaaja3.Y)
498                    {
499                        Camera.Follow(pelaaja1);
500                    }
501                }
502                if (pelaaja2.Y > pelaaja3.Y)
503                {
504                    if (pelaaja2.Y > pelaaja1.Y)
505                    {
506                        Camera.Follow(pelaaja2);
507                    }
508                   
509                }
510                if (pelaaja3.Y > pelaaja2.Y)
511                {
512                    if (pelaaja3.Y > pelaaja1.Y)
513                    {
514                        Camera.Follow(pelaaja3);
515                    }
516                   
517                }
518               
519            }
520
521        // Tämä pitää huolen siitä, että kun kamera menee ylöspäin, niin kameran
522        // alapuolella olevat asiat tuhoutuvat.
523        DownReuna.Y = Camera.Position.Y - 400;
524
525        base.Update(time);
526
527       
528    }
529}
Note: See TracBrowser for help on using the repository browser.