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

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