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

Revision 1643, 9.0 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    protected override void Begin()
19    {
20        Valikko();
21    }
22
23    void Valikko()
24    {
25        ClearAll();
26        valikonKohdat = new List<Label>();
27
28        Label kohta1 = new Label("Aloita moninpeli");
29        kohta1.Position = new Vector(0, 40);
30        valikonKohdat.Add(kohta1);
31
32        Label kohta2 = new Label("Lopeta");
33        kohta2.Position = new Vector(0, -40);
34        valikonKohdat.Add(kohta2);
35
36        foreach (Label valikonKohta in valikonKohdat)
37        {
38            Add(valikonKohta);
39        }
40
41        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaMoninpeli, null);
42        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null);
43
44        Mouse.IsCursorVisible = true;
45        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
46        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, "");
47    }
48
49    void ValikossaLiikkuminen(AnalogState hiirenTila)
50    {
51        foreach (Label kohta in valikonKohdat)
52        {
53            if (Mouse.IsCursorOn(kohta))
54            {
55                kohta.TextColor = Color.Red;
56            }
57            else
58            {
59                kohta.TextColor = Color.Black;
60            }
61        }
62    }
63
64    void AloitaMoninpeli()
65    {
66        ClearAll();
67        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
68        Aloitapeli();
69    }
70
71    void Lopeta()
72    {
73        Exit();
74    }
75
76    void LuoKentta()
77    {
78        Gravity = new Vector(0, -400);
79        Level.CreateBorders();
80        LuoTankki();
81        Luotankki2();
82        Camera.ZoomToLevel();
83        Level.CreateGround(200, 250, 20, 15);
84    }
85
86    void LuoTankki()
87    {
88        tankki = new Tank(50, 20);
89        tankki.Y = Level.Bottom + 270;
90        tankki.X = Level.Right + -50;
91        Add(tankki);
92        tankki.Cannon.CannonBallCollision = KuulaOsuu;
93        voimaMittari.Value = 100;
94        tankki.Mass = 200;
95       
96    }
97
98    void Luotankki2()
99    {
100        tankki2 = new Tank(50, 20);
101        tankki2.Y = Level.Bottom + 270;
102        tankki2.X = Level.Left + 50;
103        Add(tankki2);
104        tankki2.Cannon.CannonBallCollision = KuulaOsuu;
105        voimaMittari2.Value = 100;
106        tankki2.Mass = 200;
107    }
108
109    void AsetaOhjaimet()
110    {
111      // PC
112        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
113        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
114
115        Keyboard.Listen(Key.Left, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
116        Keyboard.Listen(Key.Right, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
117        Keyboard.Listen(Key.Up, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
118        Keyboard.Listen(Key.Down, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
119        Keyboard.Listen(Key.Space, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
120        Keyboard.Listen(Key.Space, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki);
121        Keyboard.Listen(Key.RightControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
122
123        Keyboard.Listen(Key.A, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
124        Keyboard.Listen(Key.D, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
125        Keyboard.Listen(Key.W, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
126        Keyboard.Listen(Key.S, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
127        Keyboard.Listen(Key.Q, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
128        Keyboard.Listen(Key.Q, ButtonState.Released, AmmuTykilla, "Ammu tykillä", tankki2);
129        Keyboard.Listen(Key.LeftControl, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
130
131      // XBOX
132        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki, 1.0);
133        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki, -1.0);
134        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
135        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
136        ControllerOne.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki);
137        ControllerOne.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki);
138        ControllerOne.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki);
139
140        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, Aja, "Liiku vasemmalle", tankki2, 1.0);
141        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, Aja, "Liiku oikealle", tankki2, -1.0);
142        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, KaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
143        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, KaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
144        ControllerTwo.Listen(Button.A, ButtonState.Down, lataaTykinVoimaa, "lataa tykin voimaa", 1500.0, tankki2);
145        ControllerTwo.Listen(Button.A, ButtonState.Released, AmmuTykilla, "ammu tykillä", tankki2);
146        ControllerTwo.Listen(Button.B, ButtonState.Released, AmmuKK, "Ammu kk:lla", tankki2);
147    }
148
149    void lataaTykinVoimaa(double lisaVoima, Tank tank)
150    {
151        voima += lisaVoima;
152    }
153
154    void AmmuTykilla(Tank tank)
155    {
156        tank.Cannon.Power.Value = voima;
157        tank.Cannon.Shoot();
158        voima = 0;
159    }
160
161    void AmmuKK(Tank tank)
162    {
163        PhysicsObject luoti = new PhysicsObject(4, 4);
164        ObjectIgnorer ignorer = new ObjectIgnorer();
165        AddCollisionHandler(luoti, KasittelePallonTormays);
166        tank.CollisionIgnorer = ignorer;
167        luoti.CollisionIgnorer = ignorer;
168        luoti.Color = Color.Blue;
169        luoti.Shape = Shapes.Circle;
170        luoti.X = tank.X;
171        luoti.Y = tank.Y;
172        Vector ampumasuunta = Vector.FromLengthAndAngle(800, tank.Cannon.Angle);
173        luoti.Hit(ampumasuunta);
174        Add(luoti);
175    }
176
177    void KasittelePallonTormays(PhysicsObject luoti, PhysicsObject kohde)
178    {
179     
180    }
181
182    void Aja(Tank t, double vaanto)
183    {
184        t.Accelerate(vaanto);
185
186    }
187
188    void KaannaPutkea(Tank t, Angle kaanto)
189    {
190        t.Cannon.Angle += kaanto;
191    }
192
193    void KuulaOsuu(PhysicsObject kuula, PhysicsObject toinen)
194    {
195        kuula.Destroy();
196        Explosion rajahdys = new Explosion(100);
197        rajahdys.Force = 10.0;
198        rajahdys.Position = kuula.Position;
199        if (toinen == tankki)
200        {
201            voimaMittari.Value -= 10;
202
203            if (voimaMittari.Value <= 0)
204            {
205                tankki.Destroy();
206                MessageDisplay.Add("pelaaja2 voitti");
207            }
208        }
209        Add(rajahdys);
210
211        if (toinen == tankki2)
212        {
213            voimaMittari2.Value -= 10;
214
215            if (voimaMittari2.Value <= 0)
216            {
217                tankki2.Destroy();
218                MessageDisplay.Add("pelaaja1 voitti");
219            }
220        }
221    }
222
223    void Aloitapeli()
224    {
225        voimaMittari = new DoubleMeter(100);
226        voimaMittari.MaxValue = 100;
227        BarGauge voimaPalkki = new BarGauge(20, 150);
228        voimaPalkki.BindTo(voimaMittari);
229        Add(voimaPalkki);
230
231        voimaPalkki.X = (0.8 * Screen.RightSafe);
232        voimaPalkki.Y = (0.8 * Screen.TopSafe);
233        voimaPalkki.BarColor = Color.Green;
234        voimaPalkki.BorderColor = Color.White;
235        voimaPalkki.Angle = Angle.Degrees(90);
236
237        voimaMittari2 = new DoubleMeter(100);
238        voimaMittari2.MaxValue = 100;
239        BarGauge voimaPalkki2 = new BarGauge(20, 150);
240        voimaPalkki2.BindTo(voimaMittari2);
241        Add(voimaPalkki2);
242
243        voimaPalkki2.X = (0.8 * Screen.LeftSafe);
244        voimaPalkki2.Y = (0.8 * Screen.TopSafe);
245        voimaPalkki2.BarColor = Color.Green;
246        voimaPalkki2.BorderColor = Color.White;
247        voimaPalkki2.Angle = Angle.Degrees(90);
248
249        LuoKentta();
250
251        AsetaOhjaimet();
252
253        Timer ajastin = new Timer();
254        ajastin.Interval = 0.5;
255        ajastin.Trigger += new Timer.TriggerHandler(PseudoAI);
256        //AddTimer(ajastin);
257        ajastin.Start();
258    }
259
260    void PseudoAI(Timer sender)
261    {
262      MessageDisplay.Add("Timer");
263      tankki2.Cannon.Power.Value = 10000;
264      tankki2.Cannon.Shoot();
265    }
266}
Note: See TracBrowser for help on using the repository browser.