source: 2010/23/jopehell/TheTankTMR/Peli.cs @ 753

Revision 753, 15.0 KB checked in by jopehell, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.ScreenObjects;
4using Jypeli.Assets;
5
6namespace TheTankTMR
7{
8    public class Peli : PhysicsGame
9    {
10        Vector nopeusYlos = new Vector(0, 200);
11        Vector nopeusAlas = new Vector(0, -200);
12        Vector nopeusVasen = new Vector(-200, 0);
13        Vector nopeusOikea = new Vector(200, 0);
14
15        PhysicsObject tankki1;
16   
17 
18        PhysicsObject vasenReuna;
19        PhysicsObject oikeaReuna;
20
21        PhysicsObject orkki;
22
23        IntMeter KillCount;
24
25        Timer ajastin;
26
27        protected override void Begin()
28        { 
29            AloitusIkkuna();
30           
31        }
32
33        void Alku()
34        {
35            LuoKentta();
36            LuoOhjaimet();
37            Aloita();
38        }
39        void AloitusIkkuna()
40        {
41            Level.Background.Image = LoadImage("Alku");
42            MessageDisplay.Clear();
43            MessageDisplay.X = -200;
44            MessageDisplay.Y = 0;
45            MessageDisplay.TextColor = Color.Aqua;
46
47            MessageDisplay.Add("Tervetuloa!   Aloita peli painamalla Y:tä");
48            Keyboard.Listen(Key.Y, ButtonState.Down, Alku, "aloita peli");
49            ControllerOne.Listen(Button.Y, ButtonState.Down, Alku, "aloita peli");
50        }
51
52
53        void LuoKentta()
54        {
55            Level.Background.Image = LoadImage("tausta");
56            Camera.ZoomToLevel();
57           
58
59            tankki1 = LuoTankki(Level.Left + 20.0, 0.0);
60     
61            LisaaLaskurit();
62
63            vasenReuna = Level.CreateLeftBorder();
64            vasenReuna.Restitution = 1.0;
65            vasenReuna.IsVisible = false;
66            oikeaReuna = Level.CreateRightBorder();
67            oikeaReuna.Restitution = 1.0;
68            oikeaReuna.IsVisible = false;
69            PhysicsObject ylaReuna = Level.CreateTopBorder();
70            ylaReuna.Restitution = 1.0;
71            ylaReuna.IsVisible = false;
72            PhysicsObject alaReuna = Level.CreateBottomBorder();
73            alaReuna.Restitution = 1.0;
74            alaReuna.IsVisible = true;
75            orkki = LuoOrkki(0, 0);
76            orkki = LuoOrkki(1, 1);
77
78            ajastin = new Timer();
79            ajastin.Interval = 0.2;
80            ajastin.Trigger += LuoVihollisia;
81            Add(ajastin);
82
83            ajastin.Start();
84
85        }
86
87        void LuoVihollisia(Timer sender)
88        {
89            LuoOrkki(RandomGen.NextDouble(400.0, 600.0), RandomGen.NextDouble(300.0, -600.0));
90        }
91
92        PhysicsObject LuoTankki(double x, double y)
93        {
94            PhysicsObject tankki = PhysicsObject.CreateStaticObject(30.0, 30.0);
95
96            tankki.Image = LoadImage("tankki"); ;
97            tankki.X = x;
98            tankki.Y = y;
99            tankki.Restitution = 0.5;
100            Add( tankki );
101            PlasmaCannon Plasmatykki = new PlasmaCannon(20, 5);
102            tankki.Add(Plasmatykki);
103            Plasmatykki.Angle += Angle.Degrees(5);
104            Plasmatykki.Use();
105            Plasmatykki.PlasmaParticleCollision = AmmuksenTormays;
106            Keyboard.Listen(Key.Space, ButtonState.Down, Plasmatykki.Use, "Ammu");
107            ControllerOne.Listen(Button.A, ButtonState.Down, Plasmatykki.Use, "Ammu XBox");
108
109
110
111            return tankki;
112
113        }
114       
115        PhysicsObject LuoOrkki(double x,double y)
116        {
117            PhysicsObject orkki = new PhysicsObject(30, 30);
118
119            orkki.Image = LoadImage("orkki");
120            orkki.Restitution = 1.0;
121            orkki.X = x;
122            orkki.Y = y;
123            Add(orkki);
124            Vector impulssi = new Vector(-400,-400);
125            orkki.Hit(impulssi);
126            AddCollisionHandler(orkki, VihollinenTormasi);
127            return orkki;
128
129        }
130       
131        void LisaaLaskurit()
132        {
133            KillCount = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
134     
135        }
136        IntMeter LuoPisteLaskuri(double x, double y)
137        {
138            IntMeter laskuri = new IntMeter(0);
139            laskuri.MaxValue = 999999;
140            ValueDisplay naytto = new ValueDisplay();
141            naytto.BindTo(laskuri);
142            naytto.X = x;
143            naytto.Y = y;
144            naytto.ValueColor = Color.GreenYellow;
145            naytto.TextColor = Color.Aqua;
146
147            naytto.Text = ("Pisteet:       ");
148            Add(naytto);
149            return laskuri;
150        }
151         void AmmuksenTormays(PhysicsObject kuula, PhysicsObject osuttu)
152        {
153           
154            Explosion rajahdys = new Explosion(50.0);
155            rajahdys.Position = osuttu.Position;
156            rajahdys.Speed = 750.0;
157            rajahdys.Force = 100;
158
159            if (osuttu != tankki1)
160            {
161                Add(rajahdys);
162                osuttu.Destroy();
163                KillCount.Value += 1;
164               
165                Arvosana();
166            }
167        }
168
169        void Arvosana()
170        {
171            if (KillCount == 10)
172            {
173                MessageDisplay.Clear();
174                MessageDisplay.X = -640;
175                MessageDisplay.Y = 500;
176                MessageDisplay.TextColor = Color.White;
177                MessageDisplay.Add("Hieno aloitus. jatka samaan malliin!");
178            }
179            if (KillCount == 20)
180            {
181                MessageDisplay.Clear();
182                MessageDisplay.TextColor = Color.White;
183                MessageDisplay.Add("Hienosti menee!");
184       
185            }
186            if (KillCount == 50)
187            {
188                MessageDisplay.Clear();
189                MessageDisplay.TextColor = Color.Lime;
190                MessageDisplay.Add("HYVÄ!");
191            }
192            if (KillCount == 100)
193            {
194                MessageDisplay.Clear();
195                MessageDisplay.TextColor = Color.Lime;
196                MessageDisplay.Add("Olet Taitava!");
197            }
198            if (KillCount == 200)
199            {
200                MessageDisplay.Clear();
201                MessageDisplay.TextColor = Color.Lime;
202                MessageDisplay.Add("Mahtavaa!");
203            }
204            if (KillCount == 500)
205            {
206                MessageDisplay.Clear();
207                MessageDisplay.TextColor = Color.Lime;
208                MessageDisplay.Add("Erinomaista!");
209            }
210            if (KillCount == 750)
211            {
212                MessageDisplay.Clear();
213                MessageDisplay.TextColor = Color.LightYellow;
214                MessageDisplay.Add("Täydellistä!!!");
215            }
216
217            if (KillCount == 1250)
218            {
219                MessageDisplay.Clear();
220                MessageDisplay.TextColor = Color.LightYellow;
221                MessageDisplay.Add("Olet mahtava!");
222            }
223            if (KillCount == 3000)
224            {
225                MessageDisplay.Clear();
226                MessageDisplay.TextColor = Color.LightYellow;
227                MessageDisplay.Add("Todella mahtavaa!");
228            }
229            if (KillCount == 5900)
230            {
231                MessageDisplay.Clear();
232                MessageDisplay.TextColor = Color.LightYellow;
233                MessageDisplay.Add("Erinomaista taitavuutta!");
234            }
235            if (KillCount == 8800)
236            {
237                MessageDisplay.Clear();
238                MessageDisplay.TextColor = Color.LightYellow;
239                MessageDisplay.Add("Olet Sotasankari!");
240            }
241            if (KillCount == 11700)
242            {
243                MessageDisplay.Clear();
244                MessageDisplay.TextColor = Color.ForestGreen;
245                MessageDisplay.Add("Loistavaa peliä!!!!");
246            }
247            if (KillCount == 15000)
248            {
249                MessageDisplay.Clear();
250                MessageDisplay.TextColor = Color.ForestGreen;
251                MessageDisplay.Add(":) :) :)!");
252            }
253            if (KillCount == 20000)
254            {
255                MessageDisplay.Clear();
256                MessageDisplay.TextColor = Color.ForestGreen;
257                MessageDisplay.Add(":D :D :D!");
258            }
259            if (KillCount == 27000)
260            {
261                MessageDisplay.Clear();
262                MessageDisplay.TextColor = Color.ForestGreen;
263                MessageDisplay.Add("XD XD XD!");
264            }
265            if (KillCount == 45000)
266            {
267                MessageDisplay.Clear();
268                MessageDisplay.TextColor = Color.ForestGreen;
269                MessageDisplay.Add("Olet ensimmäisen tason Eliitti!");
270            }
271            if (KillCount == 90000)
272            {
273                MessageDisplay.Clear();
274                MessageDisplay.TextColor = Color.ForestGreen;
275                MessageDisplay.Add("Olet toisen tason Eliitti!");
276            }
277            if (KillCount == 200000)
278            {
279                MessageDisplay.Clear();
280                MessageDisplay.TextColor = Color.MediumTurquoise;
281                MessageDisplay.Add("Olet kolmannen tason Eliitti!!!!");
282            }
283            if (KillCount == 500000)
284            {
285                MessageDisplay.Clear();
286                MessageDisplay.TextColor = Color.MediumTurquoise;
287                MessageDisplay.Add("Olet voittamaton!!!");
288            }
289            if (KillCount == 750000)
290            {
291                MessageDisplay.Clear();
292                MessageDisplay.TextColor = Color.MediumTurquoise;
293                MessageDisplay.Add("Olet salainen aseemme sodassa!!!!");
294            }
295            if (KillCount == 999999)
296            {
297                MessageDisplay.Clear();
298                MessageDisplay.TextColor = Color.MediumTurquoise;
299                MessageDisplay.Add("Olet mestari!!! Game Completed!!!!!!");
300               
301            }
302        }
303
304        void VihollinenTormasi(PhysicsObject orkki, PhysicsObject otus)
305        {
306            if (otus == tankki1)
307            {
308                otus.Destroy();
309                Explosion rajahdys = new Explosion(400.0);
310                rajahdys.Position = otus.Position;
311                Add(rajahdys);
312
313                rajahdys.Speed = 175.0;
314                rajahdys.Force = 20000;
315                ajastin.Stop();
316               
317            }
318
319            if (tankki1.IsDestroyed()) 
320            {
321                MessageDisplay.TextColor = Color.Red;
322                MessageDisplay.Clear();
323                MessageDisplay.X = -640;
324                MessageDisplay.Y = 500;
325                MessageDisplay.Add("GAME OVER, Aloita uusi peli painamalla e (XBoxilla b)");
326                ControllerOne.Vibrate(0.1, 0.1, 0.0, 0.0, 0.1);
327               
328            }
329           
330        }
331
332        void Lopeta()
333        {
334            ClearAll();
335            Alku();           
336        }
337           
338       
339
340        void Aloita()
341        {
342            Vector impulssi = new Vector(650.0, 0.0);
343            tankki1.Hit(impulssi);
344
345
346        }
347        void LuoOhjaimet()
348        {
349            Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaTankkiaYlos, "Pelaaja 1: Liikuta tankkia ylös", tankki1);
350            Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaTankki, null, tankki1);
351            Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaTankkiaAlas, "Pelaaja 1: Liikuta tankkia alas", tankki1);
352            Keyboard.Listen(Key.Down, ButtonState.Released, PysaytaTankki, null, tankki1);
353            Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaTankkiaOik, "Pelaaja 1: Liikuta tankkia oikealle", tankki1);
354            Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaTankki, null, tankki1);
355            Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaTankkiaVas, "Pelaaja 1: Liikuta tankkia vasemmalle", tankki1);
356            Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaTankki, null, tankki1);
357            Keyboard.Listen(Key.E, ButtonState.Down, Lopeta, "uusi peli");
358
359
360            //Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
361            //Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
362
363            ControllerOne.Listen(Button.DPadUp, ButtonState.Down, AsetaNopeus, "Liikuta tankkia ylös", tankki1, nopeusYlos);
364            ControllerOne.Listen(Button.DPadUp, ButtonState.Released, AsetaNopeus, null, tankki1, Vector.Zero);
365
366            ControllerOne.Listen(Button.DPadDown, ButtonState.Down, AsetaNopeus, "Liikuta tankkia alas", tankki1, nopeusAlas);
367            ControllerOne.Listen(Button.DPadDown, ButtonState.Released, AsetaNopeus, null, tankki1, Vector.Zero);
368
369            ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, AsetaNopeus, "Liikuta tankkia vasemmalle", tankki1, nopeusVasen);
370            ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, AsetaNopeus, null, tankki1, Vector.Zero);
371
372            ControllerOne.Listen(Button.DPadRight, ButtonState.Down, AsetaNopeus, "Liikuta tankkia oikealle", tankki1, nopeusOikea);
373            ControllerOne.Listen(Button.DPadRight, ButtonState.Released, AsetaNopeus, null, tankki1, Vector.Zero);
374            ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu");
375            ControllerOne.Listen(Button.B, ButtonState.Down, Lopeta, "uusi peli");
376
377        }
378        void AsetaNopeus(PhysicsObject tankki, Vector nopeus)
379        {
380            if ((nopeus.Y < 0) && (tankki.Y < Level.Bottom))
381            {
382                tankki.Velocity = Vector.Zero;
383                return;
384            }
385
386            if ((nopeus.Y > 0) && (tankki.Y > Level.Top))
387            {
388                tankki.Velocity = Vector.Zero;
389                return;
390            }
391            tankki.Velocity = nopeus;
392        }
393
394        void LiikutaTankkiaYlos(PhysicsObject tankki)
395        {
396            if ((tankki.Y >= Level.Top))
397            {
398                tankki.Velocity = Vector.Zero;
399                return;
400            }
401            Vector nopeus = new Vector(0, 200);
402            tankki.Velocity = nopeus;
403        }
404
405        void LiikutaTankkiaAlas(PhysicsObject tankki)
406        {
407            if ((tankki.Y <= Level.Bottom))
408            {
409                tankki.Velocity = Vector.Zero;
410                return;
411            }
412
413            Vector nopeus = new Vector(0, -200);
414            tankki.Velocity = nopeus;
415
416        }
417
418
419        void LiikutaTankkiaOik(PhysicsObject tankki)
420        {
421            if ((tankki.X >= Level.Right))
422            {
423                tankki.Velocity = Vector.Zero;
424                return;
425            }
426            Vector nopeus = new Vector(200, 0);
427            tankki.Velocity = nopeus;
428        }
429
430        void LiikutaTankkiaVas(PhysicsObject tankki)
431        {
432            if ((tankki.X <= Level.Left))
433            {
434                tankki.Velocity = Vector.Zero;
435                return;
436            }
437
438            Vector nopeus = new Vector(-200, 0);
439            tankki.Velocity = nopeus;
440        }
441
442
443        void PysaytaTankki(PhysicsObject tankki)
444        {
445            tankki.Velocity = Vector.Zero;
446        }
447    }
448}
449   
450
451
452 
453
454
455
Note: See TracBrowser for help on using the repository browser.