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

Revision 4406, 8.7 KB checked in by akansaja, 9 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 = 3;
25
26        //Vakiot
27
28        internal static readonly Vector Tekstin_koko = new Vector(2, 2);
29        internal static readonly double Pallon_nopeus = 424.26;
30        //UNUSED
31        public static readonly Image Pallon_kuva1 = LoadImage("1288501358361");
32
33        public override void Begin()
34        {
35            instance = this;
36
37            AsetaPerusKuuntelijat();
38            ValmisteleTausta();
39            LuoPallo();
40            LuoLevy();
41            LuoKentta();
42            AsetaFysiikkaKuuntelijat();
43            AsetaKontrolliKuuntelijat();
44            Gravity = new Vector(0, -150);
45
46
47        }
48
49        protected override void Update(Time time)
50        {
51            base.Update(time);
52            taulu.Text = "LEVYPALLO SCORE: \n" + Score.ToString()+"\n"+"Elämiä jäljellä:\n"+elamat;
53            if (!palloKiinni)
54            {
55                pallo.CanRotate = true;
56                pallo.Velocity = pallo.Velocity.Normalize() * Pallon_nopeus;
57            }
58            else { pallo.Velocity = levy.Velocity;
59            pallo.StopAngular();
60            pallo.Angle = Angle.Zero;
61           
62            }
63            if (pallo.Y <= Level.Bottom + 30) {
64
65                palloKiinni = true;
66                pallo.X = levy.X;
67                pallo.Y = Level.Bottom + 70;
68                pallo.IgnoresCollisionResponse = true;
69                elamat--;
70            }
71           
72            if (elamat <= 0)
73            {
74                Label l = new Label(600, 400, "Game Over");
75                l.TextScale = new Vector(6, 6);
76                l.TextColor = Color.White;
77                MessageDisplay.Add(ArvioiTulos());
78                Add(l);
79                Pause();
80               
81           
82            }
83           
84        }
85
86        private string ArvioiTulos()
87        {
88            if (Score < 1000)
89                return "EI VOI OLLA TOTTA! Vain "+Score+" pistettä!?!?! Miten se on mahdollista?";
90
91            else if (Score < 2000)
92
93                return Score + " pisteitä ei ole kovin häävi. Yritä kuitenkin uudelleen!";
94
95
96
97            else if (Score > 4000) {
98
99                return "Vaikuttavaa! Mistä sait nuo taidot? "+Score+" on aika hyvä tulos :)";
100            }
101            else if (Score > 8000) {
102
103                return "ANTAKAA APLODIT UUDELLE LEVYPALLOMESTARILLE! "+Score+" PISTETTÄ!";
104           
105            }
106
107                return "Hmm... Ihan ok - "+Score+" pistettä.";
108        }
109
110        private void AsetaFysiikkaKuuntelijat()
111        {
112            AddCollisionHandler(pallo, "kuutio", KuutioonIskee);
113        }
114
115        private void KuutioonIskee(PhysicsObject bollen, PhysicsObject kuutio)
116        {
117
118            if (kuutio is Kuutio)
119            {
120
121                Score += 50;
122                Kuutio cube = kuutio as Kuutio;
123                cube.health--;
124
125               
126
127                Explosion KABOOOOOOOOOOM = new Explosion(100);
128                KABOOOOOOOOOOM.X = cube.X;
129                KABOOOOOOOOOOM.Y = cube.Y;
130                KABOOOOOOOOOOM.UseShockWave = false;
131                Add(KABOOOOOOOOOOM);
132                if (cube.health <= 0) cube.Destroy();
133
134
135                if(cube.health > 0)
136                cube.Color = Kuutio.healthvarit[cube.health - 1];
137
138
139            }
140        }
141
142        private void AsetaKontrolliKuuntelijat()
143        {
144            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Down, NappiYlos, null, Key.Left, ButtonState.Down);
145            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Down, NappiYlos, null, Key.Right, ButtonState.Down);
146            Keyboard.Listen<Key, ButtonState>(Key.Space, ButtonState.Pressed, NappiYlos, null, Key.Space, ButtonState.Pressed);
147            Keyboard.Listen<Key, ButtonState>(Key.Right, ButtonState.Up, NappiYlos, null, Key.Right, ButtonState.Up);
148            Keyboard.Listen<Key, ButtonState>(Key.Left, ButtonState.Up, NappiYlos, null, Key.Left, ButtonState.Up);
149            Keyboard.Listen<Key, ButtonState>(Key.K, ButtonState.Pressed, NappiYlos, null, Key.K, ButtonState.Pressed);
150        }
151
152        private void LuoLevy()
153        {
154            //Oletusleveys 250
155            levy = PhysicsObject.CreateStaticObject(250, 40);
156            levy.Color = Color.Yellow;
157            levy.X = 0;
158            levy.Y = -375;
159            levy.Restitution = 1.1;
160            levy.Tag = "levy";
161            Add(levy);
162           
163        }
164
165        private void NappiYlos(Key nappi, ButtonState tila) {
166
167            if (tila == ButtonState.Down) {
168
169                if (nappi == Key.Left) {
170                    if (levy.Left - 5 < Level.Left) ;
171                    else
172                    levy.Velocity = new Vector(-325, 0);
173                    return;
174               
175                }
176                else if (nappi == Key.Right) {
177
178                    if (levy.Right > Level.Right) ;
179                    else
180                    {
181                        levy.Velocity = new Vector(325, 0);
182                        return;
183                    }
184               
185                }
186           
187           
188            }
189            if (tila == ButtonState.Pressed)
190            {
191
192                if (nappi == Key.Space && palloKiinni)
193                {
194                    palloKiinni = false;
195                    pallo.IgnoresCollisionResponse = false;
196                    bool rnd = RandomGen.NextBool();
197                    if (rnd) pallo.Velocity = new Vector(300, 300);
198                    else pallo.Velocity = new Vector(-300, 300);
199                }
200                else if (nappi == Key.K && !palloKiinni) {
201
202                    palloKiinni = true;
203                    pallo.X = levy.X;
204                    pallo.Y = Level.Bottom + 70;
205                    pallo.IgnoresCollisionResponse = true;
206                    elamat--;
207               
208                }
209               
210               
211               
212            }
213
214            levy.Velocity = Vector.Zero;
215       
216        }
217
218        private void LuoKentta()
219        {
220            //double KentanTilavuus = Level.Height - 100 / 100 * Level.Width / 100;
221            int korkeus = (((int)Level.Height - 200) / 100);
222            int leveys = ((int)Level.Width / 100);
223            kentta = new Kuutio[korkeus, leveys];
224            for (int i = 0; i < kentta.GetLength(0); i++)
225            {
226                for (int j = 0; j < kentta.GetLength(1); j++)
227                {
228
229                    int exists = RandomGen.NextInt(0, 3);
230                    if (exists != 0)
231                    {
232
233
234
235                        kentta[i, j] = new Kuutio(((int)Level.Bottom / 100) + i, (((int)Level.Left / 100) + j), RandomGen.NextInt(1, 6));
236                    }
237                    else kentta[i, j] = null;
238
239
240                }
241            }
242
243        }
244
245        private void LuoPallo()
246        {
247            pallo = new PhysicsObject(50, 50);
248            pallo.Color = Color.YellowGreen;
249            pallo.Y = Level.Bottom + 70;
250            pallo.X= 0;
251            pallo.Shape = Shape.Octagon;
252            pallo.Restitution = 1.5;
253            pallo.IgnoresGravity = true;
254            pallo.Tag = "pallo";
255            pallo.IgnoresCollisionResponse = true;
256            pallo.IgnoresExplosions = true;
257            palloKiinni = true;
258            Add(pallo);
259        }
260
261        private void ValmisteleTausta()
262        {
263            Level.Background.CreateStars(200);
264            Level.CreateBorders(true);
265            Camera.ZoomToLevel();
266            taulu = new Label(400, 400);
267            taulu.Y = Screen.Top - 50;
268            //taulu.X:n paras arvo tähän asti on 325
269            taulu.X = Screen.Right - 325;
270            taulu.TextColor = Color.YellowGreen;
271            taulu.TextScale = Tekstin_koko;
272            Add(taulu);
273
274        }
275
276        private void AsetaPerusKuuntelijat()
277        {
278
279            PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
280            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
281
282        }
283
284
285    }
286
287 
288}
Note: See TracBrowser for help on using the repository browser.