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

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