source: 2009/panu_l/Hyppija/Peli.cs @ 5421

Revision 457, 11.2 KB checked in by vesal, 12 years ago (diff)

Pistenäytön tekstit

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;
12using Physics2DDotNet.Shapes;
13
14// Panu Lappalainen 2009
15namespace Hyppija
16{
17    class Tasohyppely : PhysicsGame
18    {
19
20
21        protected override void LoadContent()
22        {
23            LuoPelaaja();
24            LuoKentta();
25            lisaaNappaimet();
26            lisaaMaali();
27            LuoPistelaskuri();
28            Top10 = HighScoreList.LoadOrCreate(this, "Top10Hyppija.txt", 10);
29        }
30
31        PlatformCharacter kalle;
32        Platform vesi;
33        const double liikeVoima = 10000;
34        const double hyppyVoima = 3200;
35        PhysicsObject maali;
36        Boolean PeliMaalissa = false;
37        Boolean PelaajaKuoli = false;
38
39        double ViimeisenTalonX;
40        double ViimeisenTalonY;
41        double kameranNopeus = 0.00004;
42        const int Taloja = 30;
43        Timer ajastin;
44        Meter<int> pisteLaskuri;
45        ValueDisplay pisteNaytto;
46
47        HighScoreList Top10;
48        int alkuaika = 0;
49        bool aloitaAlusta = false;
50
51        bool aloitaUusi(ControlEvent e)
52        {
53            Initialize();
54            Camera.Position.X = 0;
55            PelaajaKuoli = false;
56            PeliMaalissa = false;
57            kameranNopeus = 0.00004;
58            pisteLaskuri.Value = 0;
59            aloitaAlusta = true;
60            //alkuaika = gameTime
61            return false;
62        }
63
64
65        void LuoPelaaja()
66        {
67            //IShape pelaaja = Shapes.CreateCircle(20);
68            //kalle = new PlatformCharacter (10.0, pelaaja);
69
70
71
72            kalle = new PlatformCharacter(4, Shapes.CreateCircle(30));
73            kalle.Texture = Content.Load<Texture2D>("kallepaik");
74            Texture2D kavelykuvat = Content.Load<Texture2D>("kalle");
75            AnimatedTexture kavelyanimaatio = AnimatedTexture.FromTexture2D(kavelykuvat, 40, false);
76            kalle.RightWalkingTexture = kavelyanimaatio;
77            kalle.LeftWalkingTexture = Textures.Mirror(kavelyanimaatio);
78            kalle.RightIdleTexture = new AnimatedTexture(Content.Load<Texture2D>("kallepaik"));
79            kalle.Y = 50;
80           
81
82            Level.Objects.Add(kalle);
83            kalle.Restitution = 0.2;
84            AddCollisionHandler(kalle, VeteenTormays);
85            AddCollisionHandler(kalle, MaaliinPaasty);
86
87
88
89        }
90
91
92        void LuoKentta()
93        {
94            Gravity = new Vector2D(0, -1000);
95            int x = LuoTalot();
96            //LuoTalo(0, -500);
97            vesi = new Platform(x + Screen.Width *3, 300, Color.Blue);           
98            Level.Objects.Add(vesi);
99            vesi.Y = -500;
100            //vesi.Position = new Vector2D(Level.Left,-500);
101            vesi.X = x / 2;
102            MessageDisplay.Add("Nyt on kiire...");
103        }
104
105
106        protected override void Update(GameTime gameTime)
107        {
108            base.Update(gameTime);
109
110            if (aloitaAlusta)
111            {
112                alkuaika = gameTime.TotalGameTime.TotalMilliseconds.ToInt();
113                aloitaAlusta = false; 
114            }
115
116            if (PeliMaalissa || PelaajaKuoli)  return;
117           
118
119            double muutos = gameTime.ElapsedGameTime.Ticks * kameranNopeus;
120            Camera.Position = new Vector2D(Camera.Position.X + muutos, Camera.Position.Y);
121
122            if (pisteLaskuri != null)
123            {
124                pisteLaskuri.Value = (gameTime.TotalGameTime.TotalMilliseconds.ToInt()-alkuaika) / 100;
125            }
126            if (Camera.Position.X > kalle.Position.X + 1000)
127            {
128                kalle.Lifetime.IsExpired = true;
129                MessageDisplay.Add("Hukuit!"); PelaajaKuoli = true;
130                NaytaTop();
131            }
132        }           
133       
134
135        private int LuoTalot()
136        {
137            int x = -100;
138            int w;
139            int h;
140            int dx;
141            Random r = new Random(1);
142
143            for (int i = 0; i < Taloja; i++)
144            {
145                w = r.Next(200, 400); // talon leveys arvotaan kokonaislukuna 200 ja 400 väliltä
146                h = r.Next(50, 200); // talon korkeus arvotaan kokonaislukuna 50 ja 200 väliltä
147                LuoTalo2(x, h - 300, w, 2 * h + 300);
148                dx = 200; // Talojen välinen etäisyys?
149                if (r.Next(100) > 90)
150                    dx = r.Next(100, 250);
151                x += w + dx;
152            }
153            return x;
154        }
155
156        void LuoTalo2(int x, int y, int w, int h)
157        {
158
159            int ac = 255 / 2 - 10, lc = 255 / 2 + 10;
160            Color talonvari = new Color((Byte)RandomGen.NextInt(ac, lc), (Byte)RandomGen.NextInt(ac, lc), (Byte)RandomGen.NextInt(ac, lc));
161
162            Platform talo = new Platform(w, h, talonvari);
163            talo.X = x;
164            talo.Y = y;
165            Level.Objects.Add(talo);
166
167            int nr = RandomGen.NextInt(1, 6); 
168
169            talo.Texture = Content.Load<Texture2D>("talo"+nr);
170            int n = 2;
171            double dx = 1.0 * w / n;
172            double kx = 0;
173
174            for (int i = 0; i < n; i++)
175            {
176                Platform katto = new Platform(1.0 * w / n, 10, Color.Black);
177                katto.X = x + kx - w / 2.0 + dx / 2;
178                ViimeisenTalonX = katto.X;
179               
180                kx += dx;
181                katto.Y = y + h / 2;
182                ViimeisenTalonY = katto.Y; 
183                Level.Objects.Add(katto);
184            }
185       
186        }
187
188        void lisaaNappaimet()
189        {
190            // Pelaajan näppäimet
191            Controls.Listen(Keys.Left, ButtonPosition.Down, liikuta, "Liikkuu vasemmalle", kalle, new Vector2D(-liikeVoima, 0));
192            Controls.Listen(Keys.Right, ButtonPosition.Down, liikuta, "Liikkuu oikealle", kalle, new Vector2D(liikeVoima, 0));
193            Controls.Listen(Keys.Up, ButtonPosition.Pressed, hyppaa, "Hyppää", kalle, (hyppyVoima));
194            Controls.Listen(Keys.F5, ButtonPosition.Pressed, aloitaUusi, "Uusi peli");
195
196
197        }
198
199       
200        bool liikuta(ControlEvent e, PlatformCharacter pelaaja, Vector2D voima)
201        {
202            kalle.Walk(e.Time, voima);
203            return false;
204        }
205       
206       
207        bool hyppaa(ControlEvent e, PlatformCharacter pelaaja, double voima)
208        {
209            pelaaja.Jump(voima);
210            //PlaySound("hyppy3");
211            return false;
212        }
213
214
215   
216       
217        void LuoTalo(int x, int y, int w, int h)
218        {
219
220            int ac=255/2 - 10, lc = 255/2 + 10;
221            Color talonvari = new Color((Byte)RandomGen.NextInt(ac, lc), (Byte)RandomGen.NextInt(ac, lc), (Byte)RandomGen.NextInt(ac, lc));
222               
223            Platform talo = new Platform(w, h, talonvari);
224            talo.X = x;
225            talo.Y = y;
226            Level.Objects.Add(talo);
227
228            int n = 2;
229            double dx = 1.0 * w / n;
230            double kx = 0;
231
232            for (int i = 0; i < n; i++)
233            {
234                Platform katto = new Platform(1.0 * w / n, 10, Color.Black);
235                katto.X = x + kx - w / 2.0 + dx / 2;
236                ViimeisenTalonX = katto.X;
237                kx += dx;
238                katto.Y = y + h / 2;
239                Level.Objects.Add(katto);
240            }
241
242            //double ikkunanKoko = (50);
243            //double ikkunoidenVali = ikkunanKoko / 2;
244            //int ikkunatLukumaaraX = (talo.Width / (ikkunanKoko + ikkunoidenVali)).ToInt() - 1;
245            //int ikkunatLukumaaraY = (talo.Height / (ikkunanKoko + ikkunoidenVali)).ToInt();
246            ////double iY = (talo.Y - (ikkunatLukumaaraY * (ikkunanKoko + ikkunoidenVali) - ikkunoidenVali) / 2) + ikkunanKoko / 2;
247            //double iY = talo.Top - ikkunoidenVali - ikkunanKoko / 2;
248
249            //for (int j = 0; j < ikkunatLukumaaraY; j++)
250            //{
251            //    double iX = (talo.X - (ikkunatLukumaaraX * (ikkunanKoko + ikkunoidenVali) - ikkunoidenVali) / 2) + ikkunanKoko / 2;
252            //    for (int i = 0; i < ikkunatLukumaaraX; i++)
253            //    {
254            //        GameObject ikkuna = new GameObject(Shapes.CreateRectangle(ikkunanKoko, ikkunanKoko));
255            //        ikkuna.X = iX;
256            //        iX += ikkunanKoko + ikkunoidenVali;
257            //        ikkuna.Y = iY;
258            //        ikkuna.Color = Color.DarkGray;
259            //        Level.Objects.Add(ikkuna);
260            //    }
261            //    iY -= ikkunanKoko + ikkunoidenVali;
262            //}
263
264        }
265
266
267        void VeteenTormays(Collision collision)
268        {
269
270            if (collision.Other == vesi)
271            {
272                kalle.Lifetime.IsExpired = true;
273
274                PlaySound("splash");
275                MessageDisplay.Add("Hukuit!"); PelaajaKuoli = true;
276
277                NaytaTop();
278            }
279
280           
281
282
283        }
284 
285        void NaytaTop()
286        {
287            Top10.ScreenList.X = 0;
288            Top10.ScreenList.X = -100;
289            Top10.ScreenList.ItemColor = Color.Red;
290            Top10.ScreenList.BackGroundColor = Color.Black;
291            Top10.CongratulationText = "Onneksi olkoon! Pistemääräsi oli {1}, jolla pääset sijalle {0}!";
292            Top10.Show(pisteLaskuri.ToInt());
293        }
294
295
296        void lisaaMaali()
297        {
298            maali = PhysicsObject.CreateStaticObject(Shapes.CreateCircle(25));
299            maali.Tag = "maali";
300
301            maali.X = ViimeisenTalonX;
302            maali.Y = ViimeisenTalonY + 30;
303            maali.Texture = Content.Load<Texture2D>("viemari");
304            Level.Objects.Add(maali);
305        }
306
307
308        void MaaliinPaasty(Collision collision)
309        {
310            //if (collision.Other == maali && PeliMaalissa == false
311            if (collision.Other == maali && !PeliMaalissa)
312            {
313                PeliMaalissa = true;
314                MessageDisplay.Add("Pelastit kaupungin!!!");
315                ajastin = new Timer();
316                ajastin.Interval = 3;
317                ajastin.Trigger += new Timer.TriggerHandler(UusiPeli);
318                AddTimer(ajastin);
319                ajastin.Start();
320            }
321        }
322
323        void UusiPeli(Timer sender)
324        {
325            if (PelaajaKuoli) return;
326            MessageDisplay.Add("Uusi tulva tuli kaupunkiin!");
327            MessageDisplay.Add("Nyt on kiire...");
328            kalle.X = 0;
329            kalle.Y = 0;
330            PeliMaalissa = false;
331
332            Camera.Position = new Vector2D(0, 0);
333            kameranNopeus += 0.00001;
334            ajastin.Stop();
335        }
336
337        void LuoPistelaskuri()
338        {
339            // Luodaan pistelaskuri
340            pisteLaskuri = new Meter<int>(0, 0, 1000000);
341
342            // luodaan pistelaskunäyttö
343            pisteNaytto = new ValueDisplay(this);
344            pisteNaytto.Text = "Pisteitä: ";
345            pisteNaytto.X = Screen.RightSafe - 250;
346            pisteNaytto.Y = Screen.TopSafe - 50;
347            pisteNaytto.BindTo(pisteLaskuri);
348            Add(pisteNaytto);    // lisätään peliin
349        }
350
351
352    }
353}
Note: See TracBrowser for help on using the repository browser.