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

Revision 1644, 10.7 KB checked in by pakralki, 9 years ago (diff)
RevLine 
[1619]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
[1644]18    int laskuri = 10;
19    Boolean yksinpeli = false;
20
[1619]21    protected override void Begin()
22    {
[1620]23        Valikko();
[1619]24    }
25
26    void Valikko()
27    {
28        ClearAll();
29        valikonKohdat = new List<Label>();
30
[1643]31        Label kohta1 = new Label("Aloita moninpeli");
[1619]32        kohta1.Position = new Vector(0, 40);
33        valikonKohdat.Add(kohta1);
34
[1644]35        Label kohta2 = new Label("Aloita yksinpeli");
36        kohta2.Position = new Vector(0, 0);
[1619]37        valikonKohdat.Add(kohta2);
38
[1644]39        Label kohta3 = new Label("Lopeta");
40        kohta3.Position = new Vector(0, -40);
41        valikonKohdat.Add(kohta3);
42
[1619]43        foreach (Label valikonKohta in valikonKohdat)
44        {
45            Add(valikonKohta);
46        }
47
48        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaMoninpeli, null);
[1644]49        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Aloitayksinpeli, null);
50        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
[1619]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");
[1644]76        yksinpeli = false;
[1620]77        Aloitapeli();
[1619]78    }
79
[1644]80    void Aloitayksinpeli()
81    {
82        ClearAll();
83        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
84        yksinpeli = true;
85        Aloitapeli();
86    }
87
[1619]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();
[1644]100        Level.CreateGround(200, 250, 20, 10);
[1619]101    }
102
103    void LuoTankki()
104    {
[1633]105        tankki = new Tank(50, 20);
[1643]106        tankki.Y = Level.Bottom + 270;
[1619]107        tankki.X = Level.Right + -50;
108        Add(tankki);
109        tankki.Cannon.CannonBallCollision = KuulaOsuu;
[1644]110        tankki.Cannon.Ammo.Value = 1000;
[1633]111        voimaMittari.Value = 100;
[1643]112        tankki.Mass = 200;
113       
[1619]114    }
[1643]115
[1619]116    void Luotankki2()
117    {
[1633]118        tankki2 = new Tank(50, 20);
[1643]119        tankki2.Y = Level.Bottom + 270;
[1619]120        tankki2.X = Level.Left + 50;
121        Add(tankki2);
122        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
[1644]123        tankki2.Cannon.Ammo.Value = 1000;
[1633]124        voimaMittari2.Value = 100;
[1643]125        tankki2.Mass = 200;
[1619]126    }
127
128    void AsetaOhjaimet()
129    {
[1643]130      // PC
[1619]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        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
[1633]138        Keyboard.Listen(Key.Space, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
[1619]139        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
140        Keyboard.Listen(Key.RightControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
141
142        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
143        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
144        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
145        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
[1633]146        Keyboard.Listen(Key.Q, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
[1619]147        Keyboard.Listen(Key.Q, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki2);
148        Keyboard.Listen(Key.LeftControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
149
[1643]150      // XBOX
[1620]151        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
152        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
153        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
154        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
[1633]155        ControllerOne.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
156        ControllerOne.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki);
[1643]157        ControllerOne.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
[1619]158
[1633]159        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
160        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
161        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
162        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
163        ControllerTwo.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
164        ControllerTwo.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki2);
165        ControllerTwo.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
[1619]166    }
[1643]167
[1619]168    void lataaTykinVoimaa(double lisaVoima, Tank tank)
169    {
170        voima += lisaVoima;
171    }
172
173    void AmmuTykilla(Tank tank)
174    {
175        tank.Cannon.Power.Value = voima;
176        tank.Cannon.Shoot();
177        voima = 0;
178    }
[1643]179
[1619]180    void AmmuKK(Tank tank)
181    {
182        PhysicsObject luoti = new PhysicsObject(4, 4);
183        ObjectIgnorer ignorer = new ObjectIgnorer();
184        AddCollisionHandler(luoti, KasittelePallonTormays);
185        tank.CollisionIgnorer = ignorer;
186        luoti.CollisionIgnorer = ignorer;
187        luoti.Color = Color.Blue;
188        luoti.Shape = Shapes.Circle;
189        luoti.X = tank.X;
190        luoti.Y = tank.Y;
191        Vector ampumasuunta = Vector.FromLengthAndAngle(800, tank.Cannon.Angle);
192        luoti.Hit(ampumasuunta);
193        Add(luoti);
194    }
195
196    void KasittelePallonTormays(PhysicsObject luoti, PhysicsObject kohde)
197    {
[1643]198     
[1619]199    }
200
201    void Aja(Tank t, double vaanto)
202    {
203        t.Accelerate(vaanto);
204    }
205
206    void KaannaPutkea(Tank t, Angle kaanto)
207    {
208        t.Cannon.Angle += kaanto;
209    }
[1643]210
[1619]211    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
212    {
213        kuula.Destroy();
214        Explosion rajahdys = new Explosion(100);
215        rajahdys.Force = 10.0;
216        rajahdys.Position = kuula.Position;
217        if (toinen == tankki)
218        {
219            voimaMittari.Value -= 10;
220
221            if (voimaMittari.Value <= 0)
222            {
223                tankki.Destroy();
[1644]224                if (yksinpeli)
225                {
226                    MessageDisplay.Add("AI voitti");
227                }
228                else
229                {
230                    MessageDisplay.Add("pelaaja2 voitti");
231                }
[1619]232            }
233        }
234        Add(rajahdys);
235
236        if (toinen == tankki2)
237        {
238            voimaMittari2.Value -= 10;
239
240            if (voimaMittari2.Value <= 0)
241            {
242                tankki2.Destroy();
[1620]243                MessageDisplay.Add("pelaaja1 voitti");
[1619]244            }
245        }
246    }
247
248    void Aloitapeli()
[1620]249    {
250        voimaMittari = new DoubleMeter(100);
251        voimaMittari.MaxValue = 100;
252        BarGauge voimaPalkki = new BarGauge(20, 150);
253        voimaPalkki.BindTo(voimaMittari);
254        Add(voimaPalkki);
[1619]255
[1620]256        voimaPalkki.X = (0.8 * Screen.RightSafe);
257        voimaPalkki.Y = (0.8 * Screen.TopSafe);
258        voimaPalkki.BarColor = Color.Green;
259        voimaPalkki.BorderColor = Color.White;
260        voimaPalkki.Angle = Angle.Degrees(90);
[1619]261
[1620]262        voimaMittari2 = new DoubleMeter(100);
263        voimaMittari2.MaxValue = 100;
264        BarGauge voimaPalkki2 = new BarGauge(20, 150);
265        voimaPalkki2.BindTo(voimaMittari2);
266        Add(voimaPalkki2);
[1619]267
[1620]268        voimaPalkki2.X = (0.8 * Screen.LeftSafe);
269        voimaPalkki2.Y = (0.8 * Screen.TopSafe);
270        voimaPalkki2.BarColor = Color.Green;
271        voimaPalkki2.BorderColor = Color.White;
272        voimaPalkki2.Angle = Angle.Degrees(90);
[1619]273
[1620]274        LuoKentta();
[1619]275
[1620]276        AsetaOhjaimet();
[1643]277
[1644]278        if (yksinpeli)
279        {
280            Timer ajastin = new Timer();
281            ajastin.Interval = 0.01;
282            ajastin.Trigger += new Timer.TriggerHandler(PseudoAI);
283            //AddTimer(ajastin);
284            ajastin.Start();
285        }
[1620]286    }
[1619]287
[1643]288    void PseudoAI(Timer sender)
289    {
[1644]290        double ero = tankki.X - tankki2.X;
291
292        if (laskuri > 0)
293        {
294            laskuri -= 1;
295            if (ero > 500)
296            {
297                tankki2.Accelerate(-1.0);
298            }
299            else
300            {
301                tankki2.Accelerate(1.0);
302            }
303        }
304        else
305        {
306            laskuri = 45;
307            //MessageDisplay.Add("Ero " + ero + " kulma " + tankki2.Cannon.Angle.Degree);
308
309            if (ero > 400)
310            {
311                tankki2.Cannon.Angle = Angle.Degrees(25) - tankki2.Angle;
312            }
313            else if (ero > 200)
314            {
315                tankki2.Cannon.Angle = Angle.Degrees(10) - tankki2.Angle;
316            }
317            else
318            {
319                tankki2.Cannon.Angle = Angle.Degrees(5) - tankki2.Angle;
320            }
321            tankki2.Cannon.Power.Value = 10000;
322            tankki2.Cannon.Shoot();
323        }
[1643]324    }
[1619]325}
Note: See TracBrowser for help on using the repository browser.