source: 2013/27/AkseliJ/Levypallo/Levypallo/Levypallo/Levypallo.cs @ 4457

Revision 4457, 10.5 KB checked in by akansaja, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10namespace Levypallo
11{
12    public class Levypallo : PhysicsGame
13    {
14        //Muuttuvat muuttujat
15
16        private Label taulu;
17        public Label Pistetaulu { get { return taulu; } set { taulu = value; } }
18        internal PhysicsObject pallo;
19        int Score;
20        Kuutio[,] kentta;
21        internal static Levypallo instance;
22        internal PhysicsObject levy;
23        internal bool palloKiinni = true;
24        public int elamat;
25        public int taso = 0;
26        private double previousY;
27
28        //Vakiot
29
30        internal static readonly Vector Tekstin_koko = new Vector(2, 2);
31        internal static readonly double Pallon_nopeus = 424.26;
32        //UNUSED
33        public static readonly Image Pallon_kuva1 = LoadImage("1288501358361");
34
35        public override void Begin()
36        {
37            instance = this;
38
39            AsetaKontrolliKuuntelijat();
40            AsetaPerusKuuntelijat();
41            elamat = 3;
42            ValmisteleTausta();
43            MediaPlayer.Play("loverush");
44            MediaPlayer.IsRepeating = true;
45            LuoPallo();
46            AsetaFysiikkaKuuntelijat();
47            LuoLevy();
48            LuoKentta();
49
50            //Gravity = new Vector(0, -150);
51
52
53        }
54        private void Aloita()
55        {
56
57            elamat = 3;
58            TyhjennaKentta();
59            ValmisteleTausta();
60            LuoPallo();
61            AsetaFysiikkaKuuntelijat();
62            LuoLevy();
63            LuoKentta();
64
65        }
66
67        private void TyhjennaKentta()
68        {
69            kentta = null;
70            ClearGameObjects();
71           
72        }
73
74        protected override void Update(Time time)
75        {
76            base.Update(time);
77            taulu.Text = "Taso: " + ((int)(taso + 1)) + "\nLEVYPALLO SCORE: \n" + Score.ToString() + "\n" + "Elämiä jäljellä:\n" + elamat;
78            if (!palloKiinni)
79            {
80                pallo.CanRotate = true;
81                pallo.Velocity = pallo.Velocity.Normalize() * Pallon_nopeus;
82            }
83            else
84            {
85                pallo.Velocity = levy.Velocity;
86                pallo.StopAngular();
87                pallo.Angle = Angle.Zero;
88
89            }
90            if (pallo.Y <= Level.Bottom + 30)
91            {
92
93                palloKiinni = true;
94                pallo.X = levy.X;
95                pallo.Y = Level.Bottom + 70;
96                pallo.IgnoresCollisionResponse = true;
97                elamat--;
98            }
99           
100            previousY = pallo.Y;
101            taulu.Text = "Taso: " +((int)( taso + 1 ))+ "\nLEVYPALLO SCORE: \n" + Score.ToString() + "\n" + "Elämiä jäljellä:\n" + elamat;
102
103            if (elamat <= 0)
104            {
105                Label l = new Label(600, 400, "Game Over");
106                l.TextScale = new Vector(6, 6);
107                l.TextColor = Color.White;
108                MessageDisplay.Add(ArvioiTulos());
109                Add(l);
110                Pause();
111
112
113            }
114
115        }
116
117        private string ArvioiTulos()
118        {
119            return "Sait "+Score+" pistettä.";
120        }
121
122        private void AsetaFysiikkaKuuntelijat()
123        {
124            AddCollisionHandler<PhysicsObject, Kuutio>(pallo, "kuutio", KuutioonIskee);
125        }
126
127        private void KuutioonIskee(PhysicsObject bollen, Kuutio k)
128        {
129            Score += (int)(50 + (0.5 * ((double)taso)));
130            k.health--;
131
132            Explosion kaboom = new Explosion(100);
133            kaboom.X = k.X;
134            kaboom.Y = k.Y;
135            kaboom.UseShockWave = false;
136            Add(kaboom);
137            if (k.health > 0)
138            {
139                k.Color = Kuutio.healthvarit[k.health - 1];
140            }
141            if (k.health <= 0)
142            {
143
144                k.Destroy();
145                kentta[k.x, k.y] = null;
146               
147                for (int i = 0; i < kentta.GetLength(0); i++)
148                {
149                    for (int j = 0; j < kentta.GetLength(1); j++)
150                    {
151                        if (kentta[i, j] != null)
152                        {
153                           
154                            return;
155                        }
156                    }
157                }
158                if (taso >= 2) {
159
160                    Label l = new Label(600, 400, "Onneksi olkoon!\nLäpäisit pelin!");
161                    l.TextScale = new Vector(6, 6);
162                    l.TextColor = Color.Pink;
163                    Add(l);
164                    MessageDisplay.Add(ArvioiTulos());
165                    Pause();
166
167               
168                }
169                taso++;
170                TyhjennaKentta();
171                Aloita();
172               
173            }
174        }
175
176        private void AsetaKontrolliKuuntelijat()
177        {
178            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Down, NappiYlos, "Liiku vasemmalle", Key.Left, ButtonState.Down);
179            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Down, NappiYlos, "Liiku oikealle", Key.Right, ButtonState.Down);
180            Keyboard.Listen<Key, ButtonState>(Key.Space, ButtonState.Pressed, NappiYlos, "Laukaise pallo", Key.Space, ButtonState.Pressed);
181            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Up, NappiYlos, null, Key.Right, ButtonState.Up);
182            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Up, NappiYlos, null, Key.Left, ButtonState.Up);
183            Keyboard.Listen<Key, ButtonState>(Key.K, ButtonState.Pressed, NappiYlos, "Palauta pallo lähtöalustalle (maksaa yhden elämän)", Key.K, ButtonState.Pressed);
184            ShowControlHelp();
185        }
186
187        private void LuoLevy()
188        {
189            //Oletusleveys 250
190            double leveys = 250 - 50 * taso;
191            levy = PhysicsObject.CreateStaticObject(leveys, 40);
192            levy.Color = Color.Yellow;
193            levy.X = 0;
194            levy.Y = -375;
195            levy.Restitution = 1.1;
196            levy.Tag = "levy";
197            Add(levy);
198
199        }
200
201        private void NappiYlos(Key nappi, ButtonState tila)
202        {
203
204            if (tila == ButtonState.Down)
205            {
206
207                if (nappi == Key.Left)
208                {
209                    if (levy.Left - 5 < Level.Left) ;
210                    else
211                        levy.Velocity = new Vector(-380, 0);
212                    return;
213
214                }
215                else if (nappi == Key.Right)
216                {
217
218                    if (levy.Right > Level.Right) ;
219
220                    else
221                    {
222                        levy.Velocity = new Vector(380, 0);
223                        return;
224                    }
225
226                }
227
228
229            }
230            if (tila == ButtonState.Pressed)
231            {
232
233                if (nappi == Key.Space && palloKiinni)
234                {
235                    palloKiinni = false;
236                    pallo.IgnoresCollisionResponse = false;
237                    bool rnd = RandomGen.NextBool();
238                    if (rnd) pallo.Velocity = new Vector(300, 300);
239                    else pallo.Velocity = new Vector(-300, 300);
240                }
241                else if (nappi == Key.K && !palloKiinni)
242                {
243
244                    palloKiinni = true;
245                    //pallo.X = levy.X;
246                    pallo.Y = Level.Bottom + 70;
247                    pallo.IgnoresCollisionResponse = true;
248                    elamat--;
249                    /*Label l = new Label(600, 400, "Onneksi olkoon!\nLäpäisit pelin!");
250                    l.TextScale = new Vector(6, 6);
251                    l.TextColor = Color.Pink;
252                    Add(l);
253                    MessageDisplay.Add(ArvioiTulos());
254                    Pause();*/
255                   
256                }
257
258
259
260            }
261
262            levy.Velocity = Vector.Zero;
263
264        }
265
266        private void LuoKentta()
267        {
268            //double KentanTilavuus = Level.Height - 100 / 100 * Level.Width / 100;
269            int korkeus = (((int)Level.Height - 200) / 100);
270            int leveys = ((int)Level.Width / 100);
271            kentta = new Kuutio[korkeus, leveys];
272            for (int i = 0; i < kentta.GetLength(0); i++)
273            {
274                for (int j = 0; j < kentta.GetLength(1); j++)
275                {
276
277                    int exists = RandomGen.NextInt(0, 3);
278                    if (exists != 0)
279                    {
280
281
282
283                        kentta[i, j] = new Kuutio(((int)Level.Bottom / 100) + i, (((int)Level.Left / 100) + j), RandomGen.NextInt(1, 6), i, j);
284                    }
285                    else kentta[i, j] = null;
286
287
288                }
289            }
290
291        }
292
293        private void LuoPallo()
294        {
295            pallo = new PhysicsObject(50, 50);
296            pallo.Color = Color.YellowGreen;
297            pallo.Y = Level.Bottom + 70;
298            pallo.X = 0;
299            pallo.Shape = Shape.Circle;
300            pallo.Restitution = 1.5;
301            pallo.IgnoresGravity = true;
302            pallo.Tag = "pallo";
303            pallo.IgnoresCollisionResponse = true;
304            pallo.IgnoresExplosions = true;
305            palloKiinni = true;
306            Add(pallo);
307        }
308
309        private void ValmisteleTausta()
310        {
311            Level.Background.CreateStars(200);
312            Level.CreateBorders(true);
313            Camera.ZoomToLevel();
314            taulu = new Label(400, 400);
315            taulu.Y = Screen.Top - 70;
316            //taulu.X:n paras arvo tähän asti on 325
317            taulu.X = Screen.Right - 325;
318            taulu.TextColor = Color.YellowGreen;
319            taulu.TextScale = Tekstin_koko;
320            Add(taulu);
321
322        }
323
324        private void AsetaPerusKuuntelijat()
325        {
326
327            PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
328            Keyboard.Listen(Key.Escape, ButtonState.Pressed, VarmistaPoistuminenPausella, "Lopeta peli");
329
330        }
331
332        void VarmistaPoistuminenPausella()
333        {
334            this.IsPaused = true;
335            MediaPlayer.Stop();
336
337            MultiSelectWindow ikkuna = new MultiSelectWindow("Lopetetaanko?", "Kyllä", "Ei");
338            ikkuna.AddItemHandler(0, Exit);
339            ikkuna.AddItemHandler(1, delegate { MediaPlayer.Resume(); this.IsPaused = false; });
340            Add(ikkuna);
341
342        }
343
344
345    }
346
347
348}
Note: See TracBrowser for help on using the repository browser.