source: 2010/27/patammi/Autopeli1/Peli.cs @ 1231

Revision 1231, 8.8 KB checked in by paaaanro, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6//Janne Ja Paveli
7public class Peli : TopDownPhysicsGame
8{
9    Automobile auto;
10    Automobile auto2;
11
12    LaserGun laserPyssy1;
13    LaserGun laserPyssy2;
14
15    PhysicsObject OilBarrel;
16    PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
17
18    BarGauge auton1palkki, auton2palkki;
19    DoubleMeter auton1hp, auton2hp;
20
21    ExplosionSystem es;
22
23    protected override void Begin()
24    {
25        Level.Background.Image = LoadImage("Untitled");
26        Level.Background.Size = new Vector(Level.Width, Level.Height);
27        KineticFriction = 100.00; // Asetetaan kitka
28
29        PhysicsObject maila = PhysicsObject.CreateStaticObject(20.0, 100.0);
30        maila.Shape = Shapes.Rectangle;
31        maila.X = Level.Left + 150.0;
32        maila.Y = 0.0;
33        maila.Restitution = 1.0;
34        Add(maila);
35        maila.Color = Color.Black;
36
37        PhysicsObject maila2 = PhysicsObject.CreateStaticObject(20.0, 100.0);
38        maila2.Shape = Shapes.Rectangle;
39        maila2.X = Level.Right - 150.0;
40        maila2.Y = 0.0;
41        maila2.Restitution = 1.0;
42        Add(maila2);
43        maila2.Color = Color.Red;
44
45        auto = new Automobile(40, 20);
46        auto.Mass = 25.0;
47        auto.Maneuverability = Angle.Degrees(120);
48        auto.Color = new Color(0, 0, 0);
49        auto.AngularDamping = 0.9;
50        auto.X = Level.Right - 20.0;
51        Add(auto);
52
53
54
55        auto2 = new Automobile(40, 20);
56        auto2.Mass = 25.0;
57        auto2.Maneuverability = Angle.Degrees(120);
58        auto2.Color = new Color(192, 192, 255);
59        auto2.AngularDamping = 0.9;
60        auto2.X = Level.Left + 20.0;
61
62        Add(auto2);
63
64        LisaaAseet();
65
66        for (int a = 0; a < 21; a++)
67        {
68            LisaaOilBarrel();
69        }
70
71        Camera.ZoomToLevel(5);
72        Level.CreateBorders(1.0, false);
73
74
75        luoHpMittarit();
76        AsetaNappaimet();
77        AsetaXBoxOhjaimet();
78
79
80        LataaRajahdys();
81        ControllerOne.Vibrate(0.5, 0.5, 0.0, 0.0, 0.1);
82    }
83    void LisaaAseet()
84    {
85        laserPyssy1 = new LaserGun(20, 15);
86        laserPyssy1.Color = Color.Green;
87        laserPyssy1.TimeBetweenUse = TimeSpan.FromSeconds(0.6);
88        laserPyssy1.LaserCollision += laserOsuu;
89        auto.Add(laserPyssy1);
90
91        laserPyssy2 = new LaserGun(40, 5);
92        laserPyssy2.TimeBetweenUse = TimeSpan.FromSeconds(0.6 );
93        laserPyssy2.LaserCollision += laserOsuu;
94        auto2.Add(laserPyssy2);
95    }
96
97    //Controller
98
99    void luoHpMittarit()
100    {
101        auton1hp = new DoubleMeter(100);
102        auton1hp.MaxValue = 100;
103        auton1hp.MinValue = 0;
104        auton1hp.LowerLimit += new Meter<double>.OnLimitHandler(auto1kuoli);
105        auton1palkki = new BarGauge(100, 15);
106        auton1palkki.BarColor = Color.Red;
107        auton1palkki.BorderColor = Color.Black;
108        auton1palkki.Position = new Vector(Screen.Right - 100, Screen.Top - 100);
109        auton1palkki.BindTo(auton1hp);
110        Add(auton1palkki);
111
112        auton2hp = new DoubleMeter(100);
113        auton2hp.MaxValue = 100;
114        auton2hp.MinValue = 0;
115        auton2hp.LowerLimit += new Meter<double>.OnLimitHandler(auto2kuoli);
116        auton2palkki = new BarGauge(100, 15);
117        auton2palkki.BarColor = Color.Red;
118        auton2palkki.BorderColor = Color.Black;
119        auton2palkki.Position = new Vector(Screen.Left + 100, Screen.Top - 100);
120        auton2palkki.BindTo(auton2hp);
121        Add(auton2palkki);
122    }
123
124    void auto2kuoli(double value)
125    {
126        auto2.Position = new Vector(Level.Left + 20, 0);
127        auton2hp.Value = 100;
128    }
129
130    void auto1kuoli(double value)
131    {
132        auto.Position = new Vector(Level.Right - 20, 0);
133        auton1hp.Value = 100;
134    }
135
136    void LataaRajahdys()
137    {
138        Image expl = LoadImage("Red");
139        es = new ExplosionSystem(expl, 500);
140        Add(es);
141
142    }
143
144    void AsetaXBoxOhjaimet()
145    {
146
147        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.");
148        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, kiihdyta, null, auto);
149        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Down, jarruta, null, auto);
150        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa2, "Liikuta pelaajaa tattia pyörittämällä.");
151        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, kiihdyta, null, auto2);
152        ControllerTwo.Listen(Button.LeftTrigger, ButtonState.Down, jarruta, null, auto2);
153
154
155        ControllerOne.Listen(Button.A, ButtonState.Down, Ammu, null, laserPyssy1, auto);
156        ControllerTwo.Listen(Button.A, ButtonState.Down, Ammu, null, laserPyssy2, auto2);
157    }
158    void LiikutaPelaajaa(AnalogState state)
159    {
160        auto.Turn(Angle.Degrees(state.StateVector.X * -4), Time.SinceLastUpdate.TotalSeconds);
161    }
162    void LiikutaPelaajaa2(AnalogState state)
163    {
164        auto2.Turn(Angle.Degrees(state.StateVector.X * -4), Time.SinceLastUpdate.TotalSeconds);
165    }
166    void AsetaNappaimet()
167    {
168        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
169        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
170        Keyboard.Listen(Key.Up, ButtonState.Down, kiihdyta, "Kiihdytä", auto);
171        Keyboard.Listen(Key.Down, ButtonState.Down, jarruta, "Jarruta", auto);
172        Keyboard.Listen(Key.Left, ButtonState.Down, kaanny, "Käänny vasemmalle", auto, Angle.Degrees(2));
173        Keyboard.Listen(Key.Right, ButtonState.Down, kaanny, "Käänny oikealle", auto, Angle.Degrees(-2));
174
175        Keyboard.Listen(Key.W, ButtonState.Down, kiihdyta, "Kiihdytä", auto2);
176        Keyboard.Listen(Key.S, ButtonState.Down, jarruta, "Jarruta", auto2);
177        Keyboard.Listen(Key.A, ButtonState.Down, kaanny, "Käänny vasemmalle", auto2, Angle.Degrees(2));
178        Keyboard.Listen(Key.D, ButtonState.Down, kaanny, "Käänny oikealle", auto2, Angle.Degrees(-2));
179
180
181        Keyboard.Listen(Key.M, ButtonState.Down, Ammu, "ammu", laserPyssy1, auto);
182        Keyboard.Listen(Key.V, ButtonState.Down, Ammu, "ammu", laserPyssy2, auto2);
183
184    }
185
186    void Ammu(LaserGun ase, PhysicsObject ampuja)
187    {
188        PhysicsObject ammus = ase.Shoot();
189        if (ammus != null)
190        {
191            ammus.Width *= 2;
192            ammus.Height *=2;
193            ammus.Tag = ampuja;
194            AddCollisionHandler(ammus, laserOsuu);
195        }
196    }
197
198    void laserOsuu(PhysicsObject laser, PhysicsObject kohde)
199    {
200        if (kohde == auto && laser.Tag != auto)
201        {
202            auton1hp.Value -= 15;
203        }
204        if (kohde == auto2 && laser.Tag != auto2)
205        {
206            auton2hp.Value -= 15;
207        }
208        if (kohde.Tag.ToString() == "oilbarrel")
209        {
210            double etaisyys = Etaisyys(kohde.Position, auto.Position);
211            double etaisyys2 = Etaisyys(kohde.Position, auto2.Position);
212            if (etaisyys < 150)
213            {
214                VahennaHP(auto);
215            }
216            if (etaisyys2 < 150)
217            {
218                VahennaHP(auto2);
219            }
220        }
221    }
222
223
224    void kiihdyta(Automobile auto)
225    {
226        auto.Accelerate(Time.SinceLastUpdate.TotalSeconds);
227    }
228
229    void jarruta(Automobile auto)
230    {
231        auto.Brake(Time.SinceLastUpdate.TotalSeconds);
232    }
233
234    void kaanny(Automobile auto, Angle kaannos)
235    {
236        auto.Turn(kaannos, Time.SinceLastUpdate.TotalSeconds);
237    }
238
239    double Etaisyys(Vector p1, Vector p2)
240    {
241        double dx = Math.Abs(p1.X - p2.X);
242        double dy = Math.Abs(p1.Y - p2.Y);
243        return Math.Sqrt(dx * dx + dy * dy);
244    }
245
246
247    void Rajahdys(PhysicsObject tormaaja, PhysicsObject kohde)
248    {
249        es.AddEffect(tormaaja.X, tormaaja.Y, 984);
250        tormaaja.Destroy();
251        //if (kohde == auto && OilBarrel.Tag != auto)
252
253        VahennaHP(kohde);
254        LisaaOilBarrel();
255
256
257    }
258
259    void VahennaHP(PhysicsObject kohde)
260    {
261        if (kohde == auto)
262        {
263            auton1hp.Value -= 75;
264            return;
265        }
266        //        if (kohde == auto2 && OilBarrel.Tag != auto2)
267        if (kohde == auto2)
268        {
269            auton2hp.Value -= 75;
270            return;
271
272        }
273    }
274
275    void LisaaOilBarrel()
276    {
277        OilBarrel = new PhysicsObject(15, 15, Shapes.Circle);
278        OilBarrel.Mass = 1000;
279        OilBarrel.LinearDamping = 0.9;
280        OilBarrel.Tag = "oilbarrel";
281        Add(OilBarrel);
282        AddCollisionHandler(OilBarrel, Rajahdys);
283        OilBarrel.X = RandomGen.NextDouble(Level.Left, Level.Right);
284        OilBarrel.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
285        OilBarrel.Color = RandomGen.NextColor();
286    }
287
288}
Note: See TracBrowser for help on using the repository browser.