source: 2009/joni_j/Lil' boxhead/Peli.cs @ 10335

Revision 185, 14.0 KB checked in by jomialja, 11 years ago (diff)
Line 
1using System;
2using Microsoft.Xna.Framework;
3using Microsoft.Xna.Framework.Graphics;
4using Microsoft.Xna.Framework.Input;
5using Microsoft.Xna.Framework.Media;
6
7using Physics2DDotNet;
8using AdvanceMath;
9using Jypeli;
10using Jypeli.ScreenObjects;
11using Jypeli.Assets;
12
13
14namespace Lil__boxhead
15{
16    // Yksinkertainen tasohyppely.
17    class Tasohyppely : PhysicsGame
18    {
19        #region Muuttujat
20
21        const double liikeVoima = 2244;
22        const double hyppyVoima = 2100;
23
24        Meter<int> pisteLaskuri;
25        ValueDisplay pisteNaytto;
26
27        Level kentta;
28        PlatformCharacter pelaaja1;
29        PhysicsObject maali;
30        PhysicsObject Lehma;
31        Cannon ase;
32        AssaultRifle kk;
33       
34        int elamaLaskuri; // Vielä tekemättä toteutus!
35        int kenttaNro; // monesko kenttä on menossa
36
37        #endregion
38                       
39
40        #region Alustukset
41        protected override void LoadContent()
42        {
43            // Asetetaan kentän numero nollaksi, jota kasvatetaan kentän latauksessa (aina siis vähintään 1)
44            kenttaNro = 0;
45
46            DrawPerimeter = false; // ei haluta piirtää kentän reunoja
47
48            // Luodaan pistelaskuri
49            pisteLaskuri = new Meter<int>(0, 0, 1000000);
50
51            // luodaan pistelaskunäyttö
52            pisteNaytto = new ValueDisplay(this);
53            pisteNaytto.Text = "Pisteitä: ";
54            pisteNaytto.X = Screen.RightSafe - 250;
55            pisteNaytto.Y = Screen.TopSafe - 50;
56            pisteNaytto.BindTo(pisteLaskuri);
57            Add(pisteNaytto);    // lisätään peliin
58
59            // Asetetaan painovoima
60            Gravity = new Vector2D(0, -1000);
61
62            // Zoomataan lähemmäksi
63            Camera.ZoomFactor = 2.0;
64
65            aloitaUusiPeli();
66
67
68
69        }
70
71        void aloitaUusiPeli()
72        {
73            MessageDisplay.Clear();
74
75            kenttaNro = 0;
76
77            // ladataan kenttä
78            Level = seuraavaKentta();
79
80            // Laitetaan peliohje näyttöön
81            MessageDisplay.Add("Kerää kaikki esineet, jotka löydät.");
82            MessageDisplay.Add("Kun löydät aseen suuntaa vastuksen luo.");
83        }
84        #endregion
85
86
87        #region KentanLataus
88        Level seuraavaKentta()
89        {
90            pisteLaskuri.Reset();
91            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
92            MessageDisplay.Add("Kenttä " + kenttaNro);
93            Level seuraava = luoKentta();
94            lisaaNappaimet();
95            Camera.Follow(pelaaja1);
96            return seuraava;
97        }
98
99        Level luoKentta()
100        {
101            kentta = new Level(this, 4500, 750);
102            kentta.CreateBorder();
103            kentta.Borders.Visible = false;
104            kentta.Background.CreateGradient(Color.SandyBrown, Color.LightCoral);
105
106            Platform alusta = new Platform(kentta.Width, 300, Color.SandyBrown);
107            alusta.X = 0;
108            alusta.Y = kentta.Bottom - alusta.Height / 2;
109            kentta.Objects.Add(alusta);
110            lisaaLehma(kentta);
111            lisaaLippis(kentta);
112            lisaaAurinko(kentta);
113            lisaaCorni(kentta);
114            lisaaMaali(kentta);
115            lisaaPelaajat(kentta);
116           
117            int vihollistenMaara = kenttaNro;
118            lisaaPieniTaso(kentta ,-100,-200);
119            lisaaPieniTaso(kentta, -200, -250);
120            lisaaPieniTaso(kentta, 0,  -100);
121            lisaaPieniTaso(kentta, 5000 , -250
122                );
123            lisaaPieniTaso(kentta, 1750 ,-250
124                );
125            lisaaPieniTaso(kentta, 1700, -100);
126            lisaaPieniTaso(kentta, 2110, -175.1);
127
128
129
130            Bullet luoti = new Bullet();
131            kk = new AssaultRifle(luoti);
132            kk.Mass = 1;
133            kentta.Objects.Add(kk);
134            kk.X = 0;
135            kk.Y = 0;
136
137           
138
139            return kentta;
140
141        }
142
143        void lisaaPieniTaso(Level kentta, double x, double y)
144        {
145            Platform taso = new Platform(150, 20, Color.Silver);
146            taso.X = x;
147            taso.Y = y;
148            kentta.Objects.Add(taso);
149        }   
150
151        void lisaaPelaajat(Level kentta)
152        {
153            pelaaja1 = new PlatformCharacter(4, Shapes.CreateCircle(20));
154            pelaaja1.Texture = Content.Load<Texture2D>("lil'bh");
155            pelaaja1.X = -100;
156            pelaaja1.Y = kentta.Bottom + 120;
157            AddCollisionHandler(pelaaja1, osuiMaaliin);
158            AddCollisionHandler(pelaaja1, osuiLehmaan);
159            AddCollisionHandler(pelaaja1, osuikkhon);
160            kentta.Objects.Add(pelaaja1);
161        }
162
163        void lisaaLippis (Level kentta)
164        {
165            for (int i = 0; i < 1; i++)
166            {
167                PhysicsObject Lippis = new PhysicsObject(0.005, Shapes.CreateCircle(11));
168                Lippis.X = RandomGen.NextDouble(100.0, -120.0);
169                Lippis.Y = 0.0;
170                Lippis.Restitution = 1.0;
171                Lippis.Texture = Content.Load<Texture2D>("Lippis");
172                AddCollisionHandler(Lippis, keraa);
173                kentta.Objects.Add(Lippis);
174                   
175                   
176                PhysicsObject Jatski = new PhysicsObject(0.005, Shapes.CreateCircle(12));
177                Jatski.X = RandomGen.NextDouble(100.0, -220.0);
178                Jatski.Y = 0.0;
179                Jatski.Restitution = 1.0;
180                Jatski.Texture = Content.Load<Texture2D>("Jatski");
181                AddCollisionHandler(Jatski, keraa);
182                kentta.Objects.Add(Jatski);             
183
184            }
185        }
186
187        void lisaaLehma(Level kentta)
188        {
189            Lehma = new PhysicsObject(10000000000000000000, Shapes.CreateCircle (150));
190            Lehma.X = -1500;
191            Lehma.Y = -300.1750;
192            Lehma.Restitution = 1.0;
193            Lehma.Texture = Content.Load<Texture2D>("Lehma");
194            AddCollisionHandler(Lehma, tuuppaa);
195            kentta.Objects.Add(Lehma);
196            CannonBall kuula = new CannonBall();
197            ase = new Cannon(kuula);
198            ase.Position = Lehma.Position;
199            ase.Anchor = Lehma.Position;
200            ase.SetOwner(Lehma,kentta);
201            ase.Powered = false;
202            ase.Power = new Meter<double>(50000, 50000, 150000);
203            ase.FireRate = 0.6;
204            kentta.Objects.Add(ase);
205            ase.Equip();
206
207        }
208
209        void lisaaCorni(Level kentta)
210        {
211            for (int i = 0; i < 5; i++)
212            {
213                PhysicsObject Corni = new PhysicsObject(0.005, Shapes.CreateCircle(11));
214                Corni.X = RandomGen.NextDouble(1750.0, 1750.0);
215                Corni.Y = 250.1750;
216                Corni.Restitution = 1.0;               
217                Corni.Texture = Content.Load<Texture2D>("Corni");
218                AddCollisionHandler(Corni, keraa);
219                kentta.Objects.Add(Corni);
220            }
221        }
222
223            //Aurinko
224           
225       
226        void lisaaAurinko (Level kentta)         
227           
228        {               
229            PhysicsObject Aurinko = PhysicsObject.CreateStaticObject(Shapes.CreateCircle(100));               
230            Aurinko.X = 0;
231            Aurinko.Y = 0;
232        }
233             //(maali)           
234        void lisaaMaali(Level kentta)
235        {
236            maali = PhysicsObject.CreateStaticObject(Shapes.CreateCircle(90));
237            maali.Tag = "maali";
238            maali.IgnoresCollisionResponse = true;
239            maali.X = -2000;
240            maali.Y = -300;
241            maali.Texture = Content.Load<Texture2D>("Maali!");
242            kentta.Objects.Add(maali);
243        }
244
245        void lisaaViholliset(Level kentta, int kpl)
246        {
247            for (int i = 0; i < kpl; i++)
248            {
249                PlatformCharacter vihollinen = new PlatformCharacter(100, Shapes.CreateCircle(30));
250                vihollinen.Brain = new RandomMoverBrain();
251                vihollinen.X = maali.X;
252                vihollinen.Y = maali.Y;
253                vihollinen.IgnoresGravity = true;
254                vihollinen.Texture = Content.Load<Texture2D>("vihollinen");
255                AddCollisionHandler(vihollinen, tuuppaa);
256                kentta.Objects.Add(vihollinen);
257               
258            }
259
260
261
262        }
263
264        protected override void OnUpdate(GameTime time)
265        {
266
267            ase.Angle = Angle.Degrees(RandomGen.NextDouble(-40, 50));
268
269            Projectile ammus = ase.Use();
270
271            if (ammus != null)
272            {
273                Level.Objects.Add(ammus);
274            }
275
276            base.OnUpdate(time);
277        }
278       
279        #endregion
280
281
282        #region Nappaimet
283        // Lisää peliin kaikki näppäimet
284        void lisaaNappaimet()
285        {
286            //Yleiset näppäimet
287            Controls.Listen(Keys.Enter, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
288
289            // Pelaajan näppäimet
290            Controls.Listen(Keys.Left, ButtonPosition.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector2D(-liikeVoima, 0));
291            Controls.Listen(Keys.Right, ButtonPosition.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector2D(liikeVoima, 0));
292            Controls.Listen(Keys.Up, ButtonPosition.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
293            Controls.Listen(Keys.A, ButtonPosition.Pressed, ammu, "Ammu", pelaaja1);
294            lisaaGamePadNappaimet(PlayerIndex.One, pelaaja1);
295            Controls.Listen(Keys.Q, ButtonPosition.Pressed, kaanna, "käännä", pelaaja1);
296        }
297
298        void lisaaGamePadNappaimet(PlayerIndex pelaajaNro, PlatformCharacter pelaaja)
299        {
300            //Yleiset näppäimet
301            Controls.Listen(pelaajaNro, Buttons.Start, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
302
303            Controls.Listen(pelaajaNro, Buttons.DPadLeft, ButtonPosition.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector2D(-liikeVoima, 0));
304            Controls.Listen(pelaajaNro, Buttons.DPadRight, ButtonPosition.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector2D(liikeVoima, 0));
305            Controls.Listen(pelaajaNro, Buttons.A, ButtonPosition.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, hyppyVoima);
306        }   
307        // Näppäimiin liitetyt toiminnot alkavat tästä -->
308        bool liikuta(ControlEvent e)
309        {
310            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
311            Vector2D voima = e.Parameter1.ToVector2D();
312            hahmo.Walk(e.Time, voima);
313            return false;
314        }
315
316        bool hyppaa(ControlEvent e)
317        {
318            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
319            double voima = e.Parameter1.ToDouble();
320
321            if (hahmo.Jump(voima))
322            {
323                this.PlaySound("hyppays");
324            }
325            return false;
326        }
327
328        bool ammu(ControlEvent e)
329        {
330            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
331
332            Projectile ammus = kk.Use();
333
334            if (ammus != null)
335            {
336                Level.Objects.Add(ammus);
337            }
338                         
339           
340            return false;
341        }
342
343        bool kaanna(ControlEvent e)
344        {
345            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
346
347            kk.Angle += Angle.Degrees(3);
348
349
350
351            return false;
352        }
353
354
355        bool uusiPeli(ControlEvent e)
356        {
357            aloitaUusiPeli();
358            return true;
359        }
360        #endregion
361
362
363        #region Tapahtumat
364
365        void osuiMaaliin(Collision collision)
366        {
367            if (collision.Other.Tag == "maali")
368            {
369                this.PlaySound("maali");
370                int edellisenKentanPisteet = pisteLaskuri.Value;
371                Level = seuraavaKentta();
372                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro + ". Pisteitä: " + edellisenKentanPisteet);
373            }
374        }
375
376        void osuiLehmaan(Collision c)
377        {
378            if (c.Other == Lehma)
379            {
380                pelaaja1.Stop(); // Pysäyttää pelaajan kaiken liikkeen
381                elamaLaskuri--;
382                SiirraPelaajaAlkuun();
383            }
384        }
385
386        void osuikkhon(Collision c)
387        {
388            if (c.Other == kk)
389            {
390                MessageDisplay.Add("Osuttiin konekivääriin");
391
392                kk.Position = pelaaja1.Position;
393                kk.Anchor = pelaaja1.Position;
394                kk.SetOwner(pelaaja1, Level);
395                kk.Equip();
396                kk.Stop();
397            }   kk.FireRate =(0.5);
398        }
399
400        void SiirraPelaajaAlkuun()
401        {
402            pelaaja1.X = -100;
403            pelaaja1.Y = kentta.Bottom + 120;
404        }
405
406        // Kerää tähden ja antaa pisteen
407        void keraa(Collision collision)
408        {
409            if (collision.Other.Equals(pelaaja1))
410            {
411                PhysicsObject tahti = collision.Obj;
412                tahti.Lifetime.IsExpired = true;
413
414                this.PlaySound("tormays", -0.5, 0.5);
415                pisteLaskuri.Value += 1;
416            }
417        }
418
419        // Vihollinen tuuppaa pelaajaa
420        void tuuppaa(Collision collision)
421        {
422            if (collision.Other is PlatformCharacter)
423            {
424                double luku1 = RandomGen.NextIntRange(-10000, -8000, 8000, 10000);
425                double luku2 = RandomGen.NextIntRange(-10000, -8000, 8000, 10000);
426
427                if (collision.Other == pelaaja1)
428                {
429                    // pieni värinä törmäyksestä
430                    Controls.GameControllers[PlayerIndex.One].Vibrate(0.9, 0.5, 0.0, 0.0, 0.1);
431                }
432                this.PlaySound("tuuppaus");
433                collision.Other.Hit(new Vector2D(luku1, luku2));
434            }
435        }
436        #endregion
437    }
438}
Note: See TracBrowser for help on using the repository browser.