source: joni_j/Lil' boxhead/Peli.cs @ 143

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