source: 2016/23/JaakkoS/PingPong/PingPong/PingPong/PingPong.cs @ 7230

Revision 7230, 16.3 KB checked in by sieerinn, 5 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 PingPong : PhysicsGame
10{
11    PhysicsObject Kolmio;
12    PhysicsObject Kolmio2;
13    PhysicsObject AlaReuna;
14    PhysicsObject YlaReuna;
15    PhysicsObject OikeaReuna;
16    PhysicsObject VasenReuna;
17    Image pomminKuva = LoadImage("Pommi");
18    Image palaKuva = LoadImage("Kivi");
19    Image pelaajanKuva = LoadImage("AlusVauhdis");
20    Image pelaajanKuva2 = LoadImage("Alusvauhis2");
21    Image pelaajanKuva3 = LoadImage("Alusvauhis3");
22    Image Alus = LoadImage("Alus");
23    Image Alus2 = LoadImage("Alus2");
24    Image Alus3 = LoadImage("Alus3");
25    Image nuoliKuva = LoadImage("nuoli");
26    Image Valittukuva;
27    Image Valittukuva2;
28    Image taustaKuva = LoadImage("taustakuva");
29    Image RIPKuva = LoadImage("RIP");
30    Image ohjeKuva = LoadImage("Ohjeet");
31    Image loppuKuva = LoadImage("illuminati");
32    int painettu = 0;
33    int pelaajat = 1;
34    MultiSelectWindow ohjausValikko;
35
36    bool nappaimisto = false;
37    bool voitettu = false;
38    bool tormaykset = false;
39
40    EasyHighScore topLista = new EasyHighScore();
41
42    Timer aikaLaskuri;
43
44    public override void Begin()
45    {
46        ClearAll();
47
48
49
50        Valittukuva = null;
51        Valittukuva2 = null;
52        IsFullScreen = true;
53
54        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Moninpeli", "Ohjeet", "Lopeta");
55        alkuValikko.Color = Color.HotPink;
56        Add(alkuValikko);
57
58        alkuValikko.AddItemHandler(0, delegate { pelaajat = 1; ohjaintenValinta(); });
59        alkuValikko.AddItemHandler(1, tormaysValikko);
60        alkuValikko.AddItemHandler(2, Ohjeet);
61        alkuValikko.AddItemHandler(3, Exit);
62        alkuValikko.DefaultCancel = 2;
63        Level.Width = Window.Width;
64        Level.Height = Window.Height;
65        //Level.Background.Image = taustaKuva;
66
67        GameObject tausta = new GameObject(Window.Width, Window.Height);
68        tausta.Image = taustaKuva;
69        Add(tausta);
70
71        IsMouseVisible = true;
72
73
74
75    }
76
77    void ohjaintenValinta()
78    {
79        ohjausValikko = new MultiSelectWindow("Millä pelaat?", "Näppäimistö", "Ohjain");
80        ohjausValikko.Color = Color.HotPink;
81        Add(ohjausValikko);
82
83        ohjausValikko.AddItemHandler(0, delegate() { nappaimisto = true; alusValinta(0); });
84        ohjausValikko.AddItemHandler(1, delegate() { nappaimisto = false; alusValinta(0); });
85    }
86
87    void alusValinta(int pelaaja)
88    {
89        ClearAll();
90        IsFullScreen = true;
91
92        GameObject tausta = new GameObject(Window.Width, Window.Height);
93        tausta.Image = taustaKuva;
94        Add(tausta);
95
96        int index = 0;
97
98        Label nuoli = new Label(nuoliKuva);
99        nuoli.Size = new Vector(40, 40);
100        Add(nuoli);
101
102        Action<Image> valitse = (kuva) =>
103        {
104            if (pelaaja == 0)
105            {
106                Valittukuva = kuva;
107                alusValinta(1);
108
109                if (pelaajat == 1)
110                    AloitaPeli();
111            }
112            if (pelaaja == 1)
113            {
114                Valittukuva2 = kuva;
115                AloitaPeli();
116            }
117        };
118
119        Image[] kuvat = new[] { pelaajanKuva, pelaajanKuva2, pelaajanKuva3 };
120        PushButton[] napit = new PushButton[3];
121        for (int i = 0; i < 3; i++)
122        {
123            PushButton alus = new PushButton(kuvat[i]);
124            napit[i] = alus;
125            alus.Size = new Vector(100, 100);
126            alus.X = -200 + 200 * i;
127            int ii = i;
128            if (kuvat[i] == Valittukuva)
129            {
130                alus.IsVisible = false;
131            }
132            else
133            {
134                alus.Clicked += delegate
135                {
136                    valitse(kuvat[ii]);
137                };
138            }
139            Add(alus);
140        }
141
142        nuoli.TextColor = Color.White;
143        nuoli.Position = napit[index].Position + new Vector(0, -100);
144
145        Keyboard.Listen(Key.Right, ButtonState.Pressed, () =>
146        {
147            index = ++index % 3;
148            nuoli.Position = napit[index].Position + new Vector(0, -100);
149        }, null);
150        Keyboard.Listen(Key.Left, ButtonState.Pressed, () =>
151        {
152            index--;
153            if (index < 0) index = 2;
154            nuoli.Position = napit[index].Position + new Vector(0, -100);
155        }, null);
156        Keyboard.Listen(Key.Enter, ButtonState.Pressed, () =>
157        {
158            if (napit[index].IsVisible)
159                valitse(kuvat[index]);
160        }, null);
161
162        GamePad ohjain = pelaaja == 0 ? ControllerOne : ControllerTwo;
163        ohjain.Listen(Button.DPadRight, ButtonState.Pressed, () =>
164        {
165            index = ++index % 3;
166            nuoli.Position = napit[index].Position + new Vector(0, -100);
167        }, null);
168        ohjain.Listen(Button.DPadLeft, ButtonState.Pressed, () =>
169        {
170            index--;
171            if (index < 0) index = 2;
172            nuoli.Position = napit[index].Position + new Vector(0, -100);
173        }, null);
174        ohjain.Listen(Button.A, ButtonState.Pressed, () =>
175        {
176            if (napit[index].IsVisible)
177                valitse(kuvat[index]);
178        }, null);
179    }
180
181    void OsuuReunaan(PhysicsObject kolmio, PhysicsObject pala)
182    {
183        kolmio.Destroy();
184        if (!voitettu)
185        {
186            if (pelaajat == 1) // yksinpelissä:
187            {
188                MessageDisplay.Add("Tuhouduit");
189                aikaLaskuri.Stop();
190            }
191            else // kaksinpeli:
192            {
193                voitettu = true;
194                if (kolmio == Kolmio) { MessageDisplay.Add("Pelaaja kaksi voitti!"); }
195                if (kolmio == Kolmio2) { MessageDisplay.Add("Pelaaja yksi voitti!"); }
196            }
197
198        }
199
200
201        Timer.SingleShot(3, delegate { ClearAll(); Kuolit(); });
202
203
204
205
206
207
208
209        //Timer Reset = new Timer();
210        //Reset.Interval = 1.0;
211        //Reset.Timeout += delegate { ClearAll(); Begin(); };
212        //    Reset.Start();
213    }
214
215    void Ohjeet()
216    {
217        GameObject ohje = new GameObject(597, 597);
218        ohje.Image = ohjeKuva;
219        Add(ohje);
220        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Begin, "palaa alkuun");
221        Keyboard.Listen(Key.Space, ButtonState.Pressed, Begin, "palaa alkuun");
222        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Begin, "palaa alkuun");
223        ControllerOne.Listen(Button.B, ButtonState.Pressed, Begin, "palaa alkuun");
224        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Begin, "palaa alkuun");
225
226    }
227
228    void Kuolit()
229    {
230        GameObject tausta2 = new GameObject(Window.Width, Window.Height);
231        tausta2.Image = RIPKuva;
232        Add(tausta2);
233        if (pelaajat == 1)
234        {
235            topLista.HighScoreWindow.List.ScoreFormat = "{0:0.00}";
236            topLista.EnterAndShow(aikaLaskuri.SecondCounter.Value);
237            topLista.HighScoreWindow.Closed += RetryValikko;
238            topLista.HighScoreWindow.OKButton.AddShortcut(Button.A);
239        }
240        if (pelaajat == 2)
241        {
242            RetryValikko(new Jypeli.Widgets.Window());
243        }
244    }
245
246    void RetryValikko(Window w)
247    {
248        MultiSelectWindow retryValikko = new MultiSelectWindow("Kuolit", "Uudestaan?", "Palaa alkuvalikkoon", "Lopeta");
249        retryValikko.Color = Color.HotPink;
250        Add(retryValikko);
251        retryValikko.DefaultCancel = 2;
252
253        retryValikko.AddItemHandler(0, AloitaPeli);
254        retryValikko.AddItemHandler(1, Begin);
255        retryValikko.AddItemHandler(2, Exit);
256    }
257
258    void paino(int maara)
259    {
260        painettu = painettu + maara;
261    }
262
263    void AloitaPeli()
264    {
265
266        ClearAll();
267        IsMouseVisible = false;
268        IsFullScreen = true;
269        voitettu = false;
270
271        Level.Background.CreateStars();
272
273        if (pelaajat == 1)
274        {
275            aikaLaskuri = new Timer();
276            aikaLaskuri.Start();
277
278            Label aikaNaytto = new Label();
279            aikaNaytto.TextColor = Color.White;
280            aikaNaytto.Y = Window.Height / 2 - 50;
281            aikaNaytto.DecimalPlaces = 1;
282            aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
283            Add(aikaNaytto);
284            /*int painettu = 0;
285            Keyboard.Listen(Key.LeftControl, ButtonState.Pressed, paino(1), "cheat start");
286            if (painettu == 1)
287            {
288                Keyboard.Listen(Key.E, ButtonState.Pressed, () => aikaLaskuri.SecondCounter.Value += 100000, "cheat");
289            }
290            Keyboard.Listen(Key.LeftControl, ButtonState.Released , paino(-1), "cheat stop");*/
291            //LisaaPala();
292        }
293
294
295        //Gravity = new Vector(0.0, -50.0);
296
297        Surfaces reunat = Level.CreateBorders();
298        AlaReuna = reunat.Bottom;
299        YlaReuna = reunat.Top;
300        VasenReuna = reunat.Left;
301        OikeaReuna = reunat.Right;
302
303        AlaReuna.IsVisible = false;
304        YlaReuna.IsVisible = false;
305        VasenReuna.IsVisible = false;
306        OikeaReuna.IsVisible = false;
307
308        VasenReuna.CollisionIgnoreGroup = 2;
309        OikeaReuna.CollisionIgnoreGroup = 2;
310
311        Kolmio = LuoKolmio();
312        if (pelaajat == 2)
313        {
314            Kolmio2 = LuoKolmio();
315            Kolmio2.Image = Valittukuva2;
316
317            AddCollisionHandler(Kolmio2, "pala", OsuuReunaan);
318            AddCollisionHandler(Kolmio2, "pala", CollisionHandler.ExplodeObject(500, false));
319        }
320        AddCollisionHandler(Kolmio, "pala", OsuuReunaan);
321        AddCollisionHandler(Kolmio, "pala", CollisionHandler.ExplodeObject(500, false));
322
323        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Eelis on paras");
324
325        if (nappaimisto)
326        {
327            Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelajaanappis, null, new Vector(-4000, 0), 10.0);
328            Keyboard.Listen(Key.Left, ButtonState.Released, delegate() { Kolmio.Stop(); Kolmio.Angle = Angle.FromDegrees(0); }, "eelis on weeaboo");
329            Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelajaanappis, null, new Vector(4000, 0), -10.0);
330            Keyboard.Listen(Key.Right, ButtonState.Released, delegate() { Kolmio.Stop(); Kolmio.Angle = Angle.FromDegrees(0); }, "You asked for it");
331            Keyboard.Listen(Key.Escape, ButtonState.Pressed, pauseValikko, "Miro on weeaboo");
332
333        }
334        else
335        {
336            Timer ohjausAjastin = new Timer();
337            ohjausAjastin.Interval = 0.01;
338            ohjausAjastin.Timeout += () => LiikutaPelaajaa(Kolmio, ControllerOne.LeftThumbDirection);
339            ohjausAjastin.Start();
340
341            ControllerOne.Listen(Button.Start, ButtonState.Pressed, pauseValikko, "Miro on weeaboo");
342        }
343
344        if (pelaajat == 2)
345        {
346            Timer ohjausAjastin2 = new Timer();
347            ohjausAjastin2.Interval = 0.01;
348            ohjausAjastin2.Timeout += () => LiikutaPelaajaa(Kolmio2, ControllerTwo.LeftThumbDirection);
349            ohjausAjastin2.Start();
350
351            ControllerTwo.Listen(Button.Start, ButtonState.Pressed, pauseValikko, "Miro on weeaboo");
352        }
353
354        Timer PalaAjastin = new Timer();
355        PalaAjastin.Interval = 0.15;
356        PalaAjastin.Timeout += LisaaPala;
357        PalaAjastin.Start(600);
358        PalaAjastin.Stopped += delegate
359        {
360            Timer PalaAjastin2 = new Timer();
361            PalaAjastin2.Interval = 0.075;
362            PalaAjastin2.Timeout += LisaaPala;
363            PalaAjastin2.Start(1200);
364            PalaAjastin2.Stopped += lopetaPeli;
365
366        };
367
368        Timer PommiAjastin = new Timer();
369        PommiAjastin.Interval = 3.0;
370        PommiAjastin.Timeout += lisaaPommi;
371        PommiAjastin.Start(60);
372    }
373
374    void pelaajanKaanto(PhysicsObject runko, double kulma)
375    {
376        runko.Angle = Angle.FromDegrees(kulma);
377    }
378
379    PhysicsObject LuoKolmio()
380    {
381        PhysicsObject kolmio = new PhysicsObject(100, 100);
382        kolmio.Shape = Shape.Triangle;
383        kolmio.Image = Valittukuva;
384        kolmio.Color = Color.DarkBlue;
385        kolmio.Mass = 1.0;
386        kolmio.CanRotate = false;
387        kolmio.LinearDamping = 0.80;
388        kolmio.IgnoresExplosions = true;
389        kolmio.Y = -300;
390        if (!tormaykset)
391            kolmio.CollisionIgnoreGroup = 1;
392        //Kolmio.CollisionIgnoreGroup = 2;
393        kolmio.Tag = "asia";
394        Add(kolmio);
395        return kolmio;
396    }
397
398    void lopetaPeli()
399    {
400        Timer lopputimer = new Timer();
401        lopputimer.Interval = 4;
402        lopputimer.Timeout += loppu;
403        lopputimer.Start(1);
404
405
406    }
407
408    void LiikutaPelaajaa(PhysicsObject kolmio, Vector tatinTila)
409    {
410        //Vector tatinAsento = tatinTila.StateVector;
411
412        kolmio.Push(new Vector(tatinTila.X * 4000, 0));
413        kolmio.Angle = Angle.FromDegrees(-30 * tatinTila.X);
414    }
415
416    void loppu()
417    {
418        ClearAll();
419        IsFullScreen = true;
420        GameObject lopputausta = new GameObject(Window.Width, Window.Height);
421        lopputausta.Image = loppuKuva;
422        Add(lopputausta);
423
424        Timer loppuTeksti = new Timer();
425        loppuTeksti.Interval = 4;
426        loppuTeksti.Timeout += loppuTeksit;
427        loppuTeksti.Start(1);
428
429        Timer exitTimer = new Timer();
430        exitTimer.Interval = 10;
431        exitTimer.Timeout += Exit;
432        exitTimer.Start(1);
433
434    }
435
436    void loppuTeksit()
437    {
438        MessageDisplay.Add("It was a lie...");
439    }
440
441    void pauseValikko()
442    {
443        Pause();
444        MultiSelectWindow pauseValikko = new MultiSelectWindow("Pelin alkuvalikko", "Jatka", "Palaa alkuvalikkoon", "Lopeta");
445        pauseValikko.Color = Color.HotPink;
446        Add(pauseValikko);
447
448
449        pauseValikko.AddItemHandler(0, delegate()
450        {
451            Pause();
452            pauseValikko.Destroy();
453
454        }
455        );
456        pauseValikko.AddItemHandler(1, delegate { Pause(); nappaimisto = true; Begin(); });
457        pauseValikko.AddItemHandler(2, Exit);
458    }
459
460    void LiikutaPelajaanappis(Vector vektori, double aste)
461    {
462        Kolmio.Push(vektori);
463        Kolmio.Angle = Angle.FromDegrees(aste);
464    }
465
466    void LisaaPala()
467    {
468        PhysicsObject pala = new PhysicsObject(25, 25);
469        //pala.Color = Color.Yellow;
470        //pala.Shape = Shape.Circle;
471        pala.Image = palaKuva;
472        pala.X = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
473        pala.Y = Level.Top;
474        pala.Mass = 0.0000000001;
475        pala.CanRotate = true;
476        //pala.Angle = Angle.FromDegrees();
477        pala.Velocity = new Vector(0, -300);
478        pala.Tag = "pala";
479        // pala.IgnoresExplosions = true;
480        Add(pala);
481
482
483        AddCollisionHandler(pala, AlaReuna, CollisionHandler.DestroyObject);
484
485    }
486
487    void lisaaPommi()
488    {
489        PhysicsObject pommiBody = new PhysicsObject(40, 40);
490        pommiBody.Image = pomminKuva;
491        pommiBody.IgnoresCollisionWith(Kolmio);
492        pommiBody.X = RandomGen.NextDouble(Level.Left + 20, Level.Right - 20);
493        pommiBody.CanRotate = true;
494        //pommiBody.IgnoresCollisionResponse = true;
495        pommiBody.CollisionIgnoreGroup = 1;
496        pommiBody.Y = Level.Top;
497        pommiBody.Velocity = new Vector(0, 600);
498        Add(pommiBody);
499
500        Timer rajahdysAjastin = new Timer();
501        rajahdysAjastin.Interval = RandomGen.NextDouble(1.5, 2.5);
502        rajahdysAjastin.Timeout += delegate
503        {
504            Explosion rajahdys = new Explosion(RandomGen.NextDouble(100, 350));
505            rajahdys.Position = pommiBody.Position;
506            rajahdys.Sound = null;
507            Add(rajahdys);
508            pommiBody.Destroy();
509            rajahdysAjastin.Stop();
510        };
511        rajahdysAjastin.Start();
512
513
514    }
515
516    void tormaysValikko()
517    {
518        MultiSelectWindow tormausValinta = new MultiSelectWindow("Törmäykset?", "Ei", "Kyllä");
519        tormausValinta.Color = Color.HotPink;
520        Add(tormausValinta);
521
522        tormausValinta.AddItemHandler(0, delegate { tormaykset = false; pelaajat = 2; alusValinta(0); });
523        tormausValinta.AddItemHandler(1, delegate { tormaykset = true; pelaajat = 2; alusValinta(0); });
524
525    }
526}
Note: See TracBrowser for help on using the repository browser.