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

Revision 4669, 10.5 KB checked in by nieekrva, 6 years ago (diff)

Talletus.

RevLine 
[4524]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{
[4583]11    PhysicsObject alus;
12    Image aluskuva = LoadImage("alus");
13    IntMeter pisteLaskuri;
14    ExplosionSystem rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 100);
[4637]15    List<Vector> vihujenSpawnauspaikat;
16    List<Vector> hamistenSpawnauspaikat;
17    IntMeter vihulaskuri;
[4669]18    string ase = "";
[4583]19    EasyHighScore topLista = new EasyHighScore();
[4669]20    Image plasmaAmmusKuva = LoadImage("plasmaammus");
[4637]21
22    int[] montakoVihuaKentassa = { 20, 30, 40, 50, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180 };
23    int kenttaNro = 0;
24    double RUUDUN_LEVEYS = 50;
25
[4524]26    public override void Begin()
27    {
[4637]28        SetWindowSize(800, 600, false);
29        Paavalikko();
[4583]30    }
31
32    void Aloitapeli()
33    {
34        ClearAll();
[4637]35        vihujenSpawnauspaikat = new List<Vector>();
36        hamistenSpawnauspaikat = new List<Vector>();
37        vihulaskuri = new IntMeter(0, 0, int.MaxValue);
38        vihulaskuri.LowerLimit += delegate
39        {
40            kenttaNro++;
[4669]41            Luoplasmaase(new Vector( RandomGen.NextDouble(Level.Left, Level.Right), Level.Top), RUUDUN_LEVEYS, RUUDUN_LEVEYS);
[4637]42            Timer.SingleShot(2.0, delegate
43            {
44                UusiKentta(kenttaNro);
45            });
46        };
[4583]47        Add(rajahdys);
[4524]48        Level.Size = new Vector(800, 600);
[4637]49       
[4583]50        LuoKentta();
51        LuoPistelaskuri();
52        MediaPlayer.Play("taustamusa");
53        MediaPlayer.IsRepeating = true;
[4637]54        Level.Background.CreateStars(10000);
55        Camera.ZoomToLevel();
56        Kontrollit();
[4524]57
[4637]58        UusiKentta(kenttaNro);
59    }
60
61    void UusiKentta(int kenttaNro)
62    {
63        for (int i = 0; i < montakoVihuaKentassa[kenttaNro]; i++)
64        {
65            PhysicsObject vihu = Luoperusvihu(RandomGen.SelectOne(vihujenSpawnauspaikat.ToArray()), RUUDUN_LEVEYS, RUUDUN_LEVEYS);
66            vihulaskuri.Value++;
67            vihu.Destroyed += delegate { vihulaskuri.Value--; };
68        }
69    }
70
71    private void Kontrollit()
72    {
[4583]73        Keyboard.Listen(Key.Space, ButtonState.Pressed, Ammu, "Ammu", alus);
[4524]74
75        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(-1000, 0));
76        Keyboard.Listen(Key.Left, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
77
78        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(1000, 0));
79        Keyboard.Listen(Key.Right, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
80
81        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, 1000));
82        Keyboard.Listen(Key.Up, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
83
84        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, -1000));
85        Keyboard.Listen(Key.Down, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
86
[4637]87        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, "Pelaaja liikkuu vasemmalle", alus, new Vector(-1000, 0));
88        ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
89
90        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(1000, 0));
91        ControllerOne.Listen(Button.DPadRight, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
92
93        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, 1000));
94        ControllerOne.Listen(Button.DPadUp, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
95
96        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, alus, new Vector(0, -1000));
97        ControllerOne.Listen(Button.DPadDown, ButtonState.Released, LiikutaPelaajaa, null, alus, Vector.Zero);
98
99        ControllerOne.Listen(Button.A, ButtonState.Pressed, Ammu, "ammu", alus);
100
[4524]101        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
102        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
103    }
[4583]104
105
106    void Ammu(PhysicsObject ampuja)
107    {
108        PhysicsObject ammus = new PhysicsObject(10, 10);
109        //ammus.Image = luodinkuva;
110
111        ammus.Position = ampuja.Position;
112        ammus.IgnoresGravity = true;
113        ammus.Angle = ampuja.Angle;
114        ammus.Color = Color.Yellow;
115        ammus.CanRotate = false;
116        ammus.LifetimeLeft = TimeSpan.FromSeconds(2);
117        ammus.Tag = "ammus";
118        ammus.CollisionIgnoreGroup = ampuja.CollisionIgnoreGroup;
119        ammus.Hit(Vector.FromLengthAndAngle(1000, ampuja.Angle + Angle.FromDegrees(90)));
[4669]120        if(ase.Equals("plasmaase"))
121        {
122            ammus.Image = plasmaAmmusKuva;
123            ammus.IgnoresCollisionResponse = true;
124        }
125
[4583]126        Add(ammus);
127        AddCollisionHandler(ammus, "hämis", CollisionHandler.AddMeterValue(pisteLaskuri, 200));
[4637]128        AddCollisionHandler(ammus, "perusvihu", CollisionHandler.AddMeterValue(pisteLaskuri, 300));
[4583]129        AddCollisionHandler(ammus, AmmusOsuu);
130
131    }
132
133    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
134    {
[4669]135        if(!ase.Equals("plasmaase"))
[4583]136        ammus.Destroy();
137        if(!kohde.Tag.Equals("seinä"))kohde.Destroy();
138    }
139
140
141
142
[4637]143    void PelaajaOsuu(PhysicsObject alus, PhysicsObject kohde)
[4524]144    {
145        alus.Destroy();
[4583]146        rajahdys.AddEffect(alus.X, alus.Y, 100);
[4637]147        ControllerOne.Vibrate(1.5, 1.5, 0.0, 0.0, 1.5);
[4583]148        topLista.EnterAndShow(pisteLaskuri.Value);
149        topLista.HighScoreWindow.Closed += IkkunaSuljettu;
150
[4524]151    }
[4637]152   
[4583]153    void IkkunaSuljettu(Window sender)
154    {
155        Aloitapeli();
156    }
[4524]157
158    void LiikutaPelaajaa(PhysicsObject alus, Vector nopeus)
159    {
160        // alareuna
161        if ((nopeus.Y < 0) && (alus.Bottom <= Level.Bottom))
162        {
163            alus.Bottom = Level.Bottom;
164            alus.Velocity = Vector.Zero;
165            return;
166        }
167        // yläreuna
168        if ((nopeus.Y > 0) && (alus.Top >= Level.Top))
169        {
170            alus.Top = Level.Top;
171            alus.Velocity = Vector.Zero;
172            return;
173        }
174        // vasen
175        if ((nopeus.X < 0) && (alus.Left <= Level.Left))
176        {
177            alus.Left = Level.Left;
178            alus.Velocity = Vector.Zero;
179            return;
180        }
181        // oikea
182        if ((nopeus.X > 0) && (alus.Right >= Level.Right))
183        {
184            alus.Right = Level.Right;
185            alus.Velocity = Vector.Zero;
186            return;
187        }
188
189        alus.Velocity = nopeus;
190
191    }
192    void LuoKentta()
193    {
194        TileMap ruudut = TileMap.FromLevelAsset("kentta1");
195        ruudut.SetTileMethod('a', Luoalus);
[4637]196        ruudut.SetTileMethod('h', LisaaHamiksenPaikka);
197        ruudut.SetTileMethod('p', LisaaVihunPaikka);
[4669]198        ruudut.SetTileMethod('t', Luoplasmaase);
[4637]199        ruudut.Execute(RUUDUN_LEVEYS, RUUDUN_LEVEYS);
[4524]200    }
[4637]201
202
[4524]203    void Luoalus(Vector paikka, double leveys, double korkeus)
204    {
[4583]205        alus = new PhysicsObject(leveys, korkeus, Shape.Circle);
206        Add(alus);
[4524]207        alus.Position = paikka;
[4583]208        alus.LinearDamping = 0.9;
209        alus.CollisionIgnoreGroup = 2;
210        alus.CanRotate = false;
211        alus.Tag = "alus";
212        alus.Image = aluskuva;
213        AddCollisionHandler(alus, "hämis", PelaajaOsuu);
[4637]214        AddCollisionHandler(alus, "perusvihu", PelaajaOsuu);
[4669]215        AddCollisionHandler(alus, TarkistaKerattavat);
[4583]216    }
[4637]217
[4669]218
219    void TarkistaKerattavat(PhysicsObject alus, PhysicsObject kerattava)
220    {
221        if(!(kerattava.Tag is string)) return;
222        switch ((string)kerattava.Tag)
223        {
224            case "plasmaase":
225                ase = "plasmaase";
226                kerattava.Destroy();
227                break;
228            default:
229                break;
230        }
231
232    }
233
234
[4637]235    void LisaaHamiksenPaikka(Vector paikka, double leveys, double korkeus)
236    {
237        hamistenSpawnauspaikat.Add(paikka);
238    }
239   
240    void LisaaVihunPaikka(Vector paikka, double leveys, double korkeus)
241    {
242        vihujenSpawnauspaikat.Add(paikka);
243    }
244   
[4583]245    void Luohamis(Vector paikka, double leveys, double korkeus)
246    {
247        PhysicsObject hamis = new PhysicsObject(leveys, korkeus);
248        hamis.Position = paikka;
249        Add(hamis);
250        hamis.CanRotate = false;
251        //hamis.AngularDamping = 0.9;
252        Image hamiskuva = LoadImage("hamis");
253        hamis.Image = hamiskuva;
254        FollowerBrain seuraajanAivot = new FollowerBrain("alus");
255        seuraajanAivot.Speed = 200;
256        seuraajanAivot.Active = true;
257        hamis.Brain = seuraajanAivot;
258        hamis.Tag = "hämis";
259       
260    }
[4637]261    PhysicsObject Luoperusvihu(Vector paikka, double leveys, double korkeus)
262    {
263        PhysicsObject perusvihu = new PhysicsObject(leveys, korkeus);
264        perusvihu.Position = paikka;
265        Add(perusvihu);
266        perusvihu.CanRotate = false;
267        Image perusvihukuva = LoadImage("perusvihu");
268        perusvihu.Image = perusvihukuva;
269        FollowerBrain seuraajanAivot = new FollowerBrain("alus");
270        seuraajanAivot.Speed = 200;
271        seuraajanAivot.Active = true;
272        perusvihu.Brain = seuraajanAivot;
273        perusvihu.Tag = "perusvihu";
274        return perusvihu;
275    }
276    void Paavalikko()
277    {
278        MultiSelectWindow alkuValikko = new MultiSelectWindow("",
279        "Aloita peli");
280        Add(alkuValikko);
281        alkuValikko.AddItemHandler(0, Aloitapeli);
282        alkuValikko.Color = Color.Transparent;
[4524]283
[4637]284    }
[4669]285    void Luoplasmaase(Vector paikka, double leveys, double korkeus)
286    {
287        PhysicsObject plasmaase = new PhysicsObject(leveys, korkeus);
288        plasmaase.Position = paikka;
289        Add(plasmaase);
290        plasmaase.CanRotate = false;
291        Image plasmaasekuva = LoadImage("token1");
292        plasmaase.Image = plasmaasekuva;
293        plasmaase.Tag = "plasmaase";
294        plasmaase.Hit(new Vector(0, -500));
295    }
296       
[4637]297   
298
299
300
[4583]301    void LuoPistelaskuri()
302    {
303        pisteLaskuri = new IntMeter(0);
304
305        Label pisteNaytto = new Label();
306        pisteNaytto.X = Screen.Left + 100;
307        pisteNaytto.Y = Screen.Top - 100;
308        pisteNaytto.TextColor = Color.Black;
309        pisteNaytto.Color = Color.White;
310
311        pisteNaytto.BindTo(pisteLaskuri);
312        Add(pisteNaytto);
313    }
[4637]314   
315   
[4583]316
317
318
319
320
321
322
[4524]323}
Note: See TracBrowser for help on using the repository browser.