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

Revision 4409, 10.1 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
26    IntMeter pisteLaskuri;
27
28    SoundEffect maaliAani = LoadSoundEffect("maali");
29
30    AssaultRifle pelaajan1Ase;
31
32    public override void Begin()
33    {
34        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "High Score", "Lopeta");
35        alkuValikko.AddItemHandler(0, StartGame);
36        alkuValikko.AddItemHandler(1, SeeHighScore);
37        alkuValikko.AddItemHandler(2, Exit);
38        Add(alkuValikko);
39    }
40
41    void StartGame()
42    {
43        Gravity = new Vector(0, -1500);
44
45        Camera.X = 200;
46        Camera.Velocity = new Vector(CameraSpeed, 0);
47        Camera.ZoomFactor = 1.5;
48
49        LuoKentta();
50        LisaaNappaimet();
51    }
52
53    void LuoKentta()
54    {
55        VanhaTaso = 0;
56        PhysicsObject StartingPlatform = PhysicsObject.CreateStaticObject(80, 20);
57        StartingPlatform.Y = 100;
58        StartingPlatform.Color = Color.Red;
59        Add(StartingPlatform);
60        pisteLaskuri = new IntMeter(0);
61        LisaaPelaaja();
62
63        Level.Background.CreateGradient(RandomGen.NextColor(), RandomGen.NextColor());
64
65        Timer Ajastin = new Timer();
66        Ajastin.Interval = 0.5;
67        Ajastin.Timeout += delegate
68        {
69            pisteLaskuri.Value += 1;
70
71            if (Camera.Velocity.X < 210)
72            {
73                Camera.Velocity *= 1.05;
74            }
75           
76            if (pelaaja1.Y < -400)
77            {
78                HighScore();
79            }
80
81            if (pelaaja1.X < Camera.ScreenToWorld(new Vector(Screen.Left, 0)).X)
82            {
83                HighScore();
84            }
85
86        };
87        Ajastin.Start();
88
89       
90       
91        Label pisteNaytto = new Label();
92        pisteNaytto.X = Screen.Right - 100;
93        pisteNaytto.Y = Screen.Top - 100;
94        pisteNaytto.TextColor = Color.Black;
95        pisteNaytto.Color = Color.White;
96        pisteNaytto.Title = "Pisteet";
97
98        pisteNaytto.BindTo(pisteLaskuri);
99        Add(pisteNaytto);
100    }
101
102    void LisaaTaso(bool ensimmainenKerta = false)
103    {
104        if (RandomGen.NextInt(1, 10) != 1)
105        {
106            PhysicsObject taso = PhysicsObject.CreateStaticObject(64, 20);
107            taso.X = RandomGen.NextInt(150, 325) + VanhaTaso;
108            taso.Y = RandomGen.NextInt(-200, 75);
109            taso.Color = RandomGen.NextColor();
110            taso.Oscillate(Vector.UnitY, RandomGen.NextInt(75, 250), 0.5);
111            VanhaTaso = taso.X;
112            Add(taso);
113
114            if (ensimmainenKerta == false)
115            {
116                if (RandomGen.NextInt(1, 7) == 1)
117                {
118                    PhysicsObject vihu = PhysicsObject.CreateStaticObject(32, 32);
119                    vihu.X = taso.X;
120                    vihu.Y = RandomGen.NextInt(0, 10) + taso.Y;
121                    vihu.Image = tahtiKuva;
122                    vihu.Tag = "vihu";
123                    vihu.AngularVelocity = 10.0;
124                    Add(vihu);
125                }
126                if (RandomGen.NextInt(1, 20) == 1)
127                {
128                    PhysicsObject Helichopter = PhysicsObject.CreateStaticObject(32, 32);
129                    Helichopter.X = taso.X + RandomGen.NextInt(40, 100);
130                    Helichopter.Y = 340;
131                    Helichopter.Image = HeliChapter;
132                    PlasmaCannon HeliChopterAse = new PlasmaCannon(30, 10);
133                    HeliChopterAse.Angle += Angle.FromDegrees(RandomGen.NextInt(-125, -25));
134                    Timer Asetimer = new Timer();
135                    Asetimer.Interval = 1;
136                    Asetimer.Timeout += delegate
137                    {
138                        PhysicsObject HeliAmmus = HeliChopterAse.Shoot();
139                        HeliAmmus.Tag = "vihu";
140                        HeliAmmus.LifetimeLeft = TimeSpan.FromSeconds(0.8);
141                        AddCollisionHandler(HeliAmmus, CollisionHandler.DestroyObject);
142                    };
143                    Asetimer.Start();
144                    Helichopter.Add(HeliChopterAse);
145                    Helichopter.IgnoresCollisionResponse = true;
146                    Helichopter.Tag = "HeliTag";
147                    Add(Helichopter);
148
149                    Helichopter.Destroyed += Asetimer.Stop;
150                    Helichopter.Destroyed += HeliChopterAse.Destroy;
151                }
152                if (RandomGen.NextInt(1, 10) == 1)
153                {
154                    PhysicsObject LaavaPallo = new PhysicsObject(32, 32, Shape.Circle);
155                    LaavaPallo.X = pelaaja1.X;
156                    LaavaPallo.Y = Level.Bottom;
157                    LaavaPallo.Image = FireLava;
158                    LaavaPallo.Tag = "vihu";
159                    LaavaPallo.IgnoresCollisionResponse = true;
160                    Add(LaavaPallo);
161                    LaavaPallo.Hit(new Vector(RandomGen.NextInt(-100,300), RandomGen.NextInt(800,1800)));
162                }
163            }
164
165            if (RandomGen.NextInt(1, 10) == 1)
166            {
167                PhysicsObject wumpaf = PhysicsObject.CreateStaticObject(32, 32);
168                wumpaf.X = (taso.X + RandomGen.NextInt(50, 100));
169                wumpaf.Y = taso.Y + RandomGen.NextInt(50, 200);
170                wumpaf.Image = WumpaFruit;
171                wumpaf.Tag = "wumpa";
172                wumpaf.IgnoresCollisionResponse = true;
173                Add(wumpaf);
174            }
175
176        }
177        else
178        {
179            PhysicsObject TuhoutuvaTaso = PhysicsObject.CreateStaticObject(82, 20);
180            TuhoutuvaTaso.X = RandomGen.NextInt(150, 325) + VanhaTaso;
181            TuhoutuvaTaso.Y = RandomGen.NextInt(-200, 75);
182            TuhoutuvaTaso.Color = Color.Red;
183            TuhoutuvaTaso.Oscillate(Vector.UnitY, RandomGen.NextInt(50, 200), 0.5);
184            VanhaTaso = TuhoutuvaTaso.X;
185            TuhoutuvaTaso.Tag = "TTaso";
186            Add(TuhoutuvaTaso);
187        }
188    }
189
190    void LisaaPelaaja()
191    {
192        pelaaja1 = new PlatformCharacter(64, 64);
193        pelaaja1.Y = 150;
194        pelaaja1.Mass = 4.0;
195        pelaaja1.Image = pelaajanKuva;
196        Add(pelaaja1);
197        pelaajan1Ase = new AssaultRifle(30, 10);
198        pelaaja1.Add(pelaajan1Ase);
199        AddCollisionHandler(pelaaja1, "wumpa", CollisionHandler.DestroyTarget);
200        AddCollisionHandler(pelaaja1, "wumpa", CollisionHandler.AddMeterValue(pisteLaskuri, 50));
201        AddCollisionHandler(pelaaja1, "vihu", TormaysHighScore);
202        AddCollisionHandler(pelaaja1, "TTaso", TuhoaTaso);
203        LisaaTaso(true);
204    }
205
206    void TuhoaTaso(PhysicsObject tormaaja, PhysicsObject objekti)
207    {
208        //Timer TasoAjastin = new Timer();
209        Timer.SingleShot(1.5, delegate {
210            if (!objekti.IsDestroyed)
211            {
212                Explosion rajahdys = new Explosion(50);
213                rajahdys.Position = objekti.Position;
214                Add(rajahdys);
215                objekti.Destroy();
216            }
217        });
218        //TasoAjastin.Start();
219    }
220
221    void LisaaNappaimet()
222    {
223        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
224        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
225
226        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
227
228        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
229
230        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
231        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
232        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
233
234        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
235
236        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
237        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
238        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
239
240        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
241    }
242
243    void Liikuta(PlatformCharacter hahmo, double nopeus)
244    {
245        hahmo.Walk(nopeus);
246    }
247
248    void Hyppaa(PlatformCharacter hahmo, double nopeus)
249    {
250        hahmo.Jump(nopeus);
251        LisaaTaso();
252    }
253
254    void AmmuAseella(AssaultRifle ase)
255    {
256        PhysicsObject ammus = ase.Shoot();
257        if (ammus!=null)
258        {
259            AddCollisionHandler(ammus, "vihu", CollisionHandler.AddMeterValue(pisteLaskuri, 100));
260            AddCollisionHandler(ammus, "vihu", CollisionHandler.ExplodeTarget(50, true));
261            AddCollisionHandler(ammus, "HeliTag", CollisionHandler.AddMeterValue(pisteLaskuri, 150));
262            AddCollisionHandler(ammus, "HeliTag", CollisionHandler.ExplodeTarget(50, true));
263            AddCollisionHandler(ammus, CollisionHandler.DestroyObject);
264        }
265    }
266
267    void TormaysHighScore(PhysicsObject Tormaaja, PhysicsObject Kohde)
268    {
269        HighScore();
270    }
271
272    void HighScore()
273    {
274        ClearAll();
275        EasyHighScore topLista = new EasyHighScore();
276        topLista.EnterAndShow(pisteLaskuri.Value);
277        topLista.HighScoreWindow.Closed += delegate { Begin(); };
278    }
279    void SeeHighScore()
280    {
281        EasyHighScore topLista = new EasyHighScore();
282        topLista.Show();
283        topLista.HighScoreWindow.Closed += delegate { Begin(); };
284    }
285
286}
Note: See TracBrowser for help on using the repository browser.