source: 2013/24/EeroF/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1/FysiikkaPeli1.cs @ 4131

Revision 4131, 17.9 KB checked in by eefadjuk, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10
11public class FysiikkaPeli1 : PhysicsGame
12{   
13    IntMeter pisteLaskuri;
14    PhysicsObject Mikko;
15    PhysicsObject Mikkokaveri;
16    Image mikkokuva = LoadImage("Mikko3");
17    Image taustaKuva = LoadImage("ruoho4");
18    Image omenakuva = LoadImage("omena");
19    Image hamiskuva = LoadImage("Hamis");
20    Image SaMiKu = LoadImage("Sahkomies");
21    Image mikkokaveri = LoadImage("MikkoKaveri2");
22    Image Alku = LoadImage("Alku");
23    SoundEffect Ai = LoadSoundEffect("Ai");
24    SoundEffect Nam = LoadSoundEffect("Nam");
25    SoundEffect HamisLahella = LoadSoundEffect("HamisLahella");
26    SoundEffect Kling = LoadSoundEffect("Kling");
27    SoundEffect HamisKuoli = LoadSoundEffect("HamisKuoli");
28    SoundEffect Havio = LoadSoundEffect("Haviov2");
29    SoundEffect Kuoli = LoadSoundEffect("Mikkokuoli");
30    SoundEffect Kuoli2 = LoadSoundEffect("Mikkokaverikuoli");
31    Image Tahti = LoadImage("Tahti");
32    DoubleMeter elamaLaskuri;
33    DoubleMeter elamalaskuri2;
34    AssaultRifle pelaajan1Ase;
35    AssaultRifle pelaajan2Ase;
36    EasyHighScore topLista = new EasyHighScore();
37    int pelaajia;
38    double nopeusVakioAmmukselle = 1;
39    public override void Begin()
40    {
41        MultiSelectWindow valikko = new MultiSelectWindow("Tervetuloa peliin",
42            "Yksinpeli", "Kaksinpeli", "Lopeta");
43        valikko.ItemSelected += PainettiinValikonNappia;
44        Add(valikko);
45        Camera.ZoomToLevel();
46        Level.Background.Image = Alku;
47        Level.Background.ScaleToLevelByHeight();
48
49    }
50
51    void PainettiinValikonNappia(int valinta)
52    {
53        switch (valinta)
54        {
55            case 0:
56                pelaajia = 1;
57                AloitaPeli();
58                break;
59            case 1:
60                pelaajia = 2;
61                AloitaPeli();
62                break;
63            default:
64                Exit();
65                break;
66        }
67    }
68
69        void AloitaPeli()
70        {
71           
72        LuoPelaaja();
73        LuoKentta();
74       
75        LuoPistelaskuri();
76        LuoElamaLaskuri();
77        Level.Background.Image = taustaKuva;
78        Level.Background.TileToLevel();
79        Camera.Follow(Mikko);
80        AddCollisionHandler(Mikko, "Omena", CollisionHandler.DestroyTarget);
81        AddCollisionHandler(Mikko, "Parannus", CollisionHandler.DestroyTarget);
82        AddCollisionHandler(Mikko, "Parannus", Lisaa5Pistetta);
83        AddCollisionHandler(Mikko, "Parannus", ParannaAsetta);
84        AddCollisionHandler(Mikko, "Omena", LisaaPiste);
85        AddCollisionHandler(Mikko, "Omena", LisaaElamaa);
86        AddCollisionHandler(Mikko, "Hamis", VahennaElamaa);
87        if (pelaajia == 2)
88        {
89            LuoKaveri();
90
91            Camera.Follow(Mikko, Mikkokaveri);
92
93            AddCollisionHandler(Mikkokaveri, "Omena", CollisionHandler.DestroyTarget);
94            AddCollisionHandler(Mikkokaveri, "Parannus", CollisionHandler.DestroyTarget);
95            AddCollisionHandler(Mikkokaveri, "Parannus", Lisaa5Pistetta);
96            AddCollisionHandler(Mikkokaveri, "Parannus", ParannaAsetta);
97            AddCollisionHandler(Mikkokaveri, "Omena", LisaaPiste);
98            AddCollisionHandler(Mikkokaveri, "Omena", LisaaElamaa);
99            AddCollisionHandler(Mikkokaveri, "Hamis", VahennaElamaa);
100
101        }
102
103        AsetaOhjaimet();
104    }
105
106    void LisaaPiste(PhysicsObject tormaaja, PhysicsObject kohde)
107    {
108        pisteLaskuri.Value++;
109        Nam.Play();
110    }
111
112    void Lisaa5Pistetta(PhysicsObject tormaaja, PhysicsObject kohde)
113    {
114        pisteLaskuri.Value += 5;
115        Kling.Play();
116    }
117
118    void LuoPistelaskuri()
119    {
120        pisteLaskuri = new IntMeter(0);
121
122        Label pisteNaytto = new Label();
123        pisteNaytto.X = Screen.Left + 100;
124        pisteNaytto.Y = Screen.Top - 100;
125        pisteNaytto.TextColor = Color.Black;
126        pisteNaytto.Color = Color.White;
127        pisteNaytto.Title = "Pisteet";
128
129        pisteNaytto.BindTo(pisteLaskuri);
130        Add(pisteNaytto);
131    }
132
133    void Vihukuoli()
134    {
135        pisteLaskuri.Value += 5;
136        HamisKuoli.Play();
137    }
138
139
140    void AsetaOhjaimet()
141    {
142        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
143        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopetus, "Lopeta peli");
144        Keyboard.Listen(Key.Up, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu", Mikko, 250.0);
145        Keyboard.Listen(Key.Down, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu taakse", Mikko, -250.0);
146        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaaja, null, Mikko);
147        Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaPelaaja, null, Mikko);
148        Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaPelaaja, null, Mikko);
149        Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaPelaaja, null, Mikko);
150        Keyboard.Listen(Key.P, ButtonState.Released, PysaytaPelaaja, null, Mikko);
151        Keyboard.Listen(Key.O, ButtonState.Released, PysaytaPelaaja, null, Mikko);
152        Keyboard.Listen(Key.Right, ButtonState.Down, KaantyyOikealle, "Pelaaja kääntyy", Mikko);
153        Keyboard.Listen(Key.Left, ButtonState.Down, KaantyyVasemmalle, "Pelaaja kääntyy", Mikko);
154        Keyboard.Listen(Key.O, ButtonState.Down, KaantyyVasemmalle2, "Pelaaja kääntyy vähän", Mikko);
155        Keyboard.Listen(Key.P, ButtonState.Down, KaantyyOikealle2, "Pelaaja kääntyy vähän", Mikko);
156        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ampuu, "Ampuu", pelaajan1Ase);
157        Keyboard.Listen(Key.H, ButtonState.Pressed, ShowControlHelp, "Apu");
158
159        if (pelaajia == 2)
160        {
161            Keyboard.Listen(Key.W, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu", Mikko, 250.0);
162            Keyboard.Listen(Key.S, ButtonState.Down, PelaajaKavelee, "Pelaaja liikkuu taakse", Mikko, -250.0);
163            Keyboard.Listen(Key.W, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
164            Keyboard.Listen(Key.S, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
165            Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
166            Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
167            Keyboard.Listen(Key.D, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
168            Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPelaaja, null, Mikkokaveri);
169            Keyboard.Listen(Key.D, ButtonState.Down, KaantyyOikealle, "Pelaaja kääntyy", Mikkokaveri);
170            Keyboard.Listen(Key.A, ButtonState.Down, KaantyyVasemmalle, "Pelaaja kääntyy", Mikkokaveri);
171            Keyboard.Listen(Key.Q, ButtonState.Down, KaantyyVasemmalle2, "Pelaaja kääntyy vähän", Mikkokaveri);
172            Keyboard.Listen(Key.E, ButtonState.Down, KaantyyOikealle2, "Pelaaja kääntyy vähän", Mikkokaveri);
173            Keyboard.Listen(Key.LeftShift, ButtonState.Down, Ampuu, "Ampuu", pelaajan2Ase);
174
175            ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ampuu, "Ampuu", pelaajan2Ase);
176            ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, KuunteleeOikeaaTattia, "Kääntää pelaajaa", Mikkokaveri);
177            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, PelaajaKavelee, "LiikuttaaPelaajaa", Mikkokaveri, 250.0);
178            ControllerOne.Listen(Button.DPadDown, ButtonState.Down, PelaajaKavelee, "LiikuttaaPelaajaa", Mikkokaveri, -250.0);
179            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, PysaytaPelaaja, "LiikuttaaPelaajaa", Mikkokaveri);
180            ControllerOne.Listen(Button.DPadDown, ButtonState.Released, PysaytaPelaaja, "LiikuttaaPelaajaa", Mikkokaveri);
181        }
182    }
183    void KuunteleeOikeaaTattia(AnalogState tila, PhysicsObject pelaaja)
184    {
185        pelaaja.Angle = tila.StateVector.Angle;
186        pelaaja.AngularVelocity = 0;
187    }
188    void PelaajaKavelee(PhysicsObject Mikko, double nopeus)
189    {
190
191        Vector pelaajanSuunta = Vector.FromLengthAndAngle(nopeus, Mikko.Angle);
192        Mikko.Velocity = pelaajanSuunta;
193
194    }
195    void PysaytaPelaaja(PhysicsObject Mikko)
196    {
197        Vector nopeus = Vector.Zero;
198        Mikko.Velocity = nopeus;
199        Mikko.AngularVelocity = 0.0;
200
201    }
202    void KaantyyOikealle(PhysicsObject Mikko)
203    {
204        Mikko.AngularVelocity = -5.0;
205    }
206    void KaantyyVasemmalle(PhysicsObject Mikko)
207    {
208        Mikko.AngularVelocity = 5.0;
209    }
210    void Ampuu(AssaultRifle ase)
211    {
212       
213        PhysicsObject ammus = ase.Shoot();
214
215        if (ammus != null)
216        {
217            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
218            ammus.Mass = 100;
219            ammus.Velocity *= nopeusVakioAmmukselle;
220        }
221    }
222    void KaantyyOikealle2(PhysicsObject Mikko)
223    {
224        Mikko.AngularVelocity = -1.0;
225    }
226    void KaantyyVasemmalle2(PhysicsObject Mikko)
227    {
228        Mikko.AngularVelocity = 1.0;
229    }
230    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
231    {
232        ammus.Destroy();
233
234        if (kohde is Vihu)
235        {
236            Vihu hamis = kohde as Vihu;+
237            hamis.ElamaLaskuri.Value -= 1;
238            hamis.Hit(Vector.FromLengthAndAngle(2500, ammus.Angle));
239        }
240    }
241    void Hamislahella()
242    {
243        if (HamisLahella.IsPlaying == false)
244        { HamisLahella.Play(); }
245    }
246    void LuoKentta()
247    {
248        Level.Width = 10000;
249        Level.Height = 10000;
250
251
252        for (int i = 0; i < 100; i++)
253        {
254            LuoOmena();
255        }
256
257
258        for (int i = 0; i < 10; i++)
259        {
260
261            int luku = RandomGen.NextInt(-5000, 5000);
262            int luku2 = RandomGen.NextInt(-5000, 5000);
263            int luku3 = RandomGen.NextInt(3, 15);
264
265            for (int j = 0; j < luku3; j++)
266                LuoSaMi(luku, luku2);
267        }
268
269
270        for (int i = 0; i < 10; i++)
271        {
272
273            LuoHamis();
274
275
276        }
277
278        for (int i = 0; i < 10; i++)
279        {
280            LuoParannus();
281        }
282        Level.CreateBorders();
283        Timer ajastin = new Timer();
284        ajastin.Interval = 7.5;
285        ajastin.Timeout += LisaaVihuja;
286        ajastin.Start();
287
288
289    }
290    void LisaaVihuja()
291    {
292        for (int i = 0; i < 2; i++)
293        {
294            LuoHamis();
295        }
296    }
297    void LuoOmena()
298    {
299
300        int luku = RandomGen.NextInt(-5000, 5000);
301        int luku2 = RandomGen.NextInt(-5000, 5000);
302        PhysicsObject Omena = new PhysicsObject(15, 15);
303        Omena.Image = omenakuva;
304        Omena.Tag = "Omena";
305        Omena.Shape = Shape.Circle;
306        Omena.Color = Color.Red;
307        Omena.X = luku;
308        Omena.Y = luku2;
309        Omena.MakeStatic();
310        Add(Omena);
311
312
313
314    }
315    void LuoSaMi(double x, double y)
316    {
317
318
319        int luku = RandomGen.NextInt(-500, 500);
320        int luku2 = RandomGen.NextInt(-500, 500);
321        PhysicsObject SaMi = new PhysicsObject(120, 100);
322        SaMi.Image = SaMiKu;
323
324
325        SaMi.X = x + luku;
326        SaMi.Y = y + luku2;
327        SaMi.Mass = 100000000000000000;
328        Add(SaMi);
329
330    }
331    void LuoElamaLaskuri()
332    {
333        elamaLaskuri = new DoubleMeter(10, 0, 20);
334        elamaLaskuri.LowerLimit += delegate { ElamaLoppui(Mikko); };
335
336        LuoElamaPalkki(Screen.Left + 150, Screen.Top - 20, elamaLaskuri);
337
338        if (pelaajia == 2)
339        {
340            elamalaskuri2 = new DoubleMeter(10, 0, 20);
341            elamalaskuri2.LowerLimit += delegate { ElamaLoppui(Mikkokaveri); };
342
343            LuoElamaPalkki(Screen.Right - 150, Screen.Top - 20, elamalaskuri2);
344        }
345    }
346    void LuoElamaPalkki(double x, double y, DoubleMeter seurattava)
347    {
348        ProgressBar elamaPalkki = new ProgressBar(150, 20);
349        elamaPalkki.X = x;
350        elamaPalkki.Y = y;
351        elamaPalkki.BindTo(seurattava);
352        elamaPalkki.Color = Color.Transparent;
353        elamaPalkki.BarColor = Color.Red;
354        elamaPalkki.BorderColor = Color.Black;
355        Add(elamaPalkki);
356    }
357
358    void LuoElamaLaskurivihkulle(Vihu vihu)
359    {
360        ProgressBar elamaPalkki = new ProgressBar(150, 20);
361        elamaPalkki.Y = 40;
362        elamaPalkki.BindTo(vihu.ElamaLaskuri);
363        elamaPalkki.Color = Color.Transparent;
364        elamaPalkki.BarColor = Color.Blue;
365        elamaPalkki.BorderColor = Color.Black;
366        vihu.Add(elamaPalkki);
367    }
368
369    void ElamaLoppui(PhysicsObject kuollut) 
370    {
371        kuollut.Destroy();
372        if (kuollut.Image.Equals(mikkokuva)) Kuoli.Play();
373        else Kuoli2.Play();
374       
375    }
376
377    void TUHO()
378    {
379        Timer ajastin = new Timer();
380        ajastin.Interval = 1;
381        ajastin.Timeout += delegate
382        {
383
384            Havio.Play();
385            topLista.EnterAndShow(pisteLaskuri.Value);
386        };
387        ajastin.Start(1);
388           
389           
390            //   topLista.HighScoreWindow.Closed += AloitaPeli;
391       
392    }
393    void LisaaElamaa(PhysicsObject tormaaja, PhysicsObject kohde)
394    {
395        if (tormaaja.Image.Equals(mikkokuva)) elamaLaskuri.Value++;
396        else elamalaskuri2.Value++;
397        DoNextUpdate (delegate
398        {
399            tormaaja.AngularVelocity = 0;
400            tormaaja.AngularAcceleration = 0;
401        });
402       
403    }
404    void VahennaElamaa(PhysicsObject tormaaja, PhysicsObject kohde)
405    {
406        if (tormaaja.Image.Equals(mikkokuva)) elamaLaskuri.Value--;
407        else elamalaskuri2.Value--;
408
409        Ai.Play();
410    }
411    void LuoHamis()
412    {
413        Vihu Hamis = new Vihu(30, 30);
414        Hamis.Color = Color.Black;
415        Hamis.Tag = "Hamis";
416        Hamis.ElamaLaskuri.LowerLimit += Vihukuoli;
417        Hamis.CanRotate = false;
418        FollowerBrain aivot = new FollowerBrain("pelaaja");
419        Hamis.Brain = aivot;
420        aivot.Speed = 100;
421        aivot.Active = true;
422        aivot.TargetClose += Hamislahella;
423        aivot.DistanceClose = 1000;
424
425        Hamis.Image = hamiskuva;
426
427        int luku = RandomGen.NextInt(-5000, 5000);
428        int luku2 = RandomGen.NextInt(-5000, 5000);
429        Hamis.X = luku;
430        Hamis.Y = luku2;
431        Add(Hamis);
432
433        LuoElamaLaskurivihkulle(Hamis);
434    }
435    void LuoParannus()
436    {
437        int luku = RandomGen.NextInt(-5000, 5000);
438        int luku2 = RandomGen.NextInt(-5000, 5000);
439        PhysicsObject Parannus = new PhysicsObject(50, 50);
440        Parannus.Image = Tahti;
441        Parannus.Tag = "Parannus";
442        Parannus.MakeStatic();
443        //Parannus.Shape = Shape.Star;
444        //Parannus.Color = Color.Yellow;
445        Parannus.X = luku;
446        Parannus.Y = luku2;
447        Add(Parannus);
448    }
449
450    void LuoPelaaja()
451    {
452        Mikko = new PhysicsObject(70, 49);
453        Mikko.Image = mikkokuva;
454
455        Mikko.Tag = "pelaaja";
456        if (pelaajia == 2)
457            Mikko.Destroyed += delegate { if (Mikko.IsDestroyed && Mikkokaveri.IsDestroyed) TUHO(); };
458        else Mikko.Destroyed += delegate { TUHO(); };
459        Add(Mikko);
460        pelaajan1Ase = new AssaultRifle(30, 10);
461        //  pelaajan1Ase.
462        pelaajan1Ase.ProjectileCollision = AmmusOsui;
463        pelaajan1Ase.FireRate = 2;
464
465
466
467      //  pelaajan1Ase.Power.DefaultValue = 100;
468        Mikko.Add(pelaajan1Ase);
469        pelaajan1Ase.Y = -10;
470        pelaajan1Ase.IsVisible = false;
471        //LuoKaveri();
472    }
473    void LuoKaveri()
474    {
475        Mikkokaveri = new PhysicsObject(70, 49);
476        Mikkokaveri.Image = mikkokaveri;
477        Mikkokaveri.X = -60;
478        Mikkokaveri.Tag = "pelaaja";
479        Mikkokaveri.Destroyed += delegate { if (Mikko.IsDestroyed && Mikkokaveri.IsDestroyed) TUHO(); };
480
481        pelaajan2Ase = new AssaultRifle(30, 10);
482        pelaajan2Ase.ProjectileCollision = AmmusOsui;
483        pelaajan2Ase.FireRate = 2;
484
485
486
487      //  pelaajan2Ase.Power.DefaultValue = 100;
488        Mikkokaveri.Add(pelaajan2Ase);
489        pelaajan2Ase.Y = -10;
490        pelaajan2Ase.IsVisible = false;
491
492        Add(Mikkokaveri);
493    }
494
495
496
497    void ParannaAsetta(PhysicsObject tormaaja, PhysicsObject kohde)
498    {
499        if (tormaaja.Image.Equals(mikkokuva))
500        {
501            int luku = RandomGen.NextInt(1, 3);
502            pelaajan1Ase.FireRate += luku;
503            nopeusVakioAmmukselle += 0.1;
504        }
505        else
506        {
507            int luku = RandomGen.NextInt(1, 3);
508            pelaajan2Ase.FireRate += luku;
509            nopeusVakioAmmukselle += 0.1;
510        }
511        DoNextUpdate(delegate
512        {
513            tormaaja.AngularVelocity = 0;
514            tormaaja.AngularAcceleration = 0;
515        });
516    }
517    void Lopetus()
518    {
519        MultiSelectWindow valikko = new MultiSelectWindow("Haluatko lopettaa?",
520           "Kyllä", "Ei");
521        valikko.ItemSelected += PainettiinValikonNappia2;
522        Add(valikko);
523        IsPaused = true;
524     
525    }
526
527    void PainettiinValikonNappia2(int valinta)
528    {
529        switch (valinta)
530        {
531            case 0:
532
533                Exit();
534                break;
535            case 1:
536                IsPaused = false;
537   
538                break;
539           
540        }
541    }
542
543    void Randomgen()
544    {
545        //  int luku = RandomGen.NextInt( 100 ); (pienempi kuin 100)
546        //int luku = RandomGen.NextInt( 50, 1000 ); (väliltä 50-999)
547    }
548
549
550}
551
552class Vihu : PhysicsObject
553{
554    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
555    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
556
557    public Vihu(double leveys, double korkeus)
558        : base(leveys, korkeus)
559    {
560        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
561
562    }
563}
564class Vihu2 : PhysicsObject
565{
566    private IntMeter elamaLaskuri = new IntMeter(1, 0, 1);
567    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
568
569    public Vihu2(double leveys, double korkeus)
570        : base(leveys, korkeus)
571    {
572        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
573
574    }
575}
Note: See TracBrowser for help on using the repository browser.