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

Revision 4469, 10.6 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                MediaPlayer.Play("gigapudding");
111                Pause();
112               
113
114
115            }
116
117        }
118
119        private string ArvioiTulos()
120        {
121            return "Sait "+Score+" pistettä.";
122        }
123
124        private void AsetaFysiikkaKuuntelijat()
125        {
126            AddCollisionHandler<PhysicsObject, Kuutio>(pallo, "kuutio", KuutioonIskee);
127        }
128
129        private void KuutioonIskee(PhysicsObject bollen, Kuutio k)
130        {
131            Score += (int)(50 + (0.5 * ((double)taso)));
132            k.health--;
133
134            Explosion kaboom = new Explosion(100);
135            kaboom.X = k.X;
136            kaboom.Y = k.Y;
137            kaboom.UseShockWave = false;
138            Add(kaboom);
139            if (k.health > 0)
140            {
141                k.Image = Kuutio.healthvarit[k.health - 1];
142            }
143            if (k.health <= 0)
144            {
145
146                k.Destroy();
147                kentta[k.x, k.y] = null;
148               
149                for (int i = 0; i < kentta.GetLength(0); i++)
150                {
151                    for (int j = 0; j < kentta.GetLength(1); j++)
152                    {
153                        if (kentta[i, j] != null)
154                        {
155                           
156                            return;
157                        }
158                    }
159                }
160                if (taso >= 2) {
161
162                    Label l = new Label(600, 400, "Onneksi olkoon!\nLäpäisit pelin!");
163                    l.TextScale = new Vector(6, 6);
164                    l.TextColor = Color.Pink;
165                    Add(l);
166                    MessageDisplay.Add(ArvioiTulos());
167                    MediaPlayer.Play("gigapudding");
168                    Pause();
169
170               
171                }
172                taso++;
173                TyhjennaKentta();
174                Aloita();
175               
176            }
177        }
178
179        private void AsetaKontrolliKuuntelijat()
180        {
181            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Down, NappiYlos, "Liiku vasemmalle", Key.Left, ButtonState.Down);
182            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Down, NappiYlos, "Liiku oikealle", Key.Right, ButtonState.Down);
183            Keyboard.Listen<Key, ButtonState>(Key.Space, ButtonState.Pressed, NappiYlos, "Laukaise pallo", Key.Space, ButtonState.Pressed);
184            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Up, NappiYlos, null, Key.Right, ButtonState.Up);
185            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Up, NappiYlos, null, Key.Left, ButtonState.Up);
186            Keyboard.Listen<Key, ButtonState>(Key.K, ButtonState.Pressed, NappiYlos, "Palauta pallo lähtöalustalle (maksaa yhden elämän)", Key.K, ButtonState.Pressed);
187            ShowControlHelp();
188        }
189
190        private void LuoLevy()
191        {
192            //Oletusleveys 250
193            double leveys = 250 - 50 * taso;
194            levy = PhysicsObject.CreateStaticObject(leveys, 40);
195            levy.Color = Color.Yellow;
196            levy.X = 0;
197            levy.Y = -375;
198            levy.Restitution = 1.1;
199            levy.Tag = "levy";
200            Add(levy);
201
202        }
203
204        private void NappiYlos(Key nappi, ButtonState tila)
205        {
206
207            if (tila == ButtonState.Down)
208            {
209
210                if (nappi == Key.Left)
211                {
212                    if (levy.Left - 5 < Level.Left) ;
213                    else
214                        levy.Velocity = new Vector(-400, 0);
215                    return;
216
217                }
218                else if (nappi == Key.Right)
219                {
220
221                    if (levy.Right > Level.Right) ;
222
223                    else
224                    {
225                        levy.Velocity = new Vector(400, 0);
226                        return;
227                    }
228
229                }
230
231
232            }
233            if (tila == ButtonState.Pressed)
234            {
235
236                if (nappi == Key.Space && palloKiinni)
237                {
238                    palloKiinni = false;
239                    pallo.IgnoresCollisionResponse = false;
240                    bool rnd = RandomGen.NextBool();
241                    if (rnd) pallo.Velocity = new Vector(300, 300);
242                    else pallo.Velocity = new Vector(-300, 300);
243                }
244                else if (nappi == Key.K && !palloKiinni)
245                {
246
247                    palloKiinni = true;
248                    //pallo.X = levy.X;
249                    pallo.Y = Level.Bottom + 70;
250                    pallo.IgnoresCollisionResponse = true;
251                    elamat--;
252                    /*Label l = new Label(600, 400, "Onneksi olkoon!\nLäpäisit pelin!");
253                    l.TextScale = new Vector(6, 6);
254                    l.TextColor = Color.Pink;
255                    Add(l);
256                    MessageDisplay.Add(ArvioiTulos());
257                    Pause();*/
258                   
259                }
260
261
262
263            }
264
265            levy.Velocity = Vector.Zero;
266
267        }
268
269        private void LuoKentta()
270        {
271            //double KentanTilavuus = Level.Height - 100 / 100 * Level.Width / 100;
272            int korkeus = (((int)Level.Height - 200) / 100);
273            int leveys = ((int)Level.Width / 100);
274            kentta = new Kuutio[korkeus, leveys];
275            for (int i = 0; i < kentta.GetLength(0); i++)
276            {
277                for (int j = 0; j < kentta.GetLength(1); j++)
278                {
279
280                    int exists = RandomGen.NextInt(0, 3);
281                    if (exists != 0)
282                    {
283
284
285
286                        kentta[i, j] = new Kuutio(((int)Level.Bottom / 100) + i, (((int)Level.Left / 100) + j), RandomGen.NextInt(1, 6), i, j);
287                    }
288                    else kentta[i, j] = null;
289
290
291                }
292            }
293
294        }
295
296        private void LuoPallo()
297        {
298            pallo = new PhysicsObject(50, 50);
299            pallo.Color = Color.YellowGreen;
300            pallo.Y = Level.Bottom + 70;
301            pallo.X = 0;
302            pallo.Shape = Shape.Circle;
303            pallo.Restitution = 1.5;
304            pallo.IgnoresGravity = true;
305            pallo.Tag = "pallo";
306            pallo.IgnoresCollisionResponse = true;
307            pallo.IgnoresExplosions = true;
308            palloKiinni = true;
309            Add(pallo);
310        }
311
312        private void ValmisteleTausta()
313        {
314            Level.Background.CreateStars(200);
315            Level.CreateBorders(true);
316            Camera.ZoomToLevel();
317            taulu = new Label(400, 400);
318            taulu.Y = Screen.Top - 70;
319            //taulu.X:n paras arvo tähän asti on 325
320            taulu.X = Screen.Right - 325;
321            taulu.TextColor = Color.YellowGreen;
322            taulu.TextScale = Tekstin_koko;
323            Add(taulu);
324
325        }
326
327        private void AsetaPerusKuuntelijat()
328        {
329
330            PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
331            Keyboard.Listen(Key.Escape, ButtonState.Pressed, VarmistaPoistuminenPausella, "Lopeta peli");
332
333        }
334
335        void VarmistaPoistuminenPausella()
336        {
337            this.IsPaused = true;
338            MediaPlayer.Pause();
339
340            MultiSelectWindow ikkuna = new MultiSelectWindow("Lopetetaanko?", "Kyllä", "Ei");
341            ikkuna.AddItemHandler(0, Exit);
342            ikkuna.AddItemHandler(1, delegate { MediaPlayer.Resume(); this.IsPaused = false; });
343            Add(ikkuna);
344
345        }
346
347
348    }
349
350
351}
Note: See TracBrowser for help on using the repository browser.