source: 2012/24/AtteJ/Räiskintä-mättöpeli/Räiskintä-mättöpeli/Räiskintä-mättöpeli/Räiskintä_mättöpeli.cs @ 3120

Revision 3120, 17.4 KB checked in by atjokine, 9 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
9public class Räiskintä_mättöpeli : PhysicsGame
10{
11
12    Vector liikuYlös = new Vector(0.0, 250.0);
13    PhysicsObject pelaaja;
14    PhysicsObject pelaaja2;
15    List<PhysicsObject> viholliset = new List<PhysicsObject>();
16    Weapon Ase;
17    Weapon Ase2;
18    IntMeter VihollisiaJaljella;
19    IntMeter VihollisiaTuhottu;
20    IntMeter KierrosLaskuri;
21    DoubleMeter Elamat;
22    DoubleMeter Elamat2;
23    ScoreList TopLista = new ScoreList(10, false, 0);
24    bool peliLoppui = false;
25
26    int Vihollisia = 10;
27
28    int vihollisiaV2 = 0;
29
30    int vihollisiaV3 = 0;
31
32
33    PhysicsObject vihollinenV1(double x, double y)
34    {
35        TagFollowerBrain SeuraajanAivot = new TagFollowerBrain("pelaaja", 10000);
36        PhysicsObject enemy = new PhysicsObject(30, 30);
37        enemy.Brain = SeuraajanAivot;
38        enemy.X = x;
39        enemy.Y = y;
40        enemy.Shape = Shape.Circle;
41        enemy.Color = Color.Green;
42        enemy.Tag = "vihollinen1";
43        Add(enemy);
44        viholliset.Add(enemy);
45        return enemy;
46    }
47
48    PhysicsObject vihollinenV2(double x, double y)
49    {
50        TagFollowerBrain SeuraajanAivot = new TagFollowerBrain("pelaaja", 12000);
51        PhysicsObject enemy = new PhysicsObject(30, 30);
52        enemy.Brain = SeuraajanAivot;
53        enemy.X = x;
54        enemy.Y = y;
55        enemy.Shape = Shape.Circle;
56        enemy.Color = Color.Yellow;
57        enemy.Tag = "vihollinen2";
58        Add(enemy);
59        viholliset.Add(enemy);
60        return enemy;
61    }
62
63    PhysicsObject vihollinenV3(double x, double y)
64    {
65        TagFollowerBrain SeuraajanAivot = new TagFollowerBrain("pelaaja", 12000);
66        PhysicsObject enemy = new PhysicsObject(30, 30);
67        enemy.Brain = SeuraajanAivot;
68        enemy.X = x;
69        enemy.Y = y;
70        enemy.Shape = Shape.Circle;
71        enemy.Color = Color.Red;
72        enemy.Tag = "vihollinen3";
73        Add(enemy);
74        viholliset.Add(enemy);
75        return enemy;
76    }
77
78
79    public override void Begin()
80    {
81        //IsFullScreen = true;
82
83        MultiSelectWindow AlkuValikko = new MultiSelectWindow("Tervetuloa peliin",
84            "Aloita", "Ohje", "Poistu");
85        AlkuValikko.ItemSelected += PainettiinValikonNappia;
86        Level.Background.CreateStars();
87        Add(AlkuValikko);
88    }
89
90    void PainettiinValikonNappia(int valinta)
91    {
92        switch (valinta)
93        {
94            case 0:
95                //aloita peli
96                Timer.SingleShot(0.0, YksinVaiKaksinPeli);
97                break;
98            case 1:
99                //miten peliä pelataan
100                Ohje();
101                break;
102            case 2:
103                Exit();
104                break;
105        }
106    }
107
108    void YksinVaiKaksinPeli()
109    {
110        MultiSelectWindow PelaajienMaara = new MultiSelectWindow("Yksin- vai kaksinpeli?",
111            "Yksinpeli", "Kaksinpeli", "Takaisin");
112        PelaajienMaara.ItemSelected += PainettiinValikon2Nappia;
113        Add(PelaajienMaara);
114    }
115
116    void PainettiinValikon2Nappia(int valinta2)
117    {
118        switch (valinta2)
119        {
120            case 0:
121                Timer.SingleShot(0.5, AlustaPeli);  //Peli alkaa normaalisti.
122                break;
123            case 1:
124                Timer.SingleShot(0.5, AlustaPeli2); //Kaksinpeli
125                break;
126            case 2:
127                Timer.SingleShot(0.0, Begin);
128                break;
129        }
130    }
131
132    void AlustaPeli()
133    {
134        LuoKenttä();
135        Pelaaja();
136        Aseet();
137        LisääOhjaimet();
138        LuoKierrosLaskuri();
139        LuoPowerUpit();
140
141        if (DataStorage.Exists("pisteet.xml"))
142            TopLista = DataStorage.Load<ScoreList>(TopLista, "pisteet.xml");
143
144        int i = 0;
145        while (i < Vihollisia)
146        {
147            vihollinenV1(Level.Right - 30, RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
148            i++;
149        }
150
151
152    }
153
154    void AlustaPeli2()
155    {
156        LuoKenttä();
157        Pelaaja();
158        Pelaaja2();
159        Aseet();
160        Aseet2();
161        LisääOhjaimet();
162        LisääOhjaimet2();
163        LuoKierrosLaskuri();
164        LuoPowerUpit();
165
166        if (DataStorage.Exists("pisteet.xml"))
167            TopLista = DataStorage.Load<ScoreList>(TopLista, "pisteet.xml");
168
169        int i = 0;
170        while (i < Vihollisia)
171        {
172            vihollinenV1(Level.Right - 30, RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
173            i++;
174        }
175
176
177    }
178
179    void Ohje()
180    {
181
182        MessageWindow Ohje = new MessageWindow("Ohjaimen analogisauvalla tai nuolinäp-päimillä liikutat pelihahmoa. X:llä tai S:llä ammut. Kierroksilla 1-5 vastaan tulee vain vihollisia jotka kuolevat yh- destä iskusta. Levelistä viisi eteenpäin vastaan tulee myös vihollisia jotka kuo-levat 2 osumasta. Levelillä 10 tulee 3:n osuman vihollisia.");
183        Ohje.OKButton.Text = "Takaisin";
184        Ohje.Closed += delegate { Begin(); };
185        Add(Ohje);
186
187    }
188
189    void LuoKenttä()
190    {
191        Level.Background.CreateStars();
192        Level.CreateBorders();
193        Camera.ZoomToLevel();
194        VihollisiaJaljella = new IntMeter(Vihollisia);
195        VihollisiaTuhottu = new IntMeter(0);
196        VihollisiaJaljella.LowerLimit += KaikkiVihollisetTuhottu;
197
198        Label Pistenaytto = new Label();
199        Pistenaytto.X = Level.Right - 70;
200        Pistenaytto.Y = Level.Top - 65;
201        Pistenaytto.TextColor = Color.White;
202        Pistenaytto.Color = Color.Red;
203
204        Pistenaytto.BindTo(VihollisiaTuhottu);
205        Add(Pistenaytto);
206
207        Label Pisteteksti = new Label("Tuhottu:");
208        Pisteteksti.X = Level.Right - 70;
209        Pisteteksti.Y = Level.Top - 40;
210        Pisteteksti.TextColor = Color.White;
211        Pisteteksti.Color = Color.Red;
212        Add(Pisteteksti);
213
214
215    }
216
217    void Pelaaja()
218    {
219        pelaaja = new PhysicsObject(30, 30);
220        pelaaja.Shape = Shape.Circle;
221        pelaaja.Color = Color.Blue;
222        pelaaja.X = -400;
223        pelaaja.Y = -30;
224        pelaaja.Tag = "pelaaja";
225        Add(pelaaja);
226        pelaaja.LinearDamping = 0.9;
227        pelaaja.Restitution = 0.0;
228        pelaaja.CanRotate = false;
229
230        Elamat = new DoubleMeter(100);
231        Elamat.MaxValue = 100;
232        Elamat.LowerLimit += P1kuoli;
233
234        ProgressBar ElämäPalkki = new ProgressBar(150, 10);
235        ElämäPalkki.BindTo(Elamat);
236        ElämäPalkki.X = Level.Left + 100;
237        ElämäPalkki.Y = Level.Top - 40;
238        ElämäPalkki.BarColor = Color.Red;
239        ElämäPalkki.BorderColor = Color.Green;
240        Add(ElämäPalkki);
241
242        AddCollisionHandler(pelaaja, "vihollinen1", VihollinenOsuuPelaajaan);
243        AddCollisionHandler(pelaaja, "vihollinen2", VihollinenOsuuPelaajaan);
244        AddCollisionHandler(pelaaja, "vihollinen3", VihollinenOsuuPelaajaan);
245        AddCollisionHandler(pelaaja, "PowerUp", PowerUpit);
246    }
247
248    void Pelaaja2()
249    {
250        pelaaja2 = new PhysicsObject(30, 30);
251        pelaaja2.Shape = Shape.Circle;
252        pelaaja2.Color = Color.Green;
253        pelaaja2.X = -400;
254        pelaaja2.Y = 30;
255        pelaaja2.Tag = "pelaaja";
256        Add(pelaaja2);
257        pelaaja2.LinearDamping = 0.9;
258        pelaaja2.Restitution = 0.0;
259        pelaaja2.CanRotate = false;
260
261        Elamat2 = new DoubleMeter(100);
262        Elamat2.MaxValue = 100;
263        Elamat2.LowerLimit += P2kuoli;
264
265        ProgressBar ElämäPalkki = new ProgressBar(150, 10);
266        ElämäPalkki.BindTo(Elamat2);
267        ElämäPalkki.X = Level.Left + 270;
268        ElämäPalkki.Y = Level.Top - 40;
269        ElämäPalkki.BarColor = Color.Red;
270        ElämäPalkki.BorderColor = Color.Green;
271        Add(ElämäPalkki);
272
273        AddCollisionHandler(pelaaja2, "vihollinen1", VihollinenOsuuPelaajaan2);
274        AddCollisionHandler(pelaaja2, "vihollinen2", VihollinenOsuuPelaajaan2);
275        AddCollisionHandler(pelaaja2, "vihollinen3", VihollinenOsuuPelaajaan2);
276        AddCollisionHandler(pelaaja2, "PowerUp", PowerUpit);
277    }
278
279    void LisääOhjaimet()
280    {
281        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, "Liikuta pelaajaa tattia pyörittämällä", pelaaja);
282        ControllerOne.Listen(Button.X, ButtonState.Down, Ampuminen, "ammu", pelaaja, Ase);
283        ControllerOne.Listen(Button.Start, ButtonState.Pressed, ConfirmExit, null);
284
285
286
287
288        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-5000, 0), pelaaja);
289        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, new Vector(5000, 0), pelaaja);
290        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 5000), pelaaja);
291        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -5000), pelaaja);
292        Keyboard.Listen(Key.L, ButtonState.Down, Ampuminen, "ammu", pelaaja, Ase);
293        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
294
295
296    }
297
298    void LisääOhjaimet2()
299    {
300        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, "Liikuta pelaajaa tattia pyörittämällä", pelaaja2);
301        ControllerTwo.Listen(Button.X, ButtonState.Down, Ampuminen, "ammu", pelaaja2, Ase2);
302        ControllerTwo.Listen(Button.Start, ButtonState.Pressed, ConfirmExit, null);
303
304
305
306        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-5000, 0), pelaaja2);
307        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(5000, 0), pelaaja2);
308        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 5000), pelaaja2);
309        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -5000), pelaaja2);
310        Keyboard.Listen(Key.G, ButtonState.Down, Ampuminen, "ammu", pelaaja2, Ase2);
311        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
312
313
314    }
315
316    void LiikutaPelaajaa(Vector vektori, PhysicsObject pelaaja)
317    {
318        pelaaja.Push(vektori);
319    }
320
321    void LiikutaPelaajaa2(AnalogState TatinTila, PhysicsObject pelaaja)
322    {
323        Vector tatinAsento = TatinTila.StateVector;
324        pelaaja.Push(tatinAsento * 5000);
325    }
326
327    void Aseet()
328    {
329        AssaultRifle pyssy = new AssaultRifle(20, 5);
330        pelaaja.Add(pyssy);
331        pyssy.Ammo.Value = 99999999;
332        pyssy.IsVisible = false;
333        pyssy.Power.Value = 500;
334        pyssy.Power.DefaultValue = 500;
335        Ase = pyssy;
336
337    }
338
339    void Aseet2()
340    {
341        AssaultRifle pyssy = new AssaultRifle(20, 5);
342        pelaaja2.Add(pyssy);
343        pyssy.Ammo.Value = 99999999;
344        pyssy.IsVisible = false;
345        pyssy.Power.Value = 500;
346        pyssy.Power.DefaultValue = 500;
347        Ase2 = pyssy;
348
349    }
350
351    void LuotiOsuuViholliseen(PhysicsObject ammus, PhysicsObject kohde)
352    {
353        ammus.Destroy();
354        Explosion rajahdys = new Explosion(10);
355        rajahdys.Force = 0;
356        rajahdys.Position = ammus.Position;
357        string vihollisTagi = kohde.Tag.ToString();
358
359        if (vihollisTagi.StartsWith("vihollinen"))
360        {
361            int hp = int.Parse(vihollisTagi.Substring(10));
362            hp--;
363
364            if (hp <= 0)
365            {
366                kohde.Destroy();
367                VihollisiaJaljella.Value--;
368                VihollisiaTuhottu.Value++;
369                viholliset.Remove(kohde);
370            }
371            else
372            {
373                kohde.Tag = "vihollinen" + hp;
374            }
375        }
376        Add(rajahdys);
377
378    }
379
380    void KaikkiVihollisetTuhottu(int vihollisia)
381    {
382        MessageDisplay.Add("Viholliset tuhottu!");
383
384        Timer.SingleShot(1.5, LisaaVihollisia);
385
386    }
387
388    void Ampuminen(PhysicsObject pelaaja, Weapon Ase)
389    {
390        PhysicsObject panos = Ase.Shoot();
391        if (panos != null)
392        {
393            AddCollisionHandler(panos, LuotiOsuuViholliseen);
394            panos.Shape = Shape.Diamond;
395            panos.Color = Color.Gray;
396            panos.Width *= 2;
397            panos.X = pelaaja.X + 30;
398        }
399    }
400
401    void VihollinenOsuuPelaajaan(PhysicsObject pelaaja, PhysicsObject enemy)
402    {
403        if (enemy.Tag == "vihollinen3")
404        {
405            Elamat.Value -= 30;
406        }
407        else if (enemy.Tag == "vihollinen2")
408        {
409            Elamat.Value -= 20;
410        }
411        else if (enemy.Tag == "vihollinen1")
412        {
413            Elamat.Value -= 10;
414        }
415
416        ControllerOne.Vibrate(1.0, 1.0, 1.0, 1.0, 0.2);
417
418    }
419
420    void VihollinenOsuuPelaajaan2(PhysicsObject pelaaja2, PhysicsObject enemy)
421    {
422        if (enemy.Tag == "vihollinen3")
423        {
424            Elamat2.Value -= 30;
425        }
426        else if (enemy.Tag == "vihollinen2")
427        {
428            Elamat2.Value -= 20;
429        }
430        else if (enemy.Tag == "vihollinen1")
431        {
432            Elamat2.Value -= 10;
433        }
434
435        ControllerTwo.Vibrate(1.0, 1.0, 1.0, 1.0, 0.2);
436    }
437
438    void P1kuoli(double ElamatLopussa)
439    {
440        Explosion rajahdys2 = new Explosion(100);
441        rajahdys2.Position = pelaaja.Position;
442        rajahdys2.Speed = 500.0;
443        rajahdys2.Force = 10000;
444
445        if (pelaaja2 != null)
446        {
447            rajahdys2.AddShockwaveHandler(pelaaja2, KumoaPaineaalto);
448        }
449
450        Add(rajahdys2);
451        pelaaja.Destroy();
452        PeliLoppui();
453       
454    }
455
456    void KumoaPaineaalto(IPhysicsObject pelaaja, Vector voima)
457    {
458        pelaaja.Hit(-voima);
459    }
460
461    void P2kuoli(double Elamat2Lopussa)
462    {
463        Explosion rajahdys2 = new Explosion(100);
464        rajahdys2.Position = pelaaja2.Position;
465        rajahdys2.Speed = 500.0;
466        rajahdys2.Force = 10000;
467        rajahdys2.AddShockwaveHandler(pelaaja, KumoaPaineaalto);
468        Add(rajahdys2);
469        pelaaja2.Destroy();
470        PeliLoppui();
471    }
472
473    void PeliLoppui()
474    {
475        if (pelaaja.IsDestroyed && (pelaaja2 == null || pelaaja2.IsDestroyed))
476        {
477            HighScoreWindow();
478        }
479    }
480
481    void PainettiinValikon3Nappia(int valinta3)
482    {
483        switch (valinta3)
484        {
485            case 0:
486                Timer.SingleShot(1.0, Begin);
487                break;
488            case 1:
489                Exit();
490                break;
491        }
492    }
493
494    void HighScoreWindow()
495    {
496
497
498        HighScoreWindow topIkkuna = new HighScoreWindow(
499                     "Parhaat pisteet",
500                     "Onneksi olkoon, pääsit listalle tapoilla %p! Syötä nimesi:",
501                     TopLista, VihollisiaTuhottu.Value);
502        topIkkuna.Closed += TallennaPisteet;
503        Add(topIkkuna);
504        peliLoppui = true;
505
506        if (peliLoppui) return;
507        {
508            MultiSelectWindow PeliLoppui = new MultiSelectWindow("",
509                "Uudestaan", "Poistu");
510            PeliLoppui.ItemSelected += PainettiinValikon3Nappia;
511            PeliLoppui.X = 0;
512            PeliLoppui.Y = -100;
513            Add(PeliLoppui);
514        }
515
516        //viholliset
517    }
518
519    void TallennaPisteet(Window sender)
520    {
521        DataStorage.Save<ScoreList>(TopLista, "pisteet.xml");
522
523        Timer.SingleShot(1.0, Exit);
524
525    }
526
527    void LisaaVihollisia()
528    {
529        Vihollisia = Vihollisia + 20;
530
531        if (KierrosLaskuri.Value >= 9)
532        {
533            vihollisiaV3 = vihollisiaV3 + 5;
534        }
535
536        if (KierrosLaskuri.Value >= 4)
537        {
538            vihollisiaV2 = vihollisiaV2 + 10;
539        }
540
541        VihollisiaJaljella.Value = Vihollisia + vihollisiaV2;
542
543        KierrosLaskuri.Value += 1;
544
545        int i = 0;
546        while (i < Vihollisia)
547        {
548            vihollinenV1(Level.Right - 30, RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
549            i++;
550        }
551
552        i = 0;
553        while (i < vihollisiaV2)
554        {
555            vihollinenV2(Level.Right - 30, RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30));
556            i++;
557        }
558    }
559
560    void LuoKierrosLaskuri()
561    {
562        KierrosLaskuri = new IntMeter(1);
563        Label KierrosNaytto = new Label();
564        KierrosNaytto.X = Level.Center.X;
565        KierrosNaytto.Y = Level.Top - 40;
566        KierrosNaytto.TextColor = Color.White;
567        KierrosNaytto.Color = Color.Red;
568        KierrosNaytto.Title = "Kierros";
569        KierrosNaytto.BindTo(KierrosLaskuri);
570        Add(KierrosNaytto);
571    }
572
573    void PowerUpit(PhysicsObject tormaaja, PhysicsObject kohde)
574    {
575        kohde.Destroy();
576
577        int v = 0;
578        while (v < viholliset.Count)
579        {
580            viholliset[v].Destroy();
581            v++;
582            VihollisiaJaljella.Value--;
583            VihollisiaTuhottu.Value++;
584        }
585        viholliset.Clear();
586    }
587
588    void Tormaykset()
589    {
590        AddCollisionHandler(pelaaja, "PowerUp", PowerUpit);
591
592    }
593
594    void LuoPowerUpit()
595    {
596        PhysicsObject PowerUp = new PhysicsObject(20, 20);
597        PowerUp.Tag = "PowerUp";
598        PowerUp.Shape = Shape.Star;
599        PowerUp.Color = Color.Yellow;
600        PowerUp.Mass = 0;
601        PowerUp.X = RandomGen.NextDouble(Level.Left + 30, Level.Right - 30);
602        PowerUp.Y = RandomGen.NextDouble(Level.Bottom + 30, Level.Top - 30);
603        Add(PowerUp);
604        Timer.SingleShot(RandomGen.NextDouble(0, 20), LuoPowerUpit);
605    }
606
607
608}
Note: See TracBrowser for help on using the repository browser.