source: 2010/31/pakralki/tank destroier/Peli.cs @ 10335

Revision 1661, 12.2 KB checked in by pakralki, 9 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Physics2DDotNet.Ignorers;
6using System.Collections.Generic;
7
8public class Tankkipeli : PhysicsGame
9{
10    List<Label> valikonKohdat;
11    Tank tankki;
12    Tank tankki2;
13    double voima;
14
15    DoubleMeter voimaMittari;
16    DoubleMeter voimaMittari2;
17
18    int laskuri = 10;
19    Boolean yksinpeli = false;
20
21    protected override void Begin()
22    {
23        Valikko();
24    }
25
26    void Valikko()
27    {
28        ClearAll();
29        valikonKohdat = new List<Label>();
30
31        Label kohta1 = new Label("Aloita moninpeli");
32        kohta1.Position = new Vector(0, 40);
33        valikonKohdat.Add(kohta1);
34
35        Label kohta2 = new Label("Aloita yksinpeli");
36        kohta2.Position = new Vector(0, 0);
37        valikonKohdat.Add(kohta2);
38
39        Label kohta3 = new Label("Lopeta");
40        kohta3.Position = new Vector(0, -40);
41        valikonKohdat.Add(kohta3);
42
43        foreach (Label valikonKohta in valikonKohdat)
44        {
45            Add(valikonKohta);
46        }
47
48        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaMoninpeli, null);
49        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Aloitayksinpeli, null);
50        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
51
52        Mouse.IsCursorVisible = true;
53        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
55    }
56
57    void ValikossaLiikkuminen(AnalogState hiirenTila)
58    {
59        foreach (Label kohta in valikonKohdat)
60        {
61            if (Mouse.IsCursorOn(kohta))
62            {
63                kohta.TextColor = Color.Red;
64            }
65            else
66            {
67                kohta.TextColor = Color.Black;
68            }
69        }
70    }
71
72    void AloitaMoninpeli()
73    {
74        ClearAll();
75        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
76        yksinpeli = false;
77        Aloitapeli();
78    }
79
80    void Aloitayksinpeli()
81    {
82        ClearAll();
83        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
84        yksinpeli = true;
85        Aloitapeli();
86    }
87
88    void Lopeta()
89    {
90        Exit();
91    }
92
93    void LuoKentta()
94    {
95        Gravity = new Vector(0, -400);
96        Level.CreateBorders();
97        LuoTankki();
98        Luotankki2();
99        Camera.ZoomToLevel();
100        Level.CreateGround(200, 250, 30, 10);
101        if (yksinpeli)
102        {
103           
104        }
105        else
106        {
107            Gravity = new Vector(0.0, -400.0);
108        }
109       
110       
111
112    }
113   
114    void LuoTankki()
115    {
116        tankki = new Tank(50, 20);
117        tankki.Y = Level.Bottom + 270;
118        tankki.X = Level.Right + -50;
119        tankki.Cannon.Angle += Angle.Degrees(180);
120        Add(tankki);
121        tankki.Cannon.CannonBallCollision = KuulaOsuu;
122        tankki.Cannon.Ammo.Value = 1000;
123        voimaMittari.Value = 100;
124        if (yksinpeli)
125        {
126            tankki.Mass = 200;
127        }
128        else
129        {
130         
131        }
132    }
133
134    void Luotankki2()
135    {
136        tankki2 = new Tank(50, 20);
137        tankki2.Y = Level.Bottom + 270;
138        tankki2.X = Level.Left + 50;
139        Add(tankki2);
140        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
141        tankki2.Cannon.Ammo.Value = 1000;
142        voimaMittari2.Value = 100;
143        if (yksinpeli)
144        {
145            tankki2.Mass = 200;
146        }
147        else
148        {
149         
150        }     
151    }
152
153    void AsetaOhjaimet()
154    {
155      // PC
156        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
158
159        Keyboard.Listen(Key.Left, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
160        Keyboard.Listen(Key.Right, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
161        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
162        if (yksinpeli)
163    {
164        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
165        Keyboard.Listen(Key.Space, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
166        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
167        Keyboard.Listen(Key.RightControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
168    }
169
170        else 
171    {
172        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
173        Keyboard.Listen(Key.Space , ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
174        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
175        Keyboard.Listen(Key.RightControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
176    }
177
178        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
179        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
180        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
181        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
182        Keyboard.Listen(Key.Q, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
183        Keyboard.Listen(Key.Q, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki2);
184        Keyboard.Listen(Key.E, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
185
186      // XBOX
187        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
188        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
189        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
190        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
191        ControllerOne.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
192        ControllerOne.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki);
193        ControllerOne.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
194
195        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
196        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
197        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
198        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
199        ControllerTwo.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
200        ControllerTwo.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki2);
201        ControllerTwo.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
202    }
203
204    void lataaTykinVoimaa(double lisaVoima, Tank tank)
205    {
206        voima += lisaVoima;
207    }
208
209    void AmmuTykilla(Tank tank)
210    {
211        tank.Cannon.Power.Value = voima;
212        tank.Cannon.Shoot();
213        voima = 0;
214    }
215
216    void AmmuKK(Tank tank)
217    {
218        PhysicsObject luoti = new PhysicsObject(4, 4);
219        ObjectIgnorer ignorer = new ObjectIgnorer();
220        AddCollisionHandler(luoti, KasittelePallonTormays);
221        tank.CollisionIgnorer = ignorer;
222        luoti.CollisionIgnorer = ignorer;
223        luoti.Color = Color.Blue;
224        luoti.Shape = Shapes.Circle;
225        luoti.X = tank.X;
226        luoti.Y = tank.Y;
227        Vector ampumasuunta = Vector.FromLengthAndAngle(800, tank.Cannon.Angle);
228        luoti.Hit(ampumasuunta);
229        Add(luoti);
230    }
231
232    void KasittelePallonTormays(PhysicsObject luoti, PhysicsObject kohde)
233    {
234     
235    }
236
237    void Aja(Tank t, double vaanto)
238    {
239        t.Accelerate(vaanto);
240    }
241
242    void KaannaPutkea(Tank t, Angle kaanto)
243    {
244        t.Cannon.Angle += kaanto;
245    }
246
247    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
248    {
249        kuula.Destroy();
250        Explosion rajahdys = new Explosion(100);
251        rajahdys.Force = 30.0;
252        rajahdys.Position = kuula.Position;
253        if (toinen == tankki)
254        {
255            voimaMittari.Value -= 10;
256
257            if (voimaMittari.Value <= 0)
258            {
259                tankki.Destroy();
260                if (yksinpeli)
261                {
262                    Valikko();
263                    MessageDisplay.Add("AI voitti");
264                }
265                else
266                {
267                    Valikko();
268                    MessageDisplay.Add("pelaaja2 voitti");
269                }
270            }
271        }
272        Add(rajahdys);
273
274        if (toinen == tankki2)
275        {
276            voimaMittari2.Value -= 10;
277
278            if (voimaMittari2.Value <= 0)
279            {
280                Valikko();
281                tankki2.Destroy();
282                MessageDisplay.Add("pelaaja1 voitti");
283            }
284        }
285    }
286
287    void Aloitapeli()
288    {
289        voimaMittari = new DoubleMeter(100);
290        voimaMittari.MaxValue = 100;
291        BarGauge voimaPalkki = new BarGauge(20, 150);
292        voimaPalkki.BindTo(voimaMittari);
293        Add(voimaPalkki);
294
295        voimaPalkki.X = (0.8 * Screen.RightSafe);
296        voimaPalkki.Y = (0.8 * Screen.TopSafe);
297        voimaPalkki.BarColor = Color.Green;
298        voimaPalkki.BorderColor = Color.White;
299        voimaPalkki.Angle = Angle.Degrees(90);
300
301        voimaMittari2 = new DoubleMeter(100);
302        voimaMittari2.MaxValue = 100;
303        BarGauge voimaPalkki2 = new BarGauge(20, 150);
304        voimaPalkki2.BindTo(voimaMittari2);
305        Add(voimaPalkki2);
306
307        voimaPalkki2.X = (0.8 * Screen.LeftSafe);
308        voimaPalkki2.Y = (0.8 * Screen.TopSafe);
309        voimaPalkki2.BarColor = Color.Green;
310        voimaPalkki2.BorderColor = Color.White;
311        voimaPalkki2.Angle = Angle.Degrees(90);
312
313        LuoKentta();
314
315        AsetaOhjaimet();
316
317        if (yksinpeli)
318        {
319            Timer ajastin = new Timer();
320            ajastin.Interval = 0.01;
321            ajastin.Trigger += new Timer.TriggerHandler(PseudoAI);
322            //AddTimer(ajastin);
323            ajastin.Start();
324        }
325    }
326
327    void PseudoAI(Timer sender)
328    {
329        double ero = tankki.X - tankki2.X;
330
331        if (laskuri > 0)
332        {
333            laskuri -= 1;
334            if (ero > 500)
335            {
336                tankki2.Accelerate(-1.0);
337            }
338            else
339            {
340                tankki2.Accelerate(1.0);
341            }
342        }
343        else
344        {
345            laskuri = 40;
346            //MessageDisplay.Add("Ero " + ero + " kulma " + tankki2.Cannon.Angle.Degree);
347
348            if (ero > 400)
349            {
350                tankki2.Cannon.Angle = Angle.Degrees(25) - tankki2.Angle;
351            }
352            //else if (ero > 350)
353            //{
354              //  tankki2.Cannon.Angle = Angle.Degrees(21) - tankki2.Angle;
355           // }
356            //else if (ero > 300)
357           // {
358            //    tankki2.Cannon.Angle = Angle.Degrees(17) - tankki2.Angle;
359            //}
360            // else if (ero > 240)
361            //{
362            //  tankki2.Cannon.Angle = Angle.Degrees(20) - tankki2.Angle;
363            //}
364            // else if (ero > 220)
365            //{
366            //tankki2.Cannon.Angle = Angle.Degrees(15) - tankki2.Angle;
367            // }
368            else if (ero > 200)
369            {
370                tankki2.Cannon.Angle = Angle.Degrees(10) - tankki2.Angle;
371            }
372            else
373            {
374                tankki2.Cannon.Angle = Angle.Degrees(5) - tankki2.Angle;
375            }
376            tankki2.Cannon.Power.Value = 10000;
377            tankki2.Cannon.Shoot();
378        }
379    }
380}
Note: See TracBrowser for help on using the repository browser.