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

Revision 1647, 11.2 KB checked in by pakralki, 10 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, 20, 10);
101    }
102
103    void LuoTankki()
104    {
105        tankki = new Tank(50, 20);
106        tankki.Y = Level.Bottom + 270;
107        tankki.X = Level.Right + -50;
108        Add(tankki);
109        tankki.Cannon.CannonBallCollision = KuulaOsuu;
110        tankki.Cannon.Ammo.Value = 1000;
111        voimaMittari.Value = 100;
112        tankki.Mass = 200;
113       
114    }
115
116    void Luotankki2()
117    {
118        tankki2 = new Tank(50, 20);
119        tankki2.Y = Level.Bottom + 270;
120        tankki2.X = Level.Left + 50;
121        Add(tankki2);
122        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
123        tankki2.Cannon.Ammo.Value = 1000;
124        voimaMittari2.Value = 100;
125        tankki2.Mass = 200;
126    }
127
128    void AsetaOhjaimet()
129    {
130      // PC
131        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
132        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
133
134        Keyboard.Listen(Key.Left, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
135        Keyboard.Listen(Key.Right, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
136        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
137        if (yksinpeli)
138    {
139        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
140        Keyboard.Listen(Key.Home, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
141        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
142        Keyboard.Listen(Key.RightControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
143    }
144
145        else 
146    {
147        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
148        Keyboard.Listen(Key.Home, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
149        Keyboard.Listen(Key.Home, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
150        Keyboard.Listen(Key.End, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
151    }
152
153        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
154        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
155        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
156        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
157        Keyboard.Listen(Key.Q, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
158        Keyboard.Listen(Key.Q, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki2);
159        Keyboard.Listen(Key.E, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
160
161      // XBOX
162        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
163        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
164        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
165        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
166        ControllerOne.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
167        ControllerOne.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki);
168        ControllerOne.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
169
170        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
171        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
172        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
173        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
174        ControllerTwo.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
175        ControllerTwo.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki2);
176        ControllerTwo.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
177    }
178
179    void lataaTykinVoimaa(double lisaVoima, Tank tank)
180    {
181        voima += lisaVoima;
182    }
183
184    void AmmuTykilla(Tank tank)
185    {
186        tank.Cannon.Power.Value = voima;
187        tank.Cannon.Shoot();
188        voima = 0;
189    }
190
191    void AmmuKK(Tank tank)
192    {
193        PhysicsObject luoti = new PhysicsObject(4, 4);
194        ObjectIgnorer ignorer = new ObjectIgnorer();
195        AddCollisionHandler(luoti, KasittelePallonTormays);
196        tank.CollisionIgnorer = ignorer;
197        luoti.CollisionIgnorer = ignorer;
198        luoti.Color = Color.Blue;
199        luoti.Shape = Shapes.Circle;
200        luoti.X = tank.X;
201        luoti.Y = tank.Y;
202        Vector ampumasuunta = Vector.FromLengthAndAngle(800, tank.Cannon.Angle);
203        luoti.Hit(ampumasuunta);
204        Add(luoti);
205    }
206
207    void KasittelePallonTormays(PhysicsObject luoti, PhysicsObject kohde)
208    {
209     
210    }
211
212    void Aja(Tank t, double vaanto)
213    {
214        t.Accelerate(vaanto);
215    }
216
217    void KaannaPutkea(Tank t, Angle kaanto)
218    {
219        t.Cannon.Angle += kaanto;
220    }
221
222    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
223    {
224        kuula.Destroy();
225        Explosion rajahdys = new Explosion(100);
226        rajahdys.Force = 10.0;
227        rajahdys.Position = kuula.Position;
228        if (toinen == tankki)
229        {
230            voimaMittari.Value -= 10;
231
232            if (voimaMittari.Value <= 0)
233            {
234                tankki.Destroy();
235                if (yksinpeli)
236                {
237                    MessageDisplay.Add("AI voitti");
238                }
239                else
240                {
241                    MessageDisplay.Add("pelaaja2 voitti");
242                }
243            }
244        }
245        Add(rajahdys);
246
247        if (toinen == tankki2)
248        {
249            voimaMittari2.Value -= 10;
250
251            if (voimaMittari2.Value <= 0)
252            {
253                tankki2.Destroy();
254                MessageDisplay.Add("pelaaja1 voitti");
255            }
256        }
257    }
258
259    void Aloitapeli()
260    {
261        voimaMittari = new DoubleMeter(100);
262        voimaMittari.MaxValue = 100;
263        BarGauge voimaPalkki = new BarGauge(20, 150);
264        voimaPalkki.BindTo(voimaMittari);
265        Add(voimaPalkki);
266
267        voimaPalkki.X = (0.8 * Screen.RightSafe);
268        voimaPalkki.Y = (0.8 * Screen.TopSafe);
269        voimaPalkki.BarColor = Color.Green;
270        voimaPalkki.BorderColor = Color.White;
271        voimaPalkki.Angle = Angle.Degrees(90);
272
273        voimaMittari2 = new DoubleMeter(100);
274        voimaMittari2.MaxValue = 100;
275        BarGauge voimaPalkki2 = new BarGauge(20, 150);
276        voimaPalkki2.BindTo(voimaMittari2);
277        Add(voimaPalkki2);
278
279        voimaPalkki2.X = (0.8 * Screen.LeftSafe);
280        voimaPalkki2.Y = (0.8 * Screen.TopSafe);
281        voimaPalkki2.BarColor = Color.Green;
282        voimaPalkki2.BorderColor = Color.White;
283        voimaPalkki2.Angle = Angle.Degrees(90);
284
285        LuoKentta();
286
287        AsetaOhjaimet();
288
289        if (yksinpeli)
290        {
291            Timer ajastin = new Timer();
292            ajastin.Interval = 0.01;
293            ajastin.Trigger += new Timer.TriggerHandler(PseudoAI);
294            //AddTimer(ajastin);
295            ajastin.Start();
296        }
297    }
298
299    void PseudoAI(Timer sender)
300    {
301        double ero = tankki.X - tankki2.X;
302
303        if (laskuri > 0)
304        {
305            laskuri -= 1;
306            if (ero > 500)
307            {
308                tankki2.Accelerate(-1.0);
309            }
310            else
311            {
312                tankki2.Accelerate(1.0);
313            }
314        }
315        else
316        {
317            laskuri = 45;
318            //MessageDisplay.Add("Ero " + ero + " kulma " + tankki2.Cannon.Angle.Degree);
319
320            if (ero > 400)
321            {
322                tankki2.Cannon.Angle = Angle.Degrees(25) - tankki2.Angle;
323            }
324            else if (ero > 200)
325            {
326                tankki2.Cannon.Angle = Angle.Degrees(10) - tankki2.Angle;
327            }
328            else
329            {
330                tankki2.Cannon.Angle = Angle.Degrees(5) - tankki2.Angle;
331            }
332            tankki2.Cannon.Power.Value = 10000;
333            tankki2.Cannon.Shoot();
334        }
335    }
336}
Note: See TracBrowser for help on using the repository browser.