source: aleksi_o/Omapeli/Peli.cs @ 181

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