source: 2013/30/NikiV/Airbattle/Airbattle/Airbattle/Airbattle.cs @ 10335

Revision 4747, 13.4 KB checked in by nieekrva, 6 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 Airbattle : PhysicsGame
10{
11    PhysicsObject alus;
12    Image aluskuva = LoadImage("alus");
13    IntMeter pisteLaskuri;
14    ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 100);
15    List<Vector> vihujenSpawnauspaikat;
16    List<Vector> hamistenSpawnauspaikat;
17    IntMeter vihulaskuri;
18    IntMeter elämät;
19    string ase = "";
20    EasyHighScore topLista = new EasyHighScore();
21    Image plasmaAmmusKuva = LoadImage("plasmaammus");
22    Image rakettiAmmusKuva = LoadImage("raketti");
23
24    Vector aloitusPaikka;
25    bool osuttiinkoJo = false;
26
27    int[] montakoVihuaKentassa = { 20, 30, 40, 50, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180 };
28    int kenttaNro = 0;
29    double RUUDUN_LEVEYS = 50;
30
31    public override void Begin()
32    {
33        SetWindowSize(800, 600, false);
34        Level.Size = Screen.Size;
35        Level.Background.Image = LoadImage("päävalikko");
36        Level.Background.FitToLevel();
37
38        Paavalikko();
39    }
40
41    void Aloitapeli()
42    {
43        IsPaused = false;
44        kenttaNro = 0;
45        ClearAll();
46        vihujenSpawnauspaikat = new List<Vector>();
47        hamistenSpawnauspaikat = new List<Vector>();
48        vihulaskuri = new IntMeter(0, 0, int.MaxValue);
49        vihulaskuri.LowerLimit += delegate
50        {
51            kenttaNro++;
52            Luoplasmaase(new Vector( RandomGen.NextDouble(Level.Left, Level.Right), Level.Top), RUUDUN_LEVEYS, RUUDUN_LEVEYS);
53            Timer.SingleShot(2.0, delegate
54            {
55                UusiKentta(kenttaNro);
56            });
57        };
58        Add(rajahdys);
59        Level.Size = new Vector(800, 600);
60       
61        LuoKentta();
62        LuoPistelaskuri();
63        MediaPlayer.Play("taustamusa");
64        MediaPlayer.IsRepeating = true;
65        Level.Background.CreateStars(10000);
66        Camera.ZoomToLevel();
67        Kontrollit();
68
69        UusiKentta(kenttaNro);
70    }
71
72    void UusiKentta(int kenttaNro)
73    {
74        for (int i = 0; i < montakoVihuaKentassa[kenttaNro]; i++)
75        {
76            PhysicsObject vihu = Luoperusvihu(RandomGen.SelectOne(vihujenSpawnauspaikat.ToArray()), RUUDUN_LEVEYS, RUUDUN_LEVEYS);
77            vihulaskuri.Value++;
78            vihu.Destroyed += delegate { vihulaskuri.Value--; };
79        }
80    }
81
82    private void Kontrollit()
83    {
84        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Ammu", alus);
85        Keyboard.Listen(Key.Z, ButtonState.Pressed, AmmuRaketilla, "Ammu", alus);
86
87        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(-1000, 0));
88        Keyboard.Listen(Key.Left, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
89
90        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(1000, 0));
91        Keyboard.Listen(Key.Right, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
92
93        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, 1000));
94        Keyboard.Listen(Key.Up, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
95
96        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, -1000));
97        Keyboard.Listen(Key.Down, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
98
99        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Pelaaja liikkuu vasemmalle", alus, new Vector(-1000, 0));
100        ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
101
102        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(1000, 0));
103        ControllerOne.Listen(Button.DPadRight, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
104
105        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, 1000));
106        ControllerOne.Listen(Button.DPadUp, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
107
108        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, -1000));
109        ControllerOne.Listen(Button.DPadDown, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
110
111        ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "ammu", alus);
112
113        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
114        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
115    }
116
117    void AmmuRaketilla(PhysicsObject ampuja)
118    {
119        PhysicsObject ammus = LuoAmmus(ampuja);
120        ammus.Size *= 3;
121        ammus.Image = rakettiAmmusKuva;
122        AddCollisionHandler(ammus, RakettiOsuu);
123    }
124
125    void Ammu(PhysicsObject ampuja)
126    {
127        PhysicsObject ammus = LuoAmmus(ampuja);
128
129        if(ase.Equals("plasmaase"))
130        {
131            ammus.Image = plasmaAmmusKuva;
132            ammus.IgnoresCollisionResponse = true;
133        }
134
135
136
137    }
138
139    PhysicsObject LuoAmmus(PhysicsObject ampuja)
140    {
141        PhysicsObject ammus = new PhysicsObject(10, 10);
142        //ammus.Image = luodinkuva;
143
144        ammus.Position = ampuja.Position;
145        ammus.IgnoresGravity = true;
146        ammus.Angle = ampuja.Angle;
147        ammus.Color = Color.Yellow;
148        ammus.CanRotate = false;
149        ammus.LifetimeLeft = TimeSpan.FromSeconds(2);
150        ammus.Tag = "ammus";
151        ammus.CollisionIgnoreGroup = ampuja.CollisionIgnoreGroup;
152        ammus.Hit(Vector.FromLengthAndAngle(1000, ampuja.Angle + Angle.FromDegrees(90)));
153
154        Add(ammus);
155        AddCollisionHandler(ammus, "hämis", CollisionHandler.AddMeterValue(pisteLaskuri, 200));
156        AddCollisionHandler(ammus, "perusvihu", CollisionHandler.AddMeterValue(pisteLaskuri, 300));
157        AddCollisionHandler(ammus, AmmusOsuu);
158
159        return ammus;
160    }
161
162    void RakettiOsuu(PhysicsObject ammus, PhysicsObject kohde)
163    {
164        Explosion e = new Explosion(150);
165        e.Position = kohde.Position;
166        e.AddShockwaveHandler("perusvihu", PaineaaltoOsuu);
167        Add(e);
168    }
169
170    void PaineaaltoOsuu(IPhysicsObject olio, Vector shokki)
171    {
172        olio.Destroy();
173        // tehdään jotain
174    }
175
176    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
177    {
178        if(!ase.Equals("plasmaase"))
179        ammus.Destroy();
180        if(!kohde.Tag.Equals("seinä"))kohde.Destroy();
181    }
182
183
184
185
186    void PelaajaOsuu(PhysicsObject alus, PhysicsObject kohde)
187    {
188        if (osuttiinkoJo) return;
189        IsPaused = true;
190        osuttiinkoJo = true;
191        //alus.Destroy();
192        Vector pos = alus.Position;
193        //alus = null;
194        DoNextUpdate(delegate
195        {
196
197            rajahdys.AddEffect(pos.X, pos.Y, 100);
198            ControllerOne.Vibrate(1.5, 1.5, 0.0, 0.0, 1.5);
199            elämät.Value--;
200            if (elämät.Value > 0) JatkaPeliaAluksella();
201
202        });
203
204       
205    }
206
207    void JatkaPeliaAluksella()
208    {
209       
210        //ClearControls();
211        ase = "";
212        //Luoalus(aloitusPaikka, RUUDUN_LEVEYS, RUUDUN_LEVEYS);
213        //Kontrollit();
214        alus.Position = aloitusPaikka;
215        IsPaused = false;
216        osuttiinkoJo = false;
217    }
218
219   
220    void IkkunaSuljettu(Window sender)
221    {
222        Aloitapeli();
223    }
224
225    void LiikutaPelaajaa(PhysicsObject alus, Vector nopeus)
226    {
227        // alareuna
228        if ((nopeus.Y < 0) && (alus.Bottom <= Level.Bottom))
229        {
230            alus.Bottom = Level.Bottom;
231            alus.Velocity = Vector.Zero;
232            return;
233        }
234        // yläreuna
235        if ((nopeus.Y > 0) && (alus.Top >= Level.Top))
236        {
237            alus.Top = Level.Top;
238            alus.Velocity = Vector.Zero;
239            return;
240        }
241        // vasen
242        if ((nopeus.X < 0) && (alus.Left <= Level.Left))
243        {
244            alus.Left = Level.Left;
245            alus.Velocity = Vector.Zero;
246            return;
247        }
248        // oikea
249        if ((nopeus.X > 0) && (alus.Right >= Level.Right))
250        {
251            alus.Right = Level.Right;
252            alus.Velocity = Vector.Zero;
253            return;
254        }
255
256        alus.Velocity = nopeus;
257
258    }
259    void LuoKentta()
260    {
261        TileMap ruudut = TileMap.FromLevelAsset("kentta1");
262        ruudut.SetTileMethod('a', Luoalus);
263        ruudut.SetTileMethod('h', LisaaHamiksenPaikka);       
264        ruudut.SetTileMethod('p', LisaaVihunPaikka);
265        ruudut.SetTileMethod('t', Luoplasmaase);
266        ruudut.Execute(RUUDUN_LEVEYS, RUUDUN_LEVEYS);
267    }
268
269
270    void Luoalus(Vector paikka, double leveys, double korkeus)
271    {
272        aloitusPaikka = paikka;
273        alus = new PhysicsObject(leveys, korkeus, Shape.Circle);
274        Add(alus);
275        alus.Position = paikka;
276        alus.LinearDamping = 0.9;
277        alus.CollisionIgnoreGroup = 2;
278        alus.CanRotate = false;
279        alus.Tag = "alus";
280        alus.Image = aluskuva;
281        AddCollisionHandler(alus, "hämis", PelaajaOsuu);
282        AddCollisionHandler(alus, "perusvihu", PelaajaOsuu);
283        AddCollisionHandler(alus, TarkistaKerattavat);
284        osuttiinkoJo = false;
285    }
286
287
288    void TarkistaKerattavat(PhysicsObject alus, PhysicsObject kerattava)
289    {
290        if(!(kerattava.Tag is string)) return;
291        switch ((string)kerattava.Tag)
292        {
293            case "plasmaase":
294                ase = "plasmaase";
295                kerattava.Destroy();
296                break;
297            default:
298                break;
299        }
300
301    }
302
303
304    void LisaaHamiksenPaikka(Vector paikka, double leveys, double korkeus)
305    {
306        hamistenSpawnauspaikat.Add(paikka);
307    }
308   
309    void LisaaVihunPaikka(Vector paikka, double leveys, double korkeus)
310    {
311        vihujenSpawnauspaikat.Add(paikka);
312    }
313   
314    void Luohamis(Vector paikka, double leveys, double korkeus)
315    {
316        PhysicsObject hamis = new PhysicsObject(leveys, korkeus);
317        hamis.Position = paikka;
318        Add(hamis);
319        hamis.CanRotate = false;
320        //hamis.AngularDamping = 0.9;
321        Image hamiskuva = LoadImage("hamis");
322        hamis.Image = hamiskuva;
323        FollowerBrain seuraajanAivot = new FollowerBrain("alus");
324        seuraajanAivot.Speed = 200;
325        seuraajanAivot.Active = true;
326        hamis.Brain = seuraajanAivot;
327        hamis.Tag = "hämis";
328       
329    }
330    PhysicsObject Luoperusvihu(Vector paikka, double leveys, double korkeus)
331    {
332        PhysicsObject perusvihu = new PhysicsObject(leveys, korkeus);
333        perusvihu.Position = paikka;
334        Add(perusvihu);
335        perusvihu.CanRotate = false;
336        Image perusvihukuva = LoadImage("perusvihu");
337        perusvihu.Image = perusvihukuva;
338        FollowerBrain seuraajanAivot = new FollowerBrain("alus");
339        seuraajanAivot.Speed = 200;
340        seuraajanAivot.Active = true;
341        seuraajanAivot.Updated += delegate { PaivitaAivot(seuraajanAivot); };
342        perusvihu.Brain = seuraajanAivot;
343        perusvihu.Tag = "perusvihu";
344        return perusvihu;
345    }
346
347    void PaivitaAivot(FollowerBrain aivot)
348    {
349        aivot.Active = true;
350
351    }
352
353    void Paavalikko()
354    {
355        MultiSelectWindow alkuValikko = new MultiSelectWindow("",
356        "Aloita peli");
357        Add(alkuValikko);
358        alkuValikko.AddItemHandler(0, Aloitapeli);
359        alkuValikko.Color = Color.Transparent;
360
361    }
362    void Luoplasmaase(Vector paikka, double leveys, double korkeus)
363    {
364        PhysicsObject plasmaase = new PhysicsObject(leveys, korkeus);
365        plasmaase.Position = paikka;
366        Add(plasmaase);
367        plasmaase.CanRotate = false;
368        Image plasmaasekuva = LoadImage("token1");
369        plasmaase.Image = plasmaasekuva;
370        plasmaase.Tag = "plasmaase";
371        plasmaase.Hit(new Vector(0, -500));
372    }
373    void Luoraketti(Vector paikka, double leveys, double korkeus)
374    {
375        PhysicsObject raketti = new PhysicsObject(leveys, korkeus);
376        raketti.Position = paikka;
377        Add(raketti);
378        raketti.CanRotate = false;
379        Image rakettikuva = LoadImage("token2");
380        raketti.Image = rakettikuva;
381        raketti.Tag = "raketti";
382        raketti.Hit(new Vector(0, -500));
383    }
384
385
386    void TarkistaSaadaankoElama()
387    {
388        elämät.Value++;
389        pisteLaskuri.MaxValue += 100000;
390
391    }
392   
393
394    void LuoPistelaskuri()
395    {
396        pisteLaskuri = new IntMeter(0);
397        pisteLaskuri.MaxValue = 100000;
398        pisteLaskuri.UpperLimit += TarkistaSaadaankoElama;
399
400        Label pisteNaytto = new Label();
401        pisteNaytto.X = Screen.Left + 100;
402        pisteNaytto.Y = Screen.Top - 100;
403        pisteNaytto.TextColor = Color.Black;
404        pisteNaytto.Color = Color.White;
405
406        pisteNaytto.BindTo(pisteLaskuri);
407        Add(pisteNaytto);
408
409        elämät = new IntMeter(3, 0, 9);
410
411        elämät.LowerLimit += NaytaTopLista;
412
413        Label elamaNaytto = new Label();
414        elamaNaytto.X = Screen.Right - 100;
415        elamaNaytto.Y = Screen.Top - 100;
416        elamaNaytto.TextColor = Color.Black;
417        elamaNaytto.Color = Color.White;
418
419        elamaNaytto.BindTo(elämät);
420        Add(elamaNaytto);
421    }
422
423
424    void NaytaTopLista()
425    {
426        topLista.EnterAndShow(pisteLaskuri.Value);
427        topLista.HighScoreWindow.Closed += IkkunaSuljettu;
428
429
430    }
431
432
433
434
435
436
437}
Note: See TracBrowser for help on using the repository browser.