source: 2010/27/frjolehm/The King of the island/The King of the island/Peli.cs @ 1232

Revision 1232, 17.9 KB checked in by frjolehm, 13 years ago (diff)

Tein pelin valmiiksi!

Line 
1//By Frans Lehmusvaara
2using System;
3using Jypeli;
4using Jypeli.ScreenObjects; 
5using Jypeli.Widgets;
6using Jypeli.Assets;
7
8public class Peli : PhysicsGame
9{
10 
11    PlatformCharacter pelaaja1;
12    PlatformCharacter pelaaja2;
13
14    PhysicsObject vasenreuna;
15    PhysicsObject oikeareuna;
16    PhysicsObject alareuna;
17    PhysicsObject yläreuna;
18
19    const int Joukkueenkoko = 3;
20    int Pelaajan1joukkue = Joukkueenkoko;
21    int Pelaajan2joukkue = Joukkueenkoko;
22    int peliMuoto = 0;
23
24    Boolean Pelaajan1JuoksuAskel;
25    Boolean Pelaajan2JuoksuAskel;
26    const double Juoksunopeus = 20;//20
27    const double Juoksunkiihtyvyys = 2.5;
28    double Pelaajan1Juoksunopeus = Juoksunopeus;
29    double Pelaajan2Juoksunopeus = Juoksunopeus;
30
31    const double HyppyVoima = 4000;
32
33    ImageDisplay numero;
34    DoubleMeter alaspainLaskuri;
35
36    ImageDisplay lataus;
37    Label Ohjeet;
38
39    int VoitonValinta;
40
41
42    protected override void Begin()
43    {
44        Aloitapikkupeli();
45    }
46
47    void LataaLatausKuva() 
48    {
49        lataus = new ImageDisplay();
50        lataus.Image = LoadImage("Lataa");
51        lataus.IsVisible = false;
52        Add(lataus);
53    }
54
55
56    void Aloitapikkupeli()
57    {
58        VoitonValinta = 0;
59        peliMuoto++;
60        ClearAll();
61        if (TarkistaVoittaja() == false)
62        {
63            LataaLatausKuva();
64
65            //Kuoleman juoksu
66            if (peliMuoto == 1)
67            {
68                Camera.Reset();
69
70                LuoKenttä(800, 700);
71                Camera.ZoomToLevel();
72                Level.Background.Image = LoadImage("Kenttä1");
73                LuoElämät();
74                AddCollisionHandler(oikeareuna, Voitto);
75                pelaaja1 = LuoUkko(Level.Left + 30, Level.Bottom + 75, 85, 75, "Tipu1");
76                pelaaja2 = LuoUkko(Level.Left + 30, Level.Bottom + 200, 85, 75, "Tipu2");
77                LuoAikaLaskuri();
78            }
79            else if (peliMuoto == 2)
80            {
81
82                Camera.Reset();
83
84                Camera.Y = Level.Bottom + 225;
85                double ZoomKerroin = Screen.Height / 800;
86                Camera.Zoom(ZoomKerroin); //0.85
87
88                LuoKenttä(30000, 1000);
89                LuoTausta(30000, Level.Bottom + 75);
90
91                lisääTaso(Level.Left, Level.Bottom + 400, 30000, 30);
92                LuoTausta(30000, Level.Bottom + 475);
93
94                pelaaja1 = LuoUkko(Level.Left + 10, Level.Bottom + 75, 85, 75, "Tipu1");
95                pelaaja2 = LuoUkko(Level.Left + 10, Level.Bottom + 475, 85, 75, "Tipu2");
96                Pelaajan1Juoksunopeus = 5000;
97                Pelaajan2Juoksunopeus = 5000;
98
99                Gravity = new Vector(0, -1000);
100
101                LuoElämät();
102
103                LuoAikaLaskuri();
104
105            }
106            else if (peliMuoto == 3)
107            {
108                Camera.Reset();
109
110                LuoKenttä(800, 700);
111                Camera.ZoomToLevel();
112                Level.Background.Image = LoadImage("Kenttä3");
113                Camera.Y = 0;
114
115                LuoElämät();
116
117                pelaaja1 = LuoUkko(Level.Left + 100, Level.Bottom + 75, 85, 75, "Tipu1");
118                pelaaja2 = LuoUkko(Level.Right - 100, Level.Bottom + 75, 85, 75, "Tipu2");
119
120                Gravity = new Vector(0, -600);
121                AjastaPallot(Color.Blue);
122                LuoAikaLaskuri();
123            }
124            else if (peliMuoto == 4)
125            {
126                Camera.Reset();
127
128                LuoKenttä(800, 700);
129                Camera.ZoomToLevel();
130                Level.Background.Image = LoadImage("Kenttä4");
131                Camera.Y = 0;
132
133                LuoElämät();
134
135                pelaaja1 = LuoUkko(Level.Left + 100, Level.Bottom + 75, 85, 75, "Tipu1");
136                pelaaja2 = LuoUkko(Level.Right - 100, Level.Bottom + 75, 85, 75, "Tipu2");
137
138                Gravity = new Vector(0, -700);
139                LuoAikaLaskuri();
140            }
141            else if (peliMuoto == 5)
142            {
143                Camera.Reset();
144
145                LuoKenttä(800, 700);
146                AddCollisionHandler(alareuna, Voitto);
147                Camera.ZoomToLevel();
148                Level.Background.Image = LoadImage("Kenttä4");
149                Camera.Y = 0;
150
151                LuoElämät();
152
153                pelaaja1 = LuoUkko(Level.Left + 100, Level.Top - 45, 85, 75, "Tipu1");
154                pelaaja2 = LuoUkko(Level.Right - 100, Level.Top - 45, 85, 75, "Tipu2");
155
156                LuoAikaLaskuri();
157            }
158        }
159
160    }
161
162    void LuoKolikko()
163    {
164        PhysicsObject pallo = new PhysicsObject(10, 10, Shapes.Circle);
165        pallo.Color = Color.Yellow;
166        pallo.Hit(new Vector(RandomGen.NextDouble(-200, 200), RandomGen.NextDouble(-300, -500)));
167        pallo.Y = Level.Top - 20;
168        AddCollisionHandler(pallo, Voitto);
169        pallo.Restitution = 0.9;
170        Add(pallo);
171    }
172
173    void AjastaPallot(Color väri)
174    {
175        Timer palloAjastin = new Timer();
176        palloAjastin.Interval = 5;
177        palloAjastin.Trigger += LuoPallo;
178        Add(palloAjastin);
179        palloAjastin.Tag = väri;
180        palloAjastin.Start();
181    }
182
183    void LuoPallo(Timer sender)
184    {
185        PhysicsObject pallo = new PhysicsObject(20, 20, Shapes.Circle);
186        pallo.Color = (Color)sender.Tag;
187        pallo.Hit(new Vector(RandomGen.NextDouble(-200, 200), RandomGen.NextDouble(-200, -400)));
188        pallo.Y = Level.Top - 300;
189        AddCollisionHandler(pallo, Voitto);
190        pallo.Restitution = 1.0;
191        Add(pallo);
192    }
193
194    void LuoTausta(int w, double y)
195    {
196        for (double x = Level.Left+2500; x < w; x += RandomGen.NextDouble(600,1000) )
197        {
198            LuoTaustaEsineitä(x, y, 100, 50, "Aita");
199        }
200    }
201    void LuoTaustaEsineitä(double x, double y, double w, double h, string nimi)
202    {
203        PhysicsObject ukko = new PhysicsObject(w,h,Shapes.Rectangle);
204        ukko.Image = LoadImage(nimi);
205        AddCollisionHandler(ukko, Voitto);
206        ukko.Restitution = 0;
207        ukko.X = x;
208        ukko.Y = y;
209        Add(ukko);
210    }
211
212    void LuoKenttä(double width, double height)
213    {
214        Level.Width = width;
215        Level.Height = height;
216
217        vasenreuna = Level.CreateLeftBorder();
218        vasenreuna.IsVisible = false;
219
220        oikeareuna = Level.CreateRightBorder();
221        oikeareuna.IsVisible = false;
222
223        yläreuna = Level.CreateTopBorder(); 
224        yläreuna.IsVisible = false;
225
226        alareuna = Level.CreateBottomBorder();
227        alareuna.Color = Color.Green;
228        alareuna.IsVisible = true;
229
230    }
231
232    void lisääTaso(double x, double y, double w, double h)
233    {
234        PhysicsObject taso = PhysicsObject.CreateStaticObject(w, h);
235        taso.Color = Color.Green;
236        taso.X = x;
237        taso.Y = y;
238        Add(taso);
239    }
240
241    void HyppyOhjaimet()
242    {
243        Keyboard.Listen(Key.W, ButtonState.Pressed, LuoHyppy, "Pelaaja1 hyppää", pelaaja1, false);
244        Keyboard.Listen(Key.Up, ButtonState.Pressed, LuoHyppy, "Pelaaja2 hyppää", pelaaja2, true);
245    }
246
247    void LuoHyppy(PlatformCharacter ukko,Boolean pelaaja)
248    {
249        ukko.Jump(HyppyVoima);
250        if (pelaaja == false)
251        {
252            Pelaajan1Juoksunopeus += Juoksunkiihtyvyys * 100;
253        }
254        else
255        {
256            Pelaajan2Juoksunopeus += Juoksunkiihtyvyys * 100;
257        }
258    }
259
260
261    void JuoksuOhjaimet() 
262    {
263        Keyboard.Listen(Key.A, ButtonState.Pressed, LuoJuoksu, "Pelaaja1 liikkuu", pelaaja1, false, false);
264        Keyboard.Listen(Key.D, ButtonState.Pressed, LuoJuoksu, "Pelaaja1 liikkuu", pelaaja1, false, true);
265
266        Keyboard.Listen(Key.Left, ButtonState.Pressed, LuoJuoksu, "Pelaaja2 liikkuu", pelaaja2, true, false);
267        Keyboard.Listen(Key.Right, ButtonState.Pressed, LuoJuoksu, "Pelaaja2 liikkuu", pelaaja2, true, true);
268    }
269
270    //                   ukko          false = p1 true = p2    false = n1 true = n2
271    void LuoJuoksu(PlatformCharacter ukko, Boolean pelaaja, Boolean näppäin)
272    {
273        //Pelaaja 1
274        if (pelaaja == false)
275        {
276            if (näppäin == Pelaajan1JuoksuAskel)
277            {
278                Pelaajan1Juoksunopeus += Juoksunkiihtyvyys;
279                Liikuta(ukko,Pelaajan1Juoksunopeus);
280                if (Pelaajan1JuoksuAskel == true)
281                {
282                    Pelaajan1JuoksuAskel = false;
283                }
284                else
285                {
286                    Pelaajan1JuoksuAskel = true;
287                }
288
289            }
290            if (Pelaajan1Juoksunopeus >= Juoksunopeus)
291            {
292                Pelaajan1Juoksunopeus -= 1;
293            }
294        }
295        else
296        {
297            if (näppäin == Pelaajan2JuoksuAskel)
298            {
299                Pelaajan2Juoksunopeus += Juoksunkiihtyvyys;
300                Liikuta(ukko, Pelaajan2Juoksunopeus);
301                if (Pelaajan2JuoksuAskel == true)
302                {
303                    Pelaajan2JuoksuAskel = false;
304                }
305                else
306                {
307                    Pelaajan2JuoksuAskel = true;
308                }
309            }
310            if (Pelaajan2Juoksunopeus >= Juoksunopeus)
311            {
312                Pelaajan2Juoksunopeus -= 1;
313            }
314        }
315    }
316
317    void VäistelyOhjaimet() 
318    {
319        Keyboard.Listen(Key.A, ButtonState.Down, pelaaja1.Walk, "Liiku vasemmalle", -(Juoksunopeus*6));
320        Keyboard.Listen(Key.D, ButtonState.Down, pelaaja1.Walk, "Liiku oikealle", Juoksunopeus*6);
321        Keyboard.Listen(Key.W, ButtonState.Pressed, LuoHyppy, "Hyppää", pelaaja1, false);
322
323        Keyboard.Listen(Key.Left, ButtonState.Down, pelaaja2.Walk, "Liiku vasemmalle", -(Juoksunopeus*6));
324        Keyboard.Listen(Key.Right, ButtonState.Down, pelaaja2.Walk, "Liiku oikealle", Juoksunopeus*6);
325        Keyboard.Listen(Key.Up, ButtonState.Pressed, LuoHyppy, "Hyppää", pelaaja2, true);
326    }
327
328    void LuoVoittaja(PlatformCharacter voittaja, PlatformCharacter hävijäjä)
329    {
330        ClearControls();
331
332        Gravity = new Vector(0, 0);
333        voittaja.IgnoresCollisionResponse = true;
334        hävijäjä.IgnoresCollisionResponse = true;
335
336        Keyboard.Listen(Key.Enter, ButtonState.Pressed, LuoLataus, "Jatka");
337        voittaja.Width = 170;
338        voittaja.Height = 150;
339
340
341    }
342
343    void LuoLataus()
344    {
345        Timer ajastin = new Timer();
346        ajastin.Interval = 1;
347        ajastin.Trigger += AjastinLoppu;
348
349        lataus.IsVisible = true;
350
351        Add(ajastin);
352        ajastin.Start();
353    }
354
355    void AjastinLoppu(Timer sender)
356    {
357       
358        Aloitapikkupeli();
359    }
360
361
362    void Voitto(PhysicsObject maali, PhysicsObject kohde) 
363    {
364        if (VoitonValinta == 0)
365        {
366            if (kohde == pelaaja1)
367            {
368                VoitonValinta = 1;
369                if (peliMuoto == 1 || peliMuoto == 4 || peliMuoto == 5 )
370                {
371                    Pelaajan2joukkue--;
372                    LuoVoittaja(pelaaja1, pelaaja2);
373                }
374                else if (peliMuoto == 2 || peliMuoto == 3)
375                {
376                    Pelaajan1joukkue--;
377                    LuoVoittaja(pelaaja2, pelaaja1);
378                }
379            }
380            else if (kohde == pelaaja2)
381            {
382                VoitonValinta = 1;
383                if (peliMuoto == 1 || peliMuoto == 4 || peliMuoto == 5)
384                {
385                    Pelaajan1joukkue--;
386                    LuoVoittaja(pelaaja2, pelaaja1);
387                }
388                else if (peliMuoto == 2 || peliMuoto == 3)
389                {
390                    Pelaajan2joukkue--;
391                    LuoVoittaja(pelaaja1, pelaaja2);
392                }
393            }
394        }
395    }
396
397
398    void LuoElämät() 
399    {
400        for(int i = 1; i < Joukkueenkoko+1; i++)
401        {
402            if (i <= Pelaajan1joukkue)
403            {
404                LuoUkkokuva(Screen.Left + i * 50, Screen.Top - 25, 40, 35, "Tipu1");
405            }
406            else 
407            {
408                LuoUkkokuva(Screen.Left + i * 50, Screen.Top - 25, 40, 35, "Kuollut1");
409            }
410            if (i <= Pelaajan2joukkue)
411            {
412                LuoUkkokuva(Screen.Right - i * 50, Screen.Top - 25, 40, 35, "Tipu2");
413            }
414            else
415            {
416                LuoUkkokuva(Screen.Right - i * 50, Screen.Top - 25, 40, 35, "Kuollut2");
417            }
418        }
419    }
420
421    void LuoUkkokuva(double x, double y, double w, double h, string nimi)
422    {
423        ImageDisplay ukko = new ImageDisplay();
424        ukko.Image = LoadImage(nimi);
425        ukko.AutoSize = false;
426        ukko.Width = w;
427        ukko.Height = h;
428        ukko.X = x;
429        ukko.Y = y;
430        Add(ukko);
431
432    }
433
434    void LuoAikaLaskuri()
435    {
436        alaspainLaskuri = new DoubleMeter(4);
437        numero = new ImageDisplay(); ;
438
439        Timer aikaLaskuri = new Timer();
440        aikaLaskuri.Interval = 1;
441        aikaLaskuri.Trigger += LaskeAlaspäin;
442        Add(aikaLaskuri);
443        aikaLaskuri.Start();
444
445    }
446
447    Boolean TarkistaVoittaja()
448    {
449        if (Pelaajan1joukkue == 0) 
450        {
451            //2 pelaaaja
452            PelaajaVoitti(true);
453            return true;
454        }
455        else if (Pelaajan2joukkue == 0)
456        {
457            //1 pelaaja
458            PelaajaVoitti(false);
459            return true;
460        }
461        return false;
462    }
463
464    void PelaajaVoitti(Boolean Voittaja)
465    {
466        LuoElämät();
467        LuoKenttä(800, 700);
468        Level.Background.Image = LoadImage("Kenttä4");
469        lisääTaso(-200, -200, 100, 25);
470        lisääTaso(0, 0, 200, 25);
471
472        if (Voittaja == true)
473        {
474            pelaaja2 = LuoUkko(0, 75, 170, 150, "Tipu2");
475            pelaaja1 = LuoUkko(-200, -162.5, 42.5, 37.5, "Tipu1");
476
477            Ohjeet = new Label("Pelaaja 2 voitti!");
478            Ohjeet.Y = 250;
479            Add(Ohjeet);
480        } 
481        else if (Voittaja == false)
482        {
483            pelaaja1 = LuoUkko(0, 75, 170, 150, "Tipu1");
484            pelaaja2 = LuoUkko(-200, -162.5, 42.5, 37.5, "Tipu2");
485
486            Ohjeet = new Label("Pelaaja 1 voitti!");
487            Ohjeet.Y = 350;
488            Add(Ohjeet);
489        }
490
491        Keyboard.Listen(Key.Enter, ButtonState.Pressed, AloitaAlusta, "Aloita peli alusta.");
492       
493    }
494
495    void AloitaAlusta()
496    { 
497        peliMuoto = 0;
498        Pelaajan1joukkue = 3;
499        Pelaajan2joukkue = 3;
500        Pelaajan1JuoksuAskel = false;
501        Pelaajan2JuoksuAskel = false;
502        Aloitapikkupeli();
503    }
504
505    void LaskeAlaspäin(Timer timer)
506    {
507        alaspainLaskuri.Value -= 1;
508        if(alaspainLaskuri.Value <= 0)
509        {
510            if (peliMuoto == 1)
511            {
512                JuoksuOhjaimet();
513            }
514            else if (peliMuoto == 2)
515            {
516                HyppyOhjaimet();
517            }
518            else if (peliMuoto == 3 )
519            {
520                VäistelyOhjaimet();
521            }
522            else if (peliMuoto == 4)
523            {
524                VäistelyOhjaimet();
525                LuoKolikko();
526            }
527            else if (peliMuoto == 5)
528            {
529                Gravity = new Vector(0, -200);
530                pelaaja1.Hit(new Vector(RandomGen.NextDouble(100, -100), RandomGen.NextDouble(-10, -100)));
531                pelaaja2.Hit(new Vector(RandomGen.NextDouble(100, -100), RandomGen.NextDouble(-10, -100)));
532            }
533
534            timer.Stop();
535            numero.Destroy();
536
537            // täydennä mitä tapahtuu, kun aika loppuu
538        }else if (alaspainLaskuri.Value <= 1)
539        {
540            numero.Image = LoadImage("1");
541           
542        }
543        else if (alaspainLaskuri.Value <= 2)
544        {
545            numero.Image = LoadImage("2");
546        }
547        else if (alaspainLaskuri.Value <= 3)
548        {
549            numero.Image = LoadImage("3");
550            Add(numero);
551        }
552
553        if (peliMuoto == 1)
554        {
555            Ohjeet = new Label("Yritä olla maalissa ensimmäisenä, rämppäämällä eteen ja taakse vuorotellen!");
556            Ohjeet.Y = 200;
557            Add(Ohjeet);
558        }
559        else if (peliMuoto == 2)
560        {
561            Ohjeet = new Label("Yritä hyppiä aitojen yli!");
562            Ohjeet.Y = 350;
563            Add(Ohjeet);
564        }
565        else if (peliMuoto == 3)
566        {
567            Ohjeet = new Label("Yritä väistellä vesipisaroita!");
568            Ohjeet.Y = 200;
569            Add(Ohjeet);
570        }
571        else if (peliMuoto == 4)
572        {
573            Ohjeet = new Label("Yritä kerätä kultakolikko!");
574            Ohjeet.Y = 200;
575            Add(Ohjeet);
576        }
577        else if (peliMuoto == 5)
578        {
579            Ohjeet = new Label("Anna onnettaren valita tämän pelin voittaja.");
580            Ohjeet.Y = 200;
581            Add(Ohjeet);
582        }
583    }
584
585    void Liikuta(PlatformCharacter ukko, double nopeus)
586    {
587        ukko.Walk(nopeus);
588    }
589
590
591    PlatformCharacter LuoUkko(double x, double y, double kokoX, double kokoY, string nimi)
592    {
593        PlatformCharacter ukko = new PlatformCharacter(kokoX, kokoY, Shapes.Rectangle);
594        ukko.Mass = 4.0;
595        ukko.X = x;
596        ukko.Y = y;
597        ukko.Image = LoadImage(nimi);
598        Add(ukko);
599        return ukko;
600    }
601
602    protected override void Update(Time time)
603    {
604        base.Update(time);
605        if (peliMuoto == 2)
606        {
607            pelaaja1.Push(new Vector(Pelaajan1Juoksunopeus, 0));
608            pelaaja2.Push(new Vector(Pelaajan2Juoksunopeus, 0));
609            if (pelaaja1.X > pelaaja2.X)
610            {
611                Camera.X = pelaaja1.X;
612            }
613            else
614            {
615                Camera.X = pelaaja2.X;
616            }
617        }
618    }
619}
Note: See TracBrowser for help on using the repository browser.