source: 2009/aleksi_p/MR Ball/Peli.cs @ 1618

Revision 183, 12.2 KB checked in by alpitkan, 10 years ago (diff)
Line 
1#region Usings
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Jypeli;
12using Jypeli.ScreenObjects;
13using Jypeli.Assets;
14using AdvanceMath;
15using Physics2DDotNet;
16using Physics2DDotNet.Shapes;
17#endregion
18
19namespace MR_Ball
20{
21    public class Peli : PhysicsGame
22    {
23        ValueDisplay pisteNaytto;
24        Meter<int> pistelaskuri;
25        PhysicsObject maali;
26        Meter<int> elamalaskuri;  // pitää yllä pisteitä
27        ValueDisplay elamaNaytto;  // näyttää pisteet
28        PhysicsObject pallo;
29       
30
31        int kentanNro = 1;
32       
33        protected override void LoadContent()
34        {
35           
36            MessageDisplay.TextColor = Color.White;
37            LisaaNaytot();
38            AloitaPeli();
39        }
40
41        private void LisaaNaytot()
42        {
43            pistelaskuri = new Meter<int>(0, 0, 2);
44            pistelaskuri.UpperLimit += new Meter<int>.OnLimitHandler(Tavoitepistemaarasaavutettu);
45            pisteNaytto = new ValueDisplay(this); // luodaan elamaNaytto
46            pisteNaytto.HorizontalOrigin = HorizontalAlignment.Left;   // asetetaan pisteNayton nollakohdaksi vasen reuna
47            pisteNaytto.VerticalOrigin = VerticalAlignment.Top; // ja yläreuna
48            pisteNaytto.Text = "palloja kerätty :"; // teksti, jonka näyttö näyttää
49            pisteNaytto.X = Screen.RightSafe - 350;  // asetetaan pistenäytön x-koordinaatiksi ruudun oikea reuna, josta on vähennetty 250 pikseliä, jotta näyttö sopii ruudulle
50            pisteNaytto.Y = Screen.TopSafe - 30;  // asetetaan pistenäytön y-koordinaatiksi ruudun yläreuna
51            pisteNaytto.BindTo(pistelaskuri);// liitetään pisteNaytto pistelaskuriin
52            Add(pisteNaytto);
53            pisteNaytto.TextColor = Color.White;
54            pisteNaytto.ValueColor = Color.White;
55
56            elamalaskuri = new Meter<int>(0, 0, 3); // oletusarvona on 0, minimiarvona on myös 0 ja maksimiarvona on 100.
57            elamalaskuri.UpperLimit += new Meter<int>.OnLimitHandler(ElamatLoppuneet);  // liitetään tapahtuma, kun maksimiarvo on saavutettu eli kun 3 on täynnä
58            elamaNaytto = new ValueDisplay(this); // luodaan elamaNaytto
59            elamaNaytto.HorizontalOrigin = HorizontalAlignment.Left;   // asetetaan pisteNayton nollakohdaksi vasen reuna
60            elamaNaytto.VerticalOrigin = VerticalAlignment.Top; // ja yläreuna
61            elamaNaytto.Text = "Elämiä käytetty (max 3): "; // teksti, jonka näyttö näyttää
62            elamaNaytto.X = Screen.RightSafe - 350;  // asetetaan pistenäytön x-koordinaatiksi ruudun oikea reuna, josta on vähennetty 250 pikseliä, jotta näyttö sopii ruudulle
63            elamaNaytto.Y = Screen.TopSafe;  // asetetaan pistenäytön y-koordinaatiksi ruudun yläreuna
64            elamaNaytto.BindTo(elamalaskuri);// liitetään pisteNaytto pistelaskuriin
65            Add(elamaNaytto);
66            elamaNaytto.TextColor = Color.White;
67            elamaNaytto.ValueColor = Color.White;
68        }
69
70        private void AloitaPeli()
71        {
72           
73            pistelaskuri.Value = 0;
74            LuoPelaaja();
75
76            Level kentta = new Level(this);
77            kentta.BackgroundColor = Color.PapayaWhip;
78            kentta.Background.Image = Content.Load<Texture2D>("asfaltti3");
79            kentta.Objects.Add(pallo);
80            Level = kentta;
81            pallo.Color = Color.Red;
82            kentta.CreateBorder(1.0, false);
83            LisaaTasot(kentta);
84            Camera.Follow(pallo);
85           
86
87
88
89            asetaohjaimet();
90        }
91
92        private void LisaaTasot(Level kentta)
93        {
94            lisaaMaali(kentta);
95            if (kentanNro == 1)
96            {
97                lisaapienitaso(kentta, 250, -10, 0);
98                lisaapienitaso(kentta, 250, 75, 0);
99                lisaapienitaso(kentta, 400, 75, 0);
100                lisaapienitaso(kentta, 400, -10, 0);
101                lisaapienitaso(kentta, 550, 75, 0);
102                lisaapienitaso(kentta, 550, -10, 0);
103                lisaapaaty(kentta, 635, 33, 0);
104                lisaapienitaso(kentta, -550, -30, 0);
105                lisaapienitaso(kentta, -550, 90, 0);
106                lisaapaaty(kentta, 635, 43, 0);
107                lisaapaaty(kentta, 630, 23, 0);
108
109                lisaaesine(kentta, 0, -450);
110                lisaaesine(kentta, 0, 450);
111                }
112
113            if (kentanNro == 2)
114            {
115                lisaapienitaso(kentta, 250, -10, 0);
116                lisaapienitaso2(kentta, 320, -75, 0);
117                lisaapienitaso(kentta, 0, -10, 0);
118                lisaapienitaso(kentta, 0, 80, 0);
119                lisaapienitaso(kentta, 235, -140, 0);
120                lisaapienitaso(kentta, 150, 80, 0);
121                lisaapienitaso(kentta, 300, 80, 0);
122                lisaapienitaso(kentta, 450, 80, 0);
123                lisaapienitaso(kentta, 600, 80, 0);
124                lisaapienitaso(kentta, 405, -10, 0);
125                lisaapienitaso(kentta, 555, -10, 0);
126                lisaapienitaso(kentta, 645, -10, 0);
127                lisaapienitaso(kentta, 95, -140, 0);
128                lisaapienitaso(kentta, 95, -140, 10);
129                lisaapienitaso(kentta, 0, -140, 0);
130                lisaapaaty(kentta, -65, -90, 0);
131                lisaapaaty(kentta, -150, -90, 0);
132                lisaapaaty(kentta, -150, -175, 0);
133                lisaapaaty(kentta, -150, -245, 0);
134                lisaapaaty(kentta, -65, -190, 0);
135                lisaapaaty(kentta, -65, -246, 0);
136                lisaapienitaso2(kentta, -65, -310, 0);
137                lisaapienitaso2(kentta, -150, -310, 0);
138                lisaapienitaso2(kentta, -65, -450, 0);
139                lisaapienitaso2(kentta, -150, -450, 0);
140                lisaapienitaso(kentta, -130, 80, 0);
141                lisaapienitaso(kentta, -215, -40, 0);
142                lisaapienitaso(kentta, -365, -40, 0);
143                lisaapienitaso(kentta, -460, -40, 0);
144                lisaapienitaso(kentta, -590, -40, 0);
145                lisaapienitaso(kentta, -460, 80, 0);
146                lisaapienitaso(kentta, -590, 80, 0);
147                lisaapienitaso(kentta, -365, 80, 0);
148                lisaapienitaso(kentta, -215, 80, 0);
149                lisaapaaty(kentta, -65, -42, 0);
150               
151                lisaaesine(kentta, -110, -460);
152                lisaaesine(kentta, 250, -70);
153            }
154        }
155
156        private void LuoPelaaja()
157        {
158            IShape ympyra = Shapes.CreateCircle(20.0);
159            pallo = new PhysicsObject(10.0, ympyra);
160            pallo.X = 595.0;
161            pallo.Y = 34.0;
162            pallo.Restitution = 1.0;
163            AddCollisionHandler(pallo, PalloTormaaSeinaan);
164            AddCollisionHandler(pallo, KaveriTormaa);
165        }
166
167        void pistelaskuri_UpperLimit(Meter<int> sender)
168        {
169       
170        }
171
172        private void lisaaesine(Level kentta, Double x, Double y)
173        {   
174           
175            IShape kaveri = Shapes.CreateCircle(20.0);
176                PhysicsObject kerattava = new PhysicsObject(0.005, kaveri);
177                kerattava.Tag = "kerattava";
178                kerattava.X = x;
179                kerattava.Y = y;
180                kentta.Objects.Add(kerattava);
181                kerattava.Color = new Color((Byte)RandomGen.NextInt(0, 255), (Byte)RandomGen.NextInt(0, 255), (Byte)RandomGen.NextInt(0, 255));
182        }
183
184        private void Keksi()
185        {
186            pallo.Hit(new Vector2D(2500, 0));
187        }
188        void asetaohjaimet()
189        {
190            Controls.Listen(Keys.Right, ButtonPosition.Down, liikutapalloa, "pelaaja 1: liikuta palloa oikealle", pallo, 25, 0);
191            Controls.Listen(Keys.Left, ButtonPosition.Down, liikutapalloa, "pelaaja 1: liikuta palloa vasemmalle", pallo, -25, 0);
192            Controls.Listen(Keys.Up, ButtonPosition.Down, liikutapalloa, "pelaaja 1: liikuta palloa ylös", pallo, 0, 25);
193            Controls.Listen(Keys.Down, ButtonPosition.Down, liikutapalloa, "pelaaja 1: liikuta palloa alas", pallo, 0, -25);
194
195            Controls.Listen(Buttons.LeftThumbstickDown, ButtonPosition.Irrelevant, liikutapalloaanalogisesti, "pelaaja 1: liikuta palloa oikealle", pallo);
196           
197   
198        }
199        bool liikutapalloa(ControlEvent e)
200        {
201            PhysicsObject pallo = e.Parameter0.ToPhysicsObject();
202            double xnopeus = e.Parameter1.ToDouble();
203            double ynopeus = e.Parameter2.ToDouble();
204            double sekuntejakulunut = e.Time.ElapsedGameTime.TotalSeconds;
205            Vector2D impulssi = new Vector2D(xnopeus, ynopeus);
206            pallo.Hit(impulssi);
207            return false;
208        }
209        bool liikutapalloaanalogisesti(ControlEvent e)
210        {
211            PhysicsObject pallo = e.Parameter0.ToPhysicsObject();
212            double xnopeus = 10*e.AnalogVector.X;
213            double ynopeus = 10*e.AnalogVector.Y;
214            double sekuntejakulunut = e.Time.ElapsedGameTime.TotalSeconds;
215            Vector2D impulssi = new Vector2D(xnopeus, ynopeus);
216            pallo.Hit(impulssi);
217            return false;
218        }
219
220
221        void pallonnopeus()
222        {
223       
224        }
225        void lisaapienitaso(Level kentta, double x, double y, double kulma)
226        {
227            Platform taso = new Platform(150, 20, Color.Silver);
228            taso.X = x;
229            taso.Y = y;
230            kentta.Objects.Add(taso);
231        }
232
233        void lisaapienitaso2(Level kentta, double x, double y, double kulma)
234        {
235            Platform taso = new Platform(20, 150, Color.Silver);
236            taso.X = x;
237            taso.Y = y;
238            kentta.Objects.Add(taso);
239        }
240
241        void lisaapaaty(Level kentta, double x, double y, double kulma)
242        {
243            Platform taso = new Platform(20, 85, Color.Silver);
244            taso.X = x;
245            taso.Y = y;
246            kentta.Objects.Add(taso);
247        }
248
249        void PalloTormaaSeinaan(Collision collision)
250        {
251            // Tarkistaa, että objekti johon törmätään, on seinä
252            if (collision.Other is Platform || collision.Other == this.Level.TopBorder || collision.Other == this.Level.RightBorder || collision.Other == this.Level.LeftBorder || collision.Other == this.Level.BottomBorder)
253            {
254                MessageDisplay.Add("osuit seinään, LOL");
255                elamalaskuri.Value++;
256            }
257        }
258
259        void KaveriTormaa(Collision collision)
260        {
261            if (collision.Other.Tag == "kerattava")
262            {
263                collision.Other.Lifetime.IsExpired = true;
264                pistelaskuri.Value++;
265            }
266        }
267
268        void ElamatLoppuneet(Meter<int> po)
269        {
270            //kentanNro = 1;
271            AloitaPeli();
272            MessageDisplay.Add("elämät loppuivat aloita alusta, NOOB");
273            elamalaskuri.Reset();
274        }
275
276        void siirraPalloAlkuun()
277        {
278            pallo.X = 600.0;
279            pallo.Y = 34.0;
280        }
281        void lisaaMaali(Level kentta)
282        {
283         
284            maali = PhysicsObject.CreateStaticObject(Shapes.CreateRectangle(40,100));
285            maali.Tag = "maali";
286            maali.IgnoresCollisionResponse = true;
287           
288            maali.X = -605;
289            maali.Y = 30;
290            //maali.Texture = Content.Load<Texture2D>("tahti");
291            kentta.Objects.Add(maali);
292            maali.Color = Color.Yellow;
293        }
294        void saapuumaaliin(Collision collision)
295        {
296            kentanNro++;
297            AloitaPeli();
298            MessageDisplay.Add("pääsit kentän läpi, PRO");
299           
300        }
301        void Tavoitepistemaarasaavutettu(Meter<int> po)
302        {
303            MessageDisplay.Add("pistemäärä on saavutettu. suuntaa kohti maalia!");    // näytetään viestinäytöllä viesti
304            AddCollisionHandler(maali, saapuumaaliin);
305        }
306       
307       
308
309       
310       
311           
312       
313
314
315    }
316
317
318}
319
320
321
322
323
324
325
326
327
Note: See TracBrowser for help on using the repository browser.