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

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