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 @ 3028

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