source: joonas_v/PakoKoulusta/Peli.cs @ 399

Revision 399, 10.5 KB checked in by jovivavi, 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 PakoKoulusta
15{
16    // Yksinkertainen tasohyppely.
17    class Tasohyppely : PhysicsGame
18    {
19        #region Muuttujat
20
21        const double liikeVoima = 4000;
22        const double hyppyVoima = 1650;
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 = 60;
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 60 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, -476);
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 < 5+(kenttaNro*3); 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, osuiPukkiin);
162           
163            }
164        }
165        void lisaaAuto(Level kentta, double y)
166        {
167            for (int i = 0; i < 2+(kenttaNro*2); i++)
168            {
169                PhysicsObject auto = PhysicsObject.CreateStaticObject(Shapes.CreateRectangle(100, 80));
170                auto.X = RandomGen.NextDouble(-4000, 4000);
171                auto.Y=y;
172                auto.Texture = Content.Load<Texture2D>("auto");
173                kentta.Objects.Add(auto);
174                AddCollisionHandler(auto, osuiAutoon);               
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 < 6-(kenttaNro); 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                double edellisenKentanAika = aikaLaskuri.CurrentTime;
272                Level = seuraavaKentta();
273                MessageDisplay.Add("Pääsit salaiseen piilopaikkaan " + ". Aikaa: " + edellisenKentanAika);
274            }
275        }
276        void osuiPukkiin(Collision c)
277        { 
278            if (c.Other == pelaaja1)
279            {
280                peliLoppu();
281            }
282        }
283
284        void peliLoppu()
285        {
286            pelaaja1.Destroy();
287            MessageDisplay.Add("Kaaduit!");
288        }
289
290        void osuiAutoon(Collision e)
291        {
292            if (e.Other == pelaaja1)
293            {
294                if (pelaaja1.Bottom+2 > e.Obj.Top-2)
295                {
296                    return;
297                }
298                else
299                {
300                    peliLoppu();
301                }
302            }
303        }
304        void keraaKello(Collision d)
305        {
306            if (d.Other == pelaaja1)
307            {               
308                aikaLaskuri.CurrentTime -= 3;
309
310                //Aikalaskurin value vähenee
311                //Lifetime.IsExpired = true;
312                d.Obj.Destroy();
313            }
314        }
315        private void aikaLoppui(Timer sender)
316        {
317            MessageDisplay.Add(" Aika loppui. Jäit kiinni!");
318            pelaaja1.Destroy();
319        }
320        #endregion
321    }
322}
Note: See TracBrowser for help on using the repository browser.