source: aleksi_o/Omapeli/Peli.cs @ 150

Revision 150, 10.9 KB checked in by alalojap, 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 Omapeli
15{
16    // Yksinkertainen tasohyppely.
17    class Tasohyppely : PhysicsGame
18    {
19        #region Muuttujat
20
21        const double liikeVoima = 3000;
22        const double hyppyVoima = 1000;
23
24        PlatformCharacter pelaaja1;
25        PhysicsObject maali;
26
27        int kenttaNro; // monesko kenttä on menossa
28
29        #endregion
30
31
32        #region Alustukset
33        protected override void LoadContent()
34        {
35            // Asetetaan kentän numero nollaksi, jota kasvatetaan kentän latauksessa (aina siis vähintään 1)
36            kenttaNro = 0;
37
38            DrawPerimeter = false; // kentän reunat piirretään
39
40            // Asetetaan painovoima
41            Gravity = new Vector2D(0, -500);
42
43            // Zoomataan lähemmäksi
44            Camera.ZoomFactor = 5.0;
45
46            aloitaUusiPeli();
47
48        }
49
50        void aloitaUusiPeli()
51        {
52            MessageDisplay.Clear();
53
54            kenttaNro = 0;
55
56            // ladataan kenttä
57            Level = seuraavaKentta();
58
59            // Laitetaan peliohje näyttöön
60            MessageDisplay.Add("Etsi iso tähti!");
61            MessageDisplay.Add("Mutta varo haamuja...");
62        }
63        #endregion
64
65
66        #region KentanLataus
67        Level seuraavaKentta()
68        {
69
70            kenttaNro += 1; // lisätään kenttänumeroa yhdellä
71            MessageDisplay.Add("Kenttä " + kenttaNro);
72            Level seuraava = luoKentta();
73            lisaaNappaimet();
74            Camera.Follow(pelaaja1);
75            return seuraava;
76        }
77
78        Level luoKentta()
79        {
80            Level kentta = new Level(this, 1500, 1000);
81            kentta.CreateBorder();
82            kentta.Borders.Visible = false;
83            kentta.Background.CreateGradient(Color.White, Color.Blue);
84
85            Platform alusta = new Platform(1750, 300, Color.LightGreen);
86            alusta.X = 0;
87            alusta.Y = kentta.Bottom - alusta.Height / 2;
88            kentta.Objects.Add(alusta);
89
90            //tykkihuoneen lattia & katto
91            lisaaLattia(kentta, -600, -375);
92            lisaaKatto(kentta, -577.5, -250);
93            //Reunat
94            lisaaSeina(kentta, kentta.Left, -367.5);
95            lisaaSeina1(kentta, -50, -380);
96            //keskiseinä
97            lisaaSeina2(kentta, -375, -325);
98            //sammutin huoneen lattia & katto
99            lisaaLattia1(kentta, -235, -400);
100            lisaaKatto1(kentta, -197.5, -275);
101
102            lisaaMaali(kentta);
103            lisaaPelaajat(kentta);
104            lisaaTahdet(kentta);
105
106            lisaaViholliset(kentta, -375, -400);
107            lisaaTykki(kentta, -375, -400);
108
109            return kentta;
110        }
111
112        //Tykki & Alotus
113        void lisaaLattia(Level kentta, double x, double y)
114        {
115            Platform lattia = new Platform(325, 30, Color.Green);
116            lattia.X = x;
117            lattia.Y = y;
118            kentta.Objects.Add(lattia);
119        }
120
121        void lisaaKatto(Level kentta, double x, double y)
122        {
123            Platform katto = new Platform(375, 30, Color.Green);
124            katto.X = x;
125            katto.Y = y;
126            kentta.Objects.Add(katto);
127        }
128
129        //Sammutinhuone
130        void lisaaKatto1(Level kentta, double x, double y)
131        {
132            Platform katto = new Platform(325, 30, Color.Green);
133            katto.X = x;
134            katto.Y = y;
135            kentta.Objects.Add(katto);
136        }
137
138        void lisaaLattia1(Level kentta, double x, double y)
139        {
140            Platform lattia = new Platform(250, 30, Color.Green);
141            lattia.X = x;
142            lattia.Y = y;
143            kentta.Objects.Add(lattia);
144        }
145
146        //vasen reuna
147        void lisaaSeina(Level kentta, double x, double y)
148        {
149            Platform seina = new Platform(30, 265, Color.Black);
150            seina.X = x;
151            seina.Y = y;
152            kentta.Objects.Add(seina);
153        }
154
155        //oikea reuna
156        void lisaaSeina1(Level kentta, double x, double y)
157        {
158            Platform seina = new Platform(30, 240, Color.Black);
159            seina.X = x;
160            seina.Y = y;
161            kentta.Objects.Add(seina);
162        }
163
164        //keskiseinä
165        void lisaaSeina2(Level kentta, double x, double y)
166        {
167            Platform seina = new Platform(30, 250, Color.Black);
168            seina.X = x;
169            seina.Y = y;
170            kentta.Objects.Add(seina);
171        }
172
173        void lisaaPelaajat(Level kentta)
174        {
175            pelaaja1 = new PlatformCharacter(4, Shapes.CreateCircle(20));
176            pelaaja1.Texture = Content.Load<Texture2D>("norsu");
177            pelaaja1.X = -625;
178            pelaaja1.Y = kentta.Bottom + 50;
179            pelaaja1.Body.LinearDamping = 0.95;
180
181            AddCollisionHandler(pelaaja1, osuiMaaliin);
182
183            kentta.Objects.Add(pelaaja1);
184        }
185
186        void lisaaTahdet(Level kentta)
187        {
188            for (int i = 0; i < 20; i++)
189            {
190                PhysicsObject tahti = new PhysicsObject(0.005, Shapes.CreateCircle(12));
191                tahti.X = RandomGen.NextDouble(-475.0, 475.0);
192                tahti.Y = 400.0;
193                tahti.Restitution = 1.0;
194                tahti.Texture = Content.Load<Texture2D>("tahti");
195                AddCollisionHandler(tahti, keraa);
196                kentta.Objects.Add(tahti);
197
198            }
199        }
200
201        void lisaaMaali(Level kentta)
202        {
203            maali = PhysicsObject.CreateStaticObject(Shapes.CreateCircle(25));
204            maali.Tag = "maali";
205            maali.IgnoresCollisionResponse = true;
206            maali.X = 0;
207            maali.Y = 325;
208            maali.Texture = Content.Load<Texture2D>("tahti");
209            kentta.Objects.Add(maali);
210        }
211
212        void lisaaViholliset(Level kentta, double x, double y)
213        {
214           
215                PlatformCharacter vihollinen = new PlatformCharacter(10, Shapes.CreateCircle(10));
216                vihollinen.Brain = new RandomMoverBrain();
217                vihollinen.X = -330;
218                vihollinen.Y = -275 ;
219                vihollinen.IgnoresGravity = true;
220                vihollinen.Texture = Content.Load<Texture2D>("vihollinen");
221                AddCollisionHandler(vihollinen, eliminoi);
222                kentta.Objects.Add(vihollinen);
223           
224        }
225
226        void lisaaTykki(Level kentta, double x, double y)
227        {
228
229            PlatformCharacter tykki = new PlatformCharacter(10, Shapes.CreateCircle(10));
230            tykki.X = -325;
231            tykki.Y = -275;
232            tykki.IgnoresGravity = false;
233            tykki.Texture = Content.Load<Texture2D>("vihollinen");
234            kentta.Objects.Add(tykki);
235           
236        }
237
238        void panos(double tykkix, double tykkiy)
239        {
240            PlatformCharacter ammus = new PlatformCharacter(10, Shapes.CreateCircle(2));
241            ammus.Y = tykkiy;
242            ammus.X = tykkix;
243            ammus.IgnoresGravity = true;
244            Vector2D panosAmmutaan = new Vector2D (2000.0, 0.0);
245            ammus.Hit(panosAmmutaan);
246        }
247        #endregion
248
249
250        #region Nappaimet
251        // Lisää peliin kaikki näppäimet
252        void lisaaNappaimet()
253        {
254            //Yleiset näppäimet
255            Controls.Listen(Keys.Enter, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
256
257            // Pelaajan näppäimet
258            Controls.Listen(Keys.Left, ButtonPosition.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector2D(-liikeVoima, 0));
259            Controls.Listen(Keys.Right, ButtonPosition.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector2D(liikeVoima, 0));
260            Controls.Listen(Keys.Up, ButtonPosition.Pressed, hyppaa, "Hyppää", pelaaja1, hyppyVoima);
261
262            lisaaGamePadNappaimet(PlayerIndex.One, pelaaja1);
263        }
264
265        void lisaaGamePadNappaimet(PlayerIndex pelaajaNro, PlatformCharacter pelaaja)
266        {
267            //Yleiset näppäimet
268            Controls.Listen(pelaajaNro, Buttons.Start, ButtonPosition.Pressed, uusiPeli, "Aloittaa uuden pelin");
269
270            Controls.Listen(pelaajaNro, Buttons.DPadLeft, ButtonPosition.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector2D(-liikeVoima, 0));
271            Controls.Listen(pelaajaNro, Buttons.DPadRight, ButtonPosition.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector2D(liikeVoima, 0));
272            Controls.Listen(pelaajaNro, Buttons.A, ButtonPosition.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, hyppyVoima);
273        }
274
275        // Näppäimiin liitetyt toiminnot alkavat tästä -->
276        bool liikuta(ControlEvent e)
277        {
278            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
279            Vector2D voima = e.Parameter1.ToVector2D();
280            hahmo.Walk(e.Time, voima);
281            return false;
282        }
283
284        bool hyppaa(ControlEvent e)
285        {
286            PlatformCharacter hahmo = e.Parameter0 as PlatformCharacter;
287            double voima = e.Parameter1.ToDouble();
288
289            if (hahmo.Jump(voima))
290            {
291                this.PlaySound("hyppays");
292            }
293            return false;
294        }
295
296        bool uusiPeli(ControlEvent e)
297        {
298            aloitaUusiPeli();
299            return true;
300        }
301        #endregion
302
303
304        #region Tapahtumat
305        // Kun osutaan maaliin
306        void osuiMaaliin(Collision collision)
307        {
308            if (collision.Other.Tag == "maali")
309            {
310                this.PlaySound("maali");
311                Level = seuraavaKentta();
312                MessageDisplay.Add("Pääsit läpi kentän " + kenttaNro);
313            }
314        }
315
316
317        // Kerää tähden ja antaa pisteen
318        void keraa(Collision collision)
319        {
320            if (collision.Other.Equals(pelaaja1))
321            {
322                PhysicsObject tahti = collision.Obj;
323                tahti.Lifetime.IsExpired = true;
324
325                this.PlaySound("kerays", -0.5, 0.5);
326            }
327        }
328
329        // Vihollinen eliminoi pelaajan
330        void eliminoi(Collision collision)
331        {
332            if (collision.Other is PlatformCharacter)
333            {
334                if (collision.Other == pelaaja1)
335                {
336                    pelaaja1.Lifetime.IsExpired = true;
337                }
338                if (pelaaja1.Lifetime.IsExpired == true)
339                {   
340                       MessageDisplay.Add ("PWN3D");
341                       MessageDisplay.TextColor = Color.White;
342                }
343                this.PlaySound("tuuppaus");
344            }
345        }
346        #endregion
347    }
348}
Note: See TracBrowser for help on using the repository browser.