source: 2013/27/JoonasM/RnGPlatformShooter/RnGPlatformShooter/RnGPlatformShooter/RnGPlatformShooter.cs @ 4485

Revision 4485, 14.3 KB checked in by joarmuho, 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 RnGPlatformShooter : PhysicsGame
10{
11    const double nopeus = 300;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    double vanhaTaso = 0;
16
17    PlatformCharacter pelaaja1;
18    DoubleMeter etenemisVauhtiMittari;
19    Image pelaajanKuva = LoadImage("norsu");
20    Image tahtiKuva = LoadImage("tahti");
21    Image WumpaFruit = LoadImage("Wumpa");
22    Image HeliChapter = LoadImage("Helipad");
23    Image FireLava = LoadImage("Fireball");
24    Image Solar = LoadImage("Sun");
25    Image Sydan = LoadImage("Heart");
26    Image Lintu = LoadImage("Pigeon");
27
28    IntMeter pisteLaskuri;
29    IntMeter Enu;
30    IntMeter Wumpat;
31
32    SoundEffect maaliAani = LoadSoundEffect("maali");
33
34    AssaultRifle pelaajan1Ase;
35
36    public override void Begin()
37    {
38        IsFullScreen = true;
39        Label tekstikentta = new Label("RnGPlatformShooter");
40        tekstikentta.Font = Font.DefaultLarge;
41        tekstikentta.X = 0;
42        tekstikentta.Y = Level.Top - 50;
43        Add(tekstikentta);
44
45        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "High Score", "Lopeta");
46        alkuValikko.AddItemHandler(0, StartGame);
47        alkuValikko.AddItemHandler(1, SeeHighScore);
48        alkuValikko.AddItemHandler(2, Exit);
49        Add(alkuValikko);
50    }
51
52    void StartGame()
53    {
54        ClearAll();
55        etenemisVauhtiMittari = new DoubleMeter(30, 30, double.MaxValue);
56        etenemisVauhtiMittari.AddOverTime(190, 60);
57        etenemisVauhtiMittari.Changed += delegate
58        {
59            Camera.Velocity = new Vector(etenemisVauhtiMittari.Value, 0);
60        };
61        Gravity = new Vector(0, -1500);
62
63        Camera.X = 200;
64        Camera.Velocity = new Vector(etenemisVauhtiMittari.Value, 0);
65        Camera.ZoomFactor = 1.5;
66
67        LuoKentta();
68        LisaaNappaimet();
69    }
70
71    void LuoKentta()
72    {
73        Widget solarS = new Widget(82, 82);
74        solarS.X = 870;
75        solarS.Y = 450;
76        solarS.Image = Solar;
77        Add(solarS);
78        vanhaTaso = 0;
79        PhysicsObject StartingPlatform = PhysicsObject.CreateStaticObject(80, 20);
80        StartingPlatform.Y = 100;
81        StartingPlatform.Color = Color.Red;
82        Add(StartingPlatform);
83        pisteLaskuri = new IntMeter(0);
84        Enu = new IntMeter(1);
85        Wumpat = new IntMeter(0);
86       
87        LisaaPelaaja();
88
89        Level.Background.CreateGradient(RandomGen.NextColor(), RandomGen.NextColor());
90
91        Timer Ajastin = new Timer();
92        Ajastin.Interval = 0.5;
93        Ajastin.Timeout += delegate
94        {
95            pisteLaskuri.Value += 1;
96
97            if (pelaaja1.Y < -400)
98            {
99                HighScore();
100            }
101
102            if (pelaaja1.X < Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X)
103            {
104                HighScore();
105            }
106            if (Wumpat > 10)
107            {
108                Wumpat.Value -= 10;
109                Enu.Value += 2;
110            }
111
112        };
113        Ajastin.Start();
114
115        Label pisteNaytto = new Label();
116        pisteNaytto.X = Screen.Left + 100;
117        pisteNaytto.Y = Screen.Top - 100;
118        pisteNaytto.TextColor = Color.Black;
119        pisteNaytto.Color = Color.White;
120        pisteNaytto.Title = "Pisteet";
121        pisteNaytto.BindTo(pisteLaskuri);
122        Add(pisteNaytto);
123
124        Label ElamaMeter = new Label();
125        ElamaMeter.X = Screen.Left + 100;
126        ElamaMeter.Y = Screen.Top - 150;
127        ElamaMeter.TextColor = Color.Black;
128        ElamaMeter.Color = Color.White;
129        ElamaMeter.Title = "Elämät";
130        ElamaMeter.BindTo(Enu);
131        Add(ElamaMeter);
132       
133        Label WumpaMeter = new Label();
134        WumpaMeter.X = Screen.Left + 100;
135        WumpaMeter.Y = Screen.Top - 200;
136        WumpaMeter.TextColor = Color.Black;
137        WumpaMeter.Color = Color.White;
138        WumpaMeter.Title = "Wumpat";
139        WumpaMeter.BindTo(Wumpat);
140        Add(WumpaMeter);
141    }
142
143    void LisaaTaso(bool ensimmainenKerta = false)
144    {
145        if (vanhaTaso < Camera.ScreenToWorld(new Vector(Screen.Right, 0)).X + 50)
146        {
147            if (RandomGen.NextInt(1, 10) > 2)
148            {
149                PhysicsObject taso = PhysicsObject.CreateStaticObject(RandomGen.NextInt(62, 82), 20);
150                taso.X = RandomGen.NextInt(150, 280) + vanhaTaso;
151                taso.Y = RandomGen.NextInt(-180, 75);
152                taso.Color = RandomGen.NextColor();
153                taso.Oscillate(Vector.UnitY, RandomGen.NextInt(85, 250), 0.4);
154                vanhaTaso = taso.X;
155                taso.MakeOneWay();
156                taso.CollisionIgnoreGroup = 1;
157                Add(taso);
158
159                if (ensimmainenKerta == false)
160                {
161
162                    if (RandomGen.NextInt(1, 6) == 1)
163                    {
164                        PhysicsObject vihu = PhysicsObject.CreateStaticObject(32, 32);
165                        vihu.X = taso.X;
166                        vihu.Y = RandomGen.NextInt(0, 10) + taso.Y;
167                        vihu.Image = tahtiKuva;
168                        vihu.Tag = "vihu";
169                        vihu.AngularVelocity = 10.0;
170                        Add(vihu);
171                    }
172                    if (RandomGen.NextInt(1, 20) == 1)
173                    {
174                        PhysicsObject Helichopter = PhysicsObject.CreateStaticObject(32, 32);
175                        Helichopter.X = taso.X + RandomGen.NextInt(40, 100);
176                        Helichopter.Y = 340;
177                        Helichopter.Image = HeliChapter;
178                        PlasmaCannon HeliChopterAse = new PlasmaCannon(30, 10);
179                        HeliChopterAse.Angle += Angle.FromDegrees(RandomGen.NextInt(-125, -25));
180                        Timer Asetimer = new Timer();
181                        Asetimer.Interval = 1;
182                        Asetimer.Timeout += delegate
183                        {
184                            PhysicsObject HeliAmmus = HeliChopterAse.Shoot();
185                            HeliAmmus.Tag = "vihu";
186                            HeliAmmus.LifetimeLeft = TimeSpan.FromSeconds(0.8);
187                            AddCollisionHandler(HeliAmmus, CollisionHandler.DestroyObject);
188                        };
189                        Asetimer.Start();
190                        Helichopter.Add(HeliChopterAse);
191                        Helichopter.IgnoresCollisionResponse = true;
192                        Helichopter.Tag = "HeliTag";
193                        Add(Helichopter);
194
195                        Helichopter.Destroyed += Asetimer.Stop;
196                        Helichopter.Destroyed += HeliChopterAse.Destroy;
197                    }
198                    if (RandomGen.NextInt(1, 10) == 1)
199                    {
200                        PhysicsObject LaavaPallo = new PhysicsObject(32, 32, Shape.Circle);
201                        LaavaPallo.X = pelaaja1.X;
202                        LaavaPallo.Y = Level.Bottom;
203                        LaavaPallo.Image = FireLava;
204                        LaavaPallo.Tag = "vihu";
205                        LaavaPallo.IgnoresCollisionResponse = true;
206                        Add(LaavaPallo);
207                        LaavaPallo.Hit(new Vector(RandomGen.NextInt(-100, 400), RandomGen.NextInt(800, 1600)));
208                    }
209
210                    if (RandomGen.NextInt(1, 15) == 1)
211                    {
212                        PhysicsObject Pigeon = PhysicsObject.CreateStaticObject(49, 35);
213                        Pigeon.X = Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X;
214                        Pigeon.Y = pelaaja1.Y + 50;
215                        Pigeon.LifetimeLeft = TimeSpan.FromSeconds(5);
216                        Pigeon.Image = Lintu;
217                        Pigeon.IgnoresCollisionResponse = true;
218                        Pigeon.Tag = "vihu";
219                        Pigeon.Velocity = new Vector(500, 0);
220                        Add(Pigeon);
221                    }
222                }
223
224                if (RandomGen.NextInt(1, 3) == 1)
225                {
226                    PhysicsObject wumpaf = PhysicsObject.CreateStaticObject(32, 32);
227                    wumpaf.X = (taso.X + RandomGen.NextInt(50, 100));
228                    wumpaf.Y = taso.Y + RandomGen.NextInt(50, 200);
229                    wumpaf.Image = WumpaFruit;
230                    wumpaf.Tag = "wumpa";
231                    wumpaf.IgnoresCollisionResponse = true;
232                    Add(wumpaf);
233                }
234
235                if (RandomGen.NextInt(1, 25) == 1)
236                {
237                    PhysicsObject Health = PhysicsObject.CreateStaticObject(32, 32);
238                    Health.X = (taso.X + RandomGen.NextInt(50, 100));
239                    Health.Y = taso.Y + RandomGen.NextInt(50, 200);
240                    Health.IgnoresCollisionResponse = true;
241                    Health.Image = Sydan;
242                    Health.Tag = "Heal";
243                    Add(Health);
244                }
245            }
246
247            else if (RandomGen.NextInt(1, 7) == 1)
248            {
249                Boost boost = new Boost(64, 42, this.etenemisVauhtiMittari);
250                boost.LifetimeLeft = TimeSpan.FromSeconds(15.0);
251                boost.X = RandomGen.NextInt(50, 100) + vanhaTaso;
252                boost.Y = RandomGen.NextInt(-200, 75);
253                boost.Color = Color.Green;
254                boost.Velocity = new Vector(etenemisVauhtiMittari.Value, 0);
255                boost.CollisionIgnoreGroup = 1;
256                vanhaTaso = boost.X;
257                Add(boost);
258            }
259
260            else
261            {
262                PhysicsObject TuhoutuvaTaso = PhysicsObject.CreateStaticObject(82, 20);
263                TuhoutuvaTaso.X = RandomGen.NextInt(150, 325) + vanhaTaso;
264                TuhoutuvaTaso.Y = RandomGen.NextInt(-200, 75);
265                TuhoutuvaTaso.Color = Color.Red;
266                TuhoutuvaTaso.Oscillate(Vector.UnitY, RandomGen.NextInt(50, 200), 0.5);
267                vanhaTaso = TuhoutuvaTaso.X;
268                TuhoutuvaTaso.Tag = "TTaso";
269                TuhoutuvaTaso.CollisionIgnoreGroup = 1;
270                Add(TuhoutuvaTaso);
271            }
272        }
273
274    }
275
276    void LisaaPelaaja()
277    {
278        pelaaja1 = new PlatformCharacter(64, 64);
279        pelaaja1.Y = 150;
280        pelaaja1.Mass = 4.0;
281        pelaaja1.Image = pelaajanKuva;
282        Add(pelaaja1);
283        pelaajan1Ase = new AssaultRifle(30, 10);
284        pelaaja1.Add(pelaajan1Ase);
285        AddCollisionHandler(pelaaja1, "wumpa", CollisionHandler.DestroyTarget);
286        AddCollisionHandler(pelaaja1, "Heal", CollisionHandler.DestroyTarget);
287        AddCollisionHandler(pelaaja1, "Heal", CollisionHandler.AddMeterValue(Enu, 1));
288        AddCollisionHandler(pelaaja1, "wumpa", CollisionHandler.AddMeterValue(pisteLaskuri, 10));
289        AddCollisionHandler(pelaaja1, "wumpa", CollisionHandler.AddMeterValue(Wumpat, 1));
290        AddCollisionHandler(pelaaja1, "vihu", TormaysHighScore);
291        AddCollisionHandler(pelaaja1, "TTaso", TuhoaTaso);
292        LisaaTaso(true);
293    }
294
295    void TuhoaTaso(PhysicsObject tormaaja, PhysicsObject objekti)
296    {
297        Timer.SingleShot(1.5, delegate {
298            if (!objekti.IsDestroyed)
299            {
300                Explosion rajahdys = new Explosion(50);
301                rajahdys.Position = objekti.Position;
302                Add(rajahdys);
303                objekti.Destroy();
304            }
305        });
306    }
307
308    void LisaaNappaimet()
309    {
310        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
311        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
312
313        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
314
315        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
316
317        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
318        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
319        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
320
321        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
322
323        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
324        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
325        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
326
327        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
328    }
329
330    void Liikuta(PlatformCharacter hahmo, double nopeus)
331    {
332        hahmo.Walk(nopeus);
333    }
334
335    void Hyppaa(PlatformCharacter hahmo, double nopeus)
336    {
337        hahmo.Jump(nopeus);
338        LisaaTaso();
339    }
340
341    void AmmuAseella(AssaultRifle ase)
342    {
343        PhysicsObject ammus = ase.Shoot();
344        if (ammus!=null)
345        {
346            AddCollisionHandler(ammus, "vihu", CollisionHandler.AddMeterValue(pisteLaskuri, 100));
347            AddCollisionHandler(ammus, "vihu", CollisionHandler.ExplodeTarget(50, true));
348            AddCollisionHandler(ammus, "HeliTag", CollisionHandler.AddMeterValue(pisteLaskuri, 150));
349            AddCollisionHandler(ammus, "HeliTag", CollisionHandler.ExplodeTarget(50, true));
350            AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
351        }
352    }
353
354    void TormaysHighScore(PhysicsObject Tormaaja, PhysicsObject Kohde)
355    {
356        if (Enu < 1)
357        {
358            HighScore();
359        }
360        else
361        {
362            Enu.Value -= 1;
363            CollisionHandler.DestroyTarget(Tormaaja, Kohde);
364        }
365    }
366
367    void HighScore()
368    {
369        ClearAll();
370        EasyHighScore topLista = new EasyHighScore();
371        topLista.EnterAndShow(pisteLaskuri.Value);
372        topLista.HighScoreWindow.Closed += delegate { Begin(); };
373    }
374    void SeeHighScore()
375    {
376        EasyHighScore topLista = new EasyHighScore();
377        topLista.Show();
378        topLista.HighScoreWindow.Closed += delegate { Begin(); };
379    }
380
381}
Note: See TracBrowser for help on using the repository browser.