source: lassi_h/Tankkipeli/Peli.cs @ 88

Revision 88, 10.1 KB checked in by lamahama, 11 years ago (diff)
Line 
1#region Usings
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using Microsoft.Xna.Framework;
6using Microsoft.Xna.Framework.Audio;
7using Microsoft.Xna.Framework.Content;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using Jypeli;
12using Jypeli.ScreenObjects;
13using Jypeli.Assets;
14using AdvanceMath;
15using Physics2DDotNet;
16using Physics2DDotNet.Shapes;
17#endregion
18
19namespace Tankkipeli
20{
21    public class Peli : PhysicsGame
22    {
23       
24        public Tank tankki;
25        public Tank tankki2;
26        public BarGauge g1;
27        public BarGauge g2;
28        public BarGauge h1;
29        public BarGauge h2;
30        public byte JetPackON1;
31        public byte JetPackON2;
32        public int Weapon1 = 0;
33        public int Weapon2 = 0;
34        public List<CannonBall> Aseet;
35       
36        protected override void LoadContent()
37        {
38            // Luodaan tankki ja lisätään se peliin
39            tankki = new Tank(this, "tankki");
40            Level.Objects.Add(tankki);
41
42            tankki2 = new Tank(this, "tankki2");
43            Level.Objects.Add(tankki2);
44            // Luodaan maasto
45            Level.CreateGround(10, 50, 20, Color.LightGreen);
46            tankki.HitPoints.Value = 1000;
47            tankki2.HitPoints.Value = 1000;
48            g1 = new BarGauge(this);
49            g1.Angle = Angle.Degrees(270);
50            g1.X = 300;
51            g1.Y = Level.Bottom + 10;
52            g1.Max = 15000.0;
53            g1.Height = Level.Right - 100;
54            Add(g1);
55            g2 = new BarGauge(this);
56            g2.Angle = Angle.Degrees(90);
57            g2.X = -300;
58            g2.Y = Level.Bottom + 10;
59            g2.Max = 15000.0;
60            g2.Height = Level.Right - 100;
61            Add(g2);
62
63            h1 = new BarGauge(this);
64            h1.Angle = Angle.Degrees(270);
65            h1.X = 300;
66            h1.Y = Level.Bottom + 20;
67            h1.Max = 500.0;
68            h1.Height = Level.Right - 100;
69            h1.ValueColor = new Color(0, 255, 0);
70            Add(h1);
71
72            h2 = new BarGauge(this);
73            h2.Angle = Angle.Degrees(90);
74            h2.X = -300;
75            h2.Y = Level.Bottom + 20;
76            h2.Max = 500.0;
77            h2.Height = Level.Right - 100;
78            h2.ValueColor = new Color(0, 255, 0);
79            Add(h2);
80
81            Aseet = new List<CannonBall>();
82
83            CannonBall panos = new CannonBall();
84            panos.Shape = Shapes.CreateCircle(5.0);
85            panos.Damage = new Damage(5);
86            panos.ClusterType = new ClusterCannonball(0);
87           
88            panos.NumClusters = 2;
89            panos.ClusterArc = 10;
90            Aseet.Add(panos);
91
92           
93
94            CannonBall panos2 = new CannonBall();
95            panos2.Shape = Shapes.CreateCircle(3.0);
96            panos2.Damage = new Damage(10);
97            Aseet.Add(panos2);
98
99            CannonBall panos3 = new CannonBall();
100            panos3.Shape = Shapes.CreateCircle(8.0);
101            panos3.Damage = new Damage(1);
102            panos3.ClusterType = new ClusterCannonball(1);
103            panos3.Explosion.Force = 10000;
104            panos3.NumClusters = 5;
105            panos3.ClusterArc = 2;
106            Aseet.Add(panos3);
107
108            tankki.Cannon.Clip = new Clip(panos);
109
110            // Luodaan reunat
111            Level.CreateBorder();
112
113            // Asemoidaan tankkit
114
115            tankki.Y = Level.Bottom + 100;
116            tankki.X = Level.Right - 100;
117
118            tankki2.Y = Level.Bottom + 100;
119            tankki2.X = Level.Left + 100;
120           
121            // Asetetaan painovoima
122            Gravity = new Vector2D(0, -200);
123
124            // Asetetaan näppäimet
125            Controls.Listen(Keys.Left, ButtonPosition.Down, aja1, "Liiku vasemmalle", tankki, Tank.MaxTorque*4);
126            Controls.Listen(Keys.Right, ButtonPosition.Down, aja1, "Liiku oikealle", tankki, -Tank.MaxTorque*4);
127            Controls.Listen(Keys.Up, ButtonPosition.Down, kaannaPutkea, "Käännä putkea vastapäivään", tankki, Angle.Degrees(1));
128            Controls.Listen(Keys.Down, ButtonPosition.Down, kaannaPutkea, "Käännä putkea myötäpäivään", tankki, Angle.Degrees(-1));
129            Controls.Listen(Keys.M, ButtonPosition.Down, lisaatehoja, "", tankki);
130            Controls.Listen(Keys.M, ButtonPosition.Released, ammupanos, "Ammu", tankki);
131            Controls.Listen(Keys.N, ButtonPosition.Down, JetPack1, "Rakettimoottori", tankki);
132            Controls.Listen(Keys.B, ButtonPosition.Pressed, NextWeapon1, "Seuraava ase", tankki);
133            Controls.Listen(Keys.V, ButtonPosition.Pressed, BeforeWeapon1, "Edellinen ase", tankki);
134
135            Controls.Listen(Keys.D, ButtonPosition.Down, aja2, "Liiku vasemmalle", tankki2, Tank.MaxTorque * 4);
136            Controls.Listen(Keys.G, ButtonPosition.Down, aja2, "Liiku oikealle", tankki2, -Tank.MaxTorque * 4);
137            Controls.Listen(Keys.R, ButtonPosition.Down, kaannaPutkea, "Käännä putkea vastapäivään", tankki2, Angle.Degrees(1));
138            Controls.Listen(Keys.F, ButtonPosition.Down, kaannaPutkea, "Käännä putkea myötäpäivään", tankki2, Angle.Degrees(-1));
139            Controls.Listen(Keys.D4, ButtonPosition.Down, lisaatehoja, "", tankki2);
140            Controls.Listen(Keys.D4, ButtonPosition.Released, ammupanos, "Ammu", tankki2);
141            Controls.Listen(Keys.D2, ButtonPosition.Pressed, NextWeapon2, "Seuraava ase", tankki);
142            Controls.Listen(Keys.D1, ButtonPosition.Pressed, BeforeWeapon2, "Edellinen ase", tankki);
143
144            Controls.Listen(Keys.D3, ButtonPosition.Down, JetPack2, "Rakettimoottori", tankki2);
145            AddCollisionHandler(tankki, JetPackOFF1);
146            AddCollisionHandler(tankki2, JetPackOFF2);
147        }
148
149        bool NextWeapon1(ControlEvent e)
150        {
151            Weapon1 += 1;
152            if (Weapon1 > 2)
153            {
154                Weapon1 = 0;
155            }
156            tankki.Cannon.Clip = new Clip(Aseet[Weapon1]);
157            return false;
158        }
159
160        bool BeforeWeapon1(ControlEvent e)
161        {
162            Weapon1 -= 1;
163            if (Weapon1 < 0)
164            {
165                Weapon1 = 2;
166            }
167             tankki.Cannon.Clip = new Clip(Aseet[Weapon1]);
168            return false;
169        }
170        bool NextWeapon2(ControlEvent e)
171        {
172            Weapon2 += 1;
173            if (Weapon2 > 2)
174            {
175                Weapon2 = 0;
176            }
177            tankki2.Cannon.Clip = new Clip(Aseet[Weapon2]);
178            return false;
179        }
180
181        bool BeforeWeapon2(ControlEvent e)
182        {
183            Weapon2 -= 1;
184            if (Weapon2 < 0)
185            {
186                Weapon2 = 2;
187            }
188            tankki2.Cannon.Clip = new Clip(Aseet[Weapon2]);
189            return false;
190        }
191        bool aja1(ControlEvent e)
192        {
193            Tank t = e.Parameter0 as Tank;
194
195            double vaanto = e.Parameter1.ToDouble();
196
197            // Kiihdytetään tankin vauhtia
198           
199           
200            if (JetPackON1 == 0)
201            {
202                t.Accelerate(vaanto);
203            }
204            else
205            {
206                if (vaanto > 0.0)
207                {
208                  t.Hull.Body.ApplyTorque(1000000); 
209                }
210                else
211                {
212                  t.Hull.Body.ApplyTorque(-1000000); 
213                }
214               
215            }
216
217           
218
219            return false;
220        }
221        bool aja2(ControlEvent e)
222        {
223            Tank t = e.Parameter0 as Tank;
224
225            double vaanto = e.Parameter1.ToDouble();
226
227            // Kiihdytetään tankin vauhtia
228
229
230            if (JetPackON2 == 0)
231            {
232                t.Accelerate(vaanto);
233            }
234            else
235            {
236                if (vaanto > 0.0)
237                {
238                    t.Hull.Body.ApplyTorque(1000000);
239                }
240                else
241                {
242                    t.Hull.Body.ApplyTorque(-1000000);
243                }
244
245            }
246
247
248
249            return false;
250        }
251        bool lisaatehoja(ControlEvent e)
252        {
253            Tank t = e.Parameter0 as Tank;
254            if (t.Cannon.Power.Value < 14900)
255            {
256                t.Cannon.Power.Value += 100.0;
257            }
258            return false;
259        }
260        void JetPackOFF1(Collision collision)
261        {
262            if (collision.Other == Level.BottomBorder)
263            {
264                JetPackON1 = 0;
265            }
266        }
267        void JetPackOFF2(Collision collision)
268        {
269            if (collision.Other == Level.BottomBorder)
270            {
271                JetPackON2 = 0;
272            }
273        }
274        bool kaannaPutkea(ControlEvent e)
275        {
276            Tank t = e.Parameter0 as Tank;
277            Angle kaanto = e.Parameter1.ToAngle();
278
279            // Tässä käännetään tankin piippua
280            t.TurnCannon(kaanto);
281
282            return false;
283        }
284        bool JetPack1(ControlEvent e)
285        {
286            Tank t = e.Parameter0 as Tank;
287            Angle kulma = t.Hull.Angle + Angle.Degrees(90);
288
289            t.Hit(Vector2D.FromLengthAndAngle(1000,kulma.Radian));
290            JetPackON1 = 1;
291            return false;
292        }
293        bool JetPack2(ControlEvent e)
294        {
295            Tank t = e.Parameter0 as Tank;
296            Angle kulma = t.Hull.Angle + Angle.Degrees(90);
297
298            t.Hit(Vector2D.FromLengthAndAngle(1000, kulma.Radian));
299            JetPackON2 = 1;
300            return false;
301        }
302        bool ammupanos(ControlEvent e)
303        {
304            Tank t = e.Parameter0 as Tank;     
305            t.Shoot();
306            t.Cannon.Power.Value = 0;
307            return false;
308        }
309
310        protected override void Update(GameTime gameTime)
311        {
312            g1.BindTo(tankki.Cannon.Power);
313            g2.BindTo(tankki2.Cannon.Power);
314            h1.BindTo(tankki.HitPoints);
315            h2.BindTo(tankki2.HitPoints); 
316            base.Update(gameTime);
317        }
318    }
319}
Note: See TracBrowser for help on using the repository browser.