source: 2011/24/OtsoM/Crazy Bus/Crazy Bus/FysiikkaPeli/Peli.cs @ 2094

Revision 2094, 9.1 KB checked in by otkamiet, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Physics2DDotNet.Joints;
7using Physics2DDotNet.Ignorers;
8
9
10
11
12
13/// <summary>
14/// Sivusta päin kuvattu auto, jossa on kaksi pyörää.
15/// </summary>
16class Auto : PhysicsObject
17{
18    public PhysicsObject vasenPyora;
19    public PhysicsObject oikeaPyora; 
20
21    public HingeJoint vasenLiitos;
22    public HingeJoint oikeaLiitos;
23
24    public Auto(double leveys, double korkeus)
25        : base(leveys, korkeus, Shape.Rectangle, CollisionShapeQuality.Best)
26    {
27        CollisionIgnorer = new ObjectIgnorer();
28        Mass = 1500;
29        AddedToGame += LisaaPyorat;
30    }
31
32    /// <summary>
33    /// Kiihdyttää.
34    /// </summary>
35    /// <remarks>
36    /// Vääntöä ei anneta suoraan parametrina, jotta kiihdytys toimii
37    /// helposti eri massoilla.
38    /// </remarks>
39    /// <param name="kiihtyvyys">Kiihtyvyys autolle</param>
40    public void Kiihdyta(double kiihtyvyys)
41    {
42        double kulmakiiht = kiihtyvyys * vasenPyora.Width / 2;
43        double hitaus = MomentOfInertia + vasenPyora.MomentOfInertia + oikeaPyora.MomentOfInertia;
44        double vaanto = kulmakiiht * hitaus;
45        double vaantoPerPyora = vaanto / 2;
46
47        vasenPyora.ApplyTorque(vaantoPerPyora);
48        oikeaPyora.ApplyTorque(vaantoPerPyora); 
49    }
50
51    void LisaaPyorat()
52    {
53        if (!(Game is PhysicsGame))
54            return;
55
56        Vector vasemmanAkselinPaikka = this.Position + new Vector(-Width / 4, -Height / 1.2);
57        Vector oikeanAkselinPaikka = this.Position + new Vector(Width / 4, -Height / 1.2);
58
59        vasenPyora = LuoPyora();
60        vasenPyora.Position = vasemmanAkselinPaikka;
61
62        oikeaPyora = LuoPyora();
63        oikeaPyora.Position = oikeanAkselinPaikka;
64
65
66        vasenLiitos = PhysicsGame.CreateHingeJoint(this, vasenPyora, vasemmanAkselinPaikka);
67        vasenLiitos.Softness = 0.001;
68        (Game as PhysicsGame).Add(vasenLiitos);
69
70        oikeaLiitos = PhysicsGame.CreateHingeJoint(this, oikeaPyora, oikeanAkselinPaikka);
71        oikeaLiitos.Softness = 0.001;
72        (Game as PhysicsGame).Add(oikeaLiitos);
73    }
74
75    public override void Destroy()
76    {
77        vasenLiitos.Lifetime.IsExpired = true;
78        oikeaLiitos.Lifetime.IsExpired = true;
79        vasenPyora.Destroy();
80        oikeaPyora.Destroy();
81        base.Destroy();
82    }
83
84    PhysicsObject LuoPyora()
85    {
86        double r = Height / 2;
87        PhysicsObject pyora = new PhysicsObject(2 * r, 2 * r, Shape.Circle);
88        pyora.Mass = this.Mass / 10;
89        pyora.Color = Color.Gray;
90        pyora.CollisionIgnorer = this.CollisionIgnorer;
91        pyora.AngularDamping = 0.95;
92        pyora.KineticFriction = 1.0;
93        (Game as PhysicsGame).Add(pyora);
94        return pyora;
95    }
96}
97
98
99
100
101class Peli : PhysicsGame
102{
103    Image Alastulonkuva = LoadImage("alastulo 2");
104    Image Lahdonkuva = LoadImage("Lahto");
105    Image Ylämäenkuva = LoadImage("ylämäki1");
106    Auto auto;
107    PhysicsObject Lahto;
108    public override void Begin()
109    {
110        ClearAll();
111         Gravity = new Vector(0, -1000);
112
113        //PhysicsObject rata = PhysicsObject.CreateStaticObject(900, 200, Shape.FromImage(LoadImage("rata 2")), CollisionShapeQuality.FromValue(1.0));
114        //Add(rata);
115        //rata.Shape = Shape.FromImage(LoadImage("rata 2"));
116        //rata.Image = LoadImage("rata 2");
117        PhysicsObject bus = new PhysicsObject(80, 33, Shape.Rectangle, CollisionShapeQuality.Best);
118        bus.Position = new Vector(-250, 0);
119        //Add(bus);
120        bus.Image = LoadImage("bus 1");
121
122        Camera.ZoomFactor = 1.5;
123
124
125
126
127
128        Luokentta();
129        auto = new Auto(150, 40);
130        auto.Color = Color.Red;
131        auto.X = Lahto.X;
132        auto.Y = Lahto.Y + 100;
133        Camera.Follow(auto);
134        Add(auto);
135        AsetaOhjaimet();
136    }
137
138
139    void AsetaOhjaimet()
140    {
141        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
142        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
143
144        Keyboard.Listen(Key.Down, ButtonState.Down, auto.Kiihdyta, "Aja vasemmalle", 0.8);
145        Keyboard.Listen(Key.Up, ButtonState.Down, auto.Kiihdyta, "Aja oikealle", -0.8);
146        Keyboard.Listen(Key.R, ButtonState.Pressed, Begin, "Aloita alusta");   
147    }                                                                                                                             
148
149
150    void Luokentta()
151    {
152        TileMap ruudut = TileMap.FromFile("rata paras 4.txt");
153
154
155
156        ruudut.SetTileMethod('T', LuoLuuppi);
157        ruudut.SetTileMethod('H', LuoIsoHyppyri);
158        ruudut.SetTileMethod('A', LuoAlastulo);
159        ruudut.SetTileMethod('K', LuoIsoKumpu);
160        ruudut.SetTileMethod('G', LuoMaali);
161        ruudut.SetTileMethod('D', LuoIsoMakiAlas);
162        ruudut.SetTileMethod('Y', LuoIsoMakiYlös);
163        ruudut.SetTileMethod('L', LuoLahto);
164        ruudut.SetTileMethod('M', LuoMaa);
165        ruudut.Execute(50, 50);
166
167
168
169
170    }
171
172    void LuoIsoHyppyri(Vector paikka, double leveys, double korkeus)
173    {
174        PhysicsObject IsoHyppyri = PhysicsObject.CreateStaticObject(leveys, korkeus, Shape.FromImage(LoadImage("hyppyri")), CollisionShapeQuality.Best);
175        IsoHyppyri.Image = LoadImage("hyppyri");
176        IsoHyppyri.Position = paikka;
177        IsoHyppyri.Size = new Vector(leveys * 3, korkeus);
178        IsoHyppyri.Color = Color.DarkOrange;
179        Add(IsoHyppyri);
180    }
181
182
183
184    void LuoMaa(Vector paikka, double leveys, double korkeus)
185    {
186
187
188        PhysicsObject Maa = PhysicsObject.CreateStaticObject(leveys, korkeus);
189        Maa.Position = paikka;
190        Maa.Shape = Shape.Rectangle;
191        Maa.Color = Color.LightPink;
192        Add(Maa);
193
194    }
195
196    void LuoLahto(Vector paikka, double leveys, double korkeus)
197    {
198        Lahto = PhysicsObject.CreateStaticObject(300, korkeus, Shape.FromImage(Lahdonkuva), CollisionShapeQuality.Best);
199        Lahto.Position = paikka;
200        Lahto.Image = Lahdonkuva;
201
202        Lahto.Color = Color.MediumVioletRed;
203        Add(Lahto);
204    }
205
206
207    void LuoSmooth(Vector paikka, double leveys, double korkeus)
208    {
209        PhysicsObject Smooth = PhysicsObject.CreateStaticObject(leveys, korkeus);
210        Smooth.Position = paikka;
211        Smooth.Shape = Shape.Rectangle;
212        Smooth.Color = Color.SkyBlue;
213        Add(Smooth);
214    }
215
216
217
218
219    void LuoAlastulo(Vector paikka, double leveys, double korkeus)
220    {
221        PhysicsObject alastulo = PhysicsObject.CreateStaticObject(200, korkeus, Shape.FromImage(Alastulonkuva), CollisionShapeQuality.Best);
222        alastulo.Position = paikka;
223        Add(alastulo);
224        alastulo.Image = Alastulonkuva;
225
226    }
227
228
229
230    void LuoIsoMakiYlös(Vector paikka, double leveys, double korkeus)
231    {
232        PhysicsObject IsoMakiYlös = PhysicsObject.CreateStaticObject(leveys * 8, korkeus * 4, Shape.FromImage(LoadImage("ylamaki 2")), CollisionShapeQuality.Best);
233        IsoMakiYlös.Position = new Vector(paikka.X, paikka.Y + IsoMakiYlös.Height / 2-leveys/2);
234        IsoMakiYlös.Image = LoadImage("ylamaki 2");
235        //IsoMakiYlös.Color = Color.Transparent;
236        Add(IsoMakiYlös);
237    }
238
239
240
241
242
243     void LuoIsoMakiAlas(Vector paikka, double leveys, double korkeus)
244    {
245        PhysicsObject IsoMakiAlas = PhysicsObject.CreateStaticObject(leveys * 8, korkeus * 4, Shape.FromImage(LoadImage("alamaki 1")), CollisionShapeQuality.Best);
246        IsoMakiAlas.Position = new Vector(paikka.X, paikka.Y + IsoMakiAlas.Height / 2 - leveys / 2);
247        IsoMakiAlas.Image = LoadImage("alamaki 1");
248        //IsoMakiYlös.Color = Color.Transparent;
249        Add(IsoMakiAlas);
250    }
251
252
253
254
255
256
257   
258     void LuoIsoKumpu(Vector paikka, double leveys, double korkeus)
259     {
260         PhysicsObject IsoKumpu = PhysicsObject.CreateStaticObject(leveys * 8, korkeus * 4, Shape.FromImage(LoadImage("kummut1")), CollisionShapeQuality.Best);
261         IsoKumpu.Position = new Vector(paikka.X, paikka.Y + IsoKumpu.Height / 2 - leveys / 2);
262         IsoKumpu.Image = LoadImage("kummut1");
263         //IsoMakiYlös.Color = Color.Transparent;
264         Add(IsoKumpu);
265     }
266
267
268
269
270
271
272     void LuoLuuppi(Vector paikka, double leveys, double korkeus)
273     {
274         PhysicsObject Luuppi = PhysicsObject.CreateStaticObject(leveys * 8, korkeus * 4, Shape.FromImage(LoadImage("Luuppi1")), CollisionShapeQuality.Best);
275         Luuppi.Position = new Vector(paikka.X, paikka.Y + Luuppi.Height / 2 - leveys / 2);
276         Luuppi.Image = LoadImage("Luuppi1");
277         //IsoMakiYlös.Color = Color.Transparent;
278         Add(Luuppi);
279     }
280
281
282
283
284
285
286
287
288     void LuoMaali(Vector paikka, double leveys, double korkeus)
289     {
290         PhysicsObject Maali = PhysicsObject.CreateStaticObject(leveys * 8, korkeus * 4, Shape.FromImage(LoadImage("Maali1")), CollisionShapeQuality.Best);
291         Maali.Position = new Vector(paikka.X, paikka.Y + Maali.Height / 2 - leveys / 2);
292         Maali.Image = LoadImage("Maali1");
293         //IsoMakiYlös.Color = Color.Transparent;
294         Add(Maali);
295     }
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316}
Note: See TracBrowser for help on using the repository browser.