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

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