source: joonas_v/PakoKoulusta/Peli.cs @ 365

Revision 365, 10.7 KB checked in by jovivavi, 12 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 PakoKoulusta
15{
16    // Yksinkertainen tasohyppely.
17    class Tasohyppely : PhysicsGame
18    {
19        #region Muuttujat
20
21        const double liikeVoima = 4000;
22        const double hyppyVoima = 1800;
23
24        //Meter<int> pisteLaskuri;
25        //ValueDisplay pisteNaytto;
26        Timer aikaLaskuri;
27        ValueDisplay aikaNaytto;
28
29        PlatformCharacter pelaaja1;
30
31
32        int kenttaNro; // monesko kenttä on menossa
33
34        #endregion
35
36
37        #region Alustukset
38        protected override void LoadContent()
39        {
40            // Asetetaan kentän numero nollaksi, jota kasvatetaan kentän latauksessa (aina siis vähintään 1)
41            kenttaNro = 0;
42
43            DrawPerimeter = false; // ei haluta piirtää kentän reunoja
44
45            // Luodaan pistelaskuri
46            //pisteLaskuri = new Meter<int>(0, 0, 1000000);
47
48            // luodaan pistelaskunäyttö
49            //pisteNaytto = new ValueDisplay(this);
50            //pisteNaytto.Text = "Pisteitä: ";
51            //pisteNaytto.X = Screen.RightSafe - 250;
52            //pisteNaytto.Y = Screen.TopSafe - 50;
53            //pisteNaytto.BindTo(pisteLaskuri);
54            //Add(pisteNaytto);    // lisätään peliin
55
56            aikaLaskuri = new Timer();
57            aikaLaskuri.Interval = 90;
58            aikaLaskuri.Trigger += new Timer.TriggerHandler(aikaLoppui);
59            AddTimer(aikaLaskuri);
60            aikaLaskuri.Start();
61
62            aikaNaytto = new ValueDisplay(this);
63            aikaNaytto.Text = "Aika:";
64            aikaNaytto.TextColor = Color.Black;
65            aikaNaytto.FormatDouble(0, true);
66            aikaNaytto.X = Screen.RightSafe - 250;
67            aikaNaytto.Y = Screen.TopSafe - 50;
68            aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
69            Add(aikaNaytto);
70
71
72
73            // Asetetaan painovoima
74            Gravity = new Vector2D(0, -870);
75
76            // Zoomataan lähemmäksi
77            Camera.ZoomFactor = 1.6;
78
79            aloitaUusiPeli();
80
81        }
82
83        void aloitaUusiPeli()
84        {
85            MessageDisplay.Clear();
86
87            kenttaNro = 0;
88
89            // ladataan kenttä
90            Level = seuraavaKentta();
91
92            // Laitetaan peliohje näyttöön
93            MessageDisplay.Add("Karkasit koulusta!");
94            MessageDisplay.Add("Älä törmää tai jäät kiinni...");
95            MessageDisplay.Add("Jos et löydä piilopaikkaan 90 sekunnissa, jäät kiinni");
96        }
97        #endregion
98
99
100        #region KentanLataus
101        Level seuraavaKentta()
102        {
103            aikaLaskuri.Reset();
104            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
105            MessageDisplay.Add("Pako " + kenttaNro);
106            Level seuraava = luoKentta();
107            lisaaNappaimet();
108            Camera.Follow(pelaaja1);
109            return seuraava;
110        }
111
112        Level luoKentta()
113        {
114            Level kentta = new Level(this, 9000, 1000);
115            kentta.CreateBorder();
116            kentta.Borders.Visible = false;
117            kentta.Background.CreateGradient(Color.White, Color.SkyBlue);
118            //kentta.Background.Image = Content.Load<Texture2D>("tausta");
119            Platform alusta = new Platform(kentta.Width, 300, Color.Gray);
120            alusta.X = 0;
121            alusta.Y = kentta.Bottom - alusta.Height / 2;
122            kentta.Objects.Add(alusta);
123
124            lisaaMaali(kentta);
125            lisaaPelaajat(kentta);
126            lisaaPukki(kentta, -480);
127            lisaaAuto(kentta, -460);
128            lisaaKello(kentta);
129
130            int vihollistenMaara = kenttaNro;
131
132            return kentta;
133        }
134
135       
136
137        void lisaaPelaajat(Level kentta)
138        {
139            pelaaja1 = new PlatformCharacter(4, Shapes.CreateCircle(25));
140            pelaaja1.Texture = Content.Load<Texture2D>("skeittari");
141            pelaaja1.X = kentta.Left+405;
142            pelaaja1.Y = kentta.Bottom + 120;
143
144            AddCollisionHandler(pelaaja1, osuiMaaliin);
145
146            kentta.Objects.Add(pelaaja1);
147        }
148
149       
150        void lisaaPukki(Level kentta, double y)
151        {
152            for (int i = 0; i < 20; i++)
153            {               
154                   
155                Texture2D tekstuuri = Content.Load<Texture2D>("pukki1");
156                PhysicsObject pukki = PhysicsObject.CreateStaticObject(Shapes.CreateFromTexture(tekstuuri, new Vector2D(50, 50), 100));
157                pukki.Texture = tekstuuri;
158                pukki.X = RandomGen.NextDouble(-4000.0, 4000.0);
159                pukki.Y = y;
160                kentta.Objects.Add(pukki);
161                AddCollisionHandler(pukki, loppu);
162           
163            }
164        }
165        void lisaaAuto(Level kentta, double y)
166        {
167            for (int i = 0; i < 5; i++)
168            {
169                PhysicsObject auto = PhysicsObject.CreateStaticObject(Shapes.CreateRectangle(100, 80));
170                auto.X = RandomGen.NextDouble(-4100, 4100);
171                auto.Y=y;
172                auto.Texture = Content.Load<Texture2D>("auto");
173                kentta.Objects.Add(auto);
174                AddCollisionHandler(auto, loppu);               
175            }
176        }
177
178        void lisaaMaali(Level kentta)
179        {
180            Texture2D tekstuuri = Content.Load<Texture2D>("maali1");
181            PhysicsObject maali = PhysicsObject.CreateStaticObject(Shapes.CreateFromTexture(tekstuuri , new Vector2D(200, 200), 100));
182            maali.Tag = "maali";
183            maali.Texture = tekstuuri;
184            maali.IgnoresCollisionResponse = true;
185            maali.X = 4400;
186            maali.Y = -400;
187            //maali.Texture = Content.Load<Texture2D>("maali1");
188            kentta.Objects.Add(maali);
189        }
190        void lisaaKello(Level kentta)
191        {
192            for (int i = 0; i < 5; i++)
193            {
194                Texture2D tekstuuri = Content.Load<Texture2D>("kello");
195                PhysicsObject kello = new PhysicsObject(1, Shapes.CreateFromTexture(tekstuuri, new Vector2D(20, 20), 100));
196                kello.X = RandomGen.NextDouble(-4300, 4300);
197                kello.Y = -350;
198                kello.Texture = tekstuuri;
199                AddCollisionHandler(kello, keraaKello);
200                kentta.Objects.Add(kello);
201            }
202
203        }
204
205       
206        #endregion
207
208
209        #region Nappaimet
210        // Lisää peliin kaikki näppäimet
211        void lisaaNappaimet()
212        {
213            ClearControls();
214            //Yleiset näppäimet
215            Controls.Listen(Keys.Enter, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
216
217            // Pelaajan näppäimet
218            Controls.Listen(Keys.Left, ButtonPosition.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector2D(-liikeVoima, 0));
219            Controls.Listen(Keys.Right, ButtonPosition.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector2D(liikeVoima, 0));
220            Controls.Listen(Keys.Up, ButtonPosition.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
221
222            lisaaGamePadNappaimet(PlayerIndex.One, pelaaja1);
223        }
224
225        void lisaaGamePadNappaimet(PlayerIndex pelaajaNro, PlatformCharacter pelaaja)
226        {
227            //Yleiset näppäimet
228            Controls.Listen(pelaajaNro, Buttons.Start, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
229
230            Controls.Listen(pelaajaNro, Buttons.DPadLeft, ButtonPosition.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector2D(-liikeVoima, 0));
231            Controls.Listen(pelaajaNro, Buttons.DPadRight, ButtonPosition.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector2D(liikeVoima, 0));
232            Controls.Listen(pelaajaNro, Buttons.A, ButtonPosition.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, hyppyVoima);
233        }
234
235        // Näppäimiin liitetyt toiminnot alkavat tästä -->
236        bool liikuta(ControlEvent e)
237        {
238            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
239            Vector2D voima = e.Parameter1.ToVector2D();
240            hahmo.Walk(e.Time, voima);
241            return false;
242        }
243
244        bool hyppaa(ControlEvent e)
245        {
246            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
247            double voima = e.Parameter1.ToDouble();
248
249            if (hahmo.Jump(voima))
250            {
251                this.PlaySound("hyppays");
252            }
253            return false;
254        }
255
256        bool uusiPeli(ControlEvent e)
257        {
258            aloitaUusiPeli();
259            return true;
260        }
261        #endregion
262
263
264        #region Tapahtumat
265        // Kun osutaan maaliin
266        void osuiMaaliin(Collision collision)
267        {
268            if (collision.Other.Tag == "maali")
269            {
270                this.PlaySound("maali");
271                //int edellisenKentanPisteet = aikaLaskuri.Value;
272                Level = seuraavaKentta();
273                //MessageDisplay.Add("Pääsit salaiseen piilopaikkaan " + kenttaNro + ". Aikaa: " + edellisenKentanPisteet);
274            }
275        }
276
277        // Haamu tuuppaa pelaajaa
278        void tuuppaa(Collision collision)
279        {
280            if (collision.Other is PlatformCharacter)
281            {
282                double luku1 = RandomGen.NextIntRange(-10000, -8000, 8000, 10000);
283                double luku2 = RandomGen.NextIntRange(-10000, -8000, 8000, 10000);
284
285                if (collision.Other == pelaaja1)
286                {
287                    // pieni värinä törmäyksestä
288                    Controls.GameControllers[PlayerIndex.One].Vibrate(0.5, 0.5, 0.0, 0.0, 0.1);
289                }
290                this.PlaySound("tuuppaus");
291                collision.Other.Hit(new Vector2D(luku1, luku2));
292            }
293        }
294        void loppu(Collision c)
295        { 
296            if (c.Other == pelaaja1)
297            {
298            pelaaja1.Destroy();
299            MessageDisplay.Add("Jäit kiinni!");
300            }
301        }
302        void keraaKello(Collision d)
303        {
304            if (d.Other == pelaaja1)
305            {
306                aikaLaskuri.CurrentTime -= 1;
307
308                //Aikalaskurin value vähenee
309                //Lifetime.IsExpired = true;
310                d.Obj.Destroy();
311            }
312        }
313        private void aikaLoppui(Timer sender)
314        {
315            MessageDisplay.Add(" Aika loppui. Jäit kiinni!");
316            pelaaja1.Destroy();
317        }
318        #endregion
319    }
320}
Note: See TracBrowser for help on using the repository browser.