source: 2010/30/vematata/SeikailuRoolipeli/Peli.cs @ 1426

Revision 1426, 9.0 KB checked in by vematata, 10 years ago (diff)
Line 
1using Jypeli;
2using Jypeli.Assets;
3
4public class Peli : PhysicsGame
5{
6    Vector nopeusYlos = new Vector(0, 300);
7    Vector nopeusAlas = new Vector(0, -300);
8    Vector nopeusVasen = new Vector(-300, 0);
9    Vector nopeusOikea = new Vector(300, 0);
10    double voima = 20;
11    //PhysicsObject pallo;
12
13    PhysicsObject hahmo;
14    PhysicsObject miekka;
15
16    Image miekanKuva = LoadImage("Miekka");
17
18   
19
20    protected override void Begin()
21    {
22        Testi();
23        AsetaOhjaimet();
24    }
25
26    void Testi()
27    {
28        Hahmo(-40, -40);
29        Kivi(45, -100, 180);
30        Kivi(50, 100, 100);
31        Kivi(200, 400, 50);
32        Otus(40, 40);
33        Otus(-100, -100);
34        Puu(40, -100, 100);
35        Puu(20, -190, -20);
36        Level.CreateBorders();
37    }
38
39    void Hahmo(double x, double y)
40    {
41        hahmo = new PhysicsObject(20,40, Shapes.Circle, CollisionShapeQuality.Best);
42        //hahmo.Shape = Shapes.Circle;
43        hahmo.Color = Color.GreenYellow;
44        hahmo.LinearDamping = 0.95;
45        hahmo.CanRotate = false;
46
47        Add(hahmo,0);
48        Miekka();
49
50        Camera.Follow(hahmo);
51        Camera.Zoom(1.5);
52    }
53
54    PhysicsObject Otus(double x, double y)
55    {
56        PhysicsObject otus = new PhysicsObject(20, 20, Shapes.Circle);
57        RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
58        otus.Brain = satunnaisAivot;
59        otus.X = x;
60        otus.Y = y;
61        otus.Restitution = 0.0;
62        Add(otus,0);
63        Timer Ajastin = new Timer();
64        Ajastin.Interval = 0.1;
65        Ajastin.Trigger += Aivot;
66        Ajastin.Tag = otus;
67        Ajastin.Start();
68        return (otus);
69
70    }
71
72    void Aivot(Timer Ajastin)
73    {
74        PhysicsObject kohde = Ajastin.Tag as PhysicsObject;
75       
76
77        if(kohde != null)
78        {
79            Vector etaisyys = new Vector(kohde.X - hahmo.X, kohde.Y - hahmo.Y);
80            if (etaisyys.Magnitude < 100 && (kohde.Brain is RandomMoverBrain||kohde.Brain is WandererBrain))
81            {
82                FollowerBrain seuraajaAivot = new FollowerBrain();
83                seuraajaAivot.Target = hahmo;
84                seuraajaAivot.MovingSpeed = 100;
85                seuraajaAivot.TargetFollowDistance = 100;
86                seuraajaAivot.FollowAlways = true;
87                seuraajaAivot.TargetCloseDistance = 200;
88                //seuraajaAivot.StopWhenTargetClose = true; 
89                kohde.Brain = seuraajaAivot;
90            }
91            else 
92            {
93                if(etaisyys.Magnitude > 100 && kohde.Brain is FollowerBrain)
94                {
95                    RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
96                    satunnaisAivot.ChangeMovementSeconds = 1;
97                    kohde.Brain = satunnaisAivot;
98                }
99            }
100        }
101       
102    }
103   
104   
105    PhysicsObject Kivi(double koko, double x, double y) 
106    {
107        PhysicsObject kivi = new PhysicsObject(koko, koko, Shapes.Circle);
108        kivi.Color = Color.DarkGray;
109        kivi.X = x;
110        kivi.Y = y;
111        kivi.LinearDamping = 0.85;
112        if (koko >= 100)
113            kivi.Mass = koko / 2;
114        else
115            kivi.Mass = koko / 10;
116        Add(kivi,0);
117        return(kivi);
118    }
119
120
121    void Poista(Timer Ajastin) 
122    {
123        ((PhysicsObject)Ajastin.Tag).Destroy();
124        Ajastin.Destroy();
125        if (((PhysicsObject)Ajastin.Tag).IsDestroyed() && Ajastin.IsDestroyed())
126            MessageDisplay.Add("tuhottu");
127    }
128
129    PhysicsObject Puu(double koko, double x, double y)
130    {
131        PhysicsObject runko = PhysicsObject.CreateStaticObject(koko, koko, Shapes.Circle);
132        PhysicsObject lehdet = new PhysicsObject(7*koko, 7*koko, Shapes.Circle);
133        lehdet.X = runko.X = x;
134        lehdet.Y = runko.Y = y;
135        lehdet.IgnoresCollisionResponse = true;
136        lehdet.IgnoresExplosions = true;
137        lehdet.Tag = "lehdet";
138        runko.Tag = "runko";
139        runko.Color = Color.Brown;
140        lehdet.Color = Color.ForestGreen;
141       
142        Timer Ajastin = new Timer();
143        Ajastin.Interval = 0.1;
144        Ajastin.Trigger += Lapinakyvyys;
145        Ajastin.Tag = lehdet;
146        Ajastin.Start();
147
148
149
150        Add(runko);
151        Add(lehdet, 3);
152
153        return(runko);
154    }
155
156    void Lapinakyvyys(Timer Ajastin) 
157    {
158        PhysicsObject kohde = Ajastin.Tag as PhysicsObject;
159
160        if(kohde != null)
161        {
162            Vector etaisyys = new Vector(kohde.X - hahmo.X, kohde.Y - hahmo.Y);
163            if (etaisyys.Magnitude < (kohde.Width/2+5))
164            {
165                kohde.IsVisible = false;
166            }
167            else 
168            {
169                kohde.IsVisible = true;
170            }
171        }
172   
173    }
174
175    PhysicsObject Seina(double leveys, double pituus, double x, double y)
176    {
177        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, pituus, Shapes.Rectangle);
178        seina.Color = Color.LightYellow;
179        seina.X = x;
180        seina.Y = y;
181        Add(seina);
182        return (seina);
183    }
184   
185    void AsetaOhjaimet()
186    {
187        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Liiku ylös", hahmo, nopeusYlos);
188        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
189        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Liiku alas", hahmo, nopeusAlas);
190        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
191        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "liiku vasemmalle", hahmo, nopeusVasen);
192        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
193        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Liiku oikealle", hahmo, nopeusOikea);
194        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
195
196                                   
197        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
198
199        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
200
201        AsetaHiiri();
202
203    }
204
205    void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
206    {
207        hahmo.Velocity = nopeus;
208        //miekka.Velocity = hahmo.Velocity;
209    }
210
211    void AsetaHiiri()
212    {
213        //pallo = new PhysicsObject(10.0, 10.0, Shapes.Circle);
214        //pallo.IgnoresExplosions = pallo.IgnoresCollisionResponse = true;
215        //Add(pallo);
216        Mouse.IsCursorVisible = true;
217        //Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
218        //Mouse.Listen(MouseButton.Left, ButtonState.Pressed, VoimanKeruu, null);
219        Mouse.Listen(MouseButton.Left, ButtonState.Down, LataaVoimaa, null, 2.0);
220        Mouse.Listen(MouseButton.Left, ButtonState.Released, Rajahdys, null);
221        Mouse.Listen(MouseButton.Right, ButtonState.Released, LuoPallo, null);
222
223    }
224    void LuoPallo()
225    {
226        double koko = RandomGen.NextDouble(10,20);
227        PhysicsObject pallo2 = new PhysicsObject(koko, koko, Shapes.Circle);
228        pallo2.Color = RandomGen.NextColor(Color.DarkBlue,Color.DarkViolet);
229        pallo2.Position = Mouse.PositionOnWorld;
230        pallo2.Restitution = 1.05;
231        Add(pallo2,0);
232        Timer Ajastin = new Timer();
233        Ajastin.Interval = 10.0;
234        Ajastin.Trigger += Poista;
235        Ajastin.Tag = pallo2;
236        Ajastin.Start();
237
238        MessageDisplay.Add("kumi pallona luokses pompin...");
239       
240    }
241
242    //void KuunteleLiiketta(AnalogState hiirenTila)
243    //{
244    //    pallo.X = Mouse.PositionOnWorld.X;
245    //    pallo.Y = Mouse.PositionOnWorld.Y;
246    //}
247    void LataaVoimaa(double lataaVoimaa) 
248    {
249        if (voima < 500)
250        {
251            voima += lataaVoimaa;
252            MessageDisplay.Add("lisätään voimaa");
253        }
254        else
255            MessageDisplay.Add("voima max");
256    }
257   
258
259    void Rajahdys() 
260    {
261       
262        Explosion rajahdys = new Explosion(voima/2);
263        rajahdys.Position = Mouse.PositionOnWorld; 
264        rajahdys.Speed = voima/2;
265        rajahdys.Force = voima*2;
266        Add(rajahdys);
267        voima = 20;
268        MessageDisplay.Add("pum");
269    }
270
271    void Teksti()
272    {
273        MessageDisplay.Add("loppu");
274    }
275    void Miekka()
276    {
277        miekka = new PhysicsObject(50,5);
278        miekka.IgnoresCollisionResponse = true;
279        miekka.IgnoresExplosions = true;
280        miekka.IgnoresPhysicsLogics = true;
281        //miekka.Image = Image.Mirror(miekanKuva);
282        Add(miekka,-1);
283        Timer Ajastin = new Timer();
284        Ajastin.Interval = 0.01;
285        Ajastin.Trigger += Miekansijainti;
286        Ajastin.Tag = miekka;
287        Ajastin.Start();
288    }
289
290     void Miekansijainti(Timer Ajastin) 
291    {
292         miekka.X = hahmo.X - 25;
293         miekka.Y = hahmo.Bottom;
294         miekka.Angle = hahmo.Angle;
295    }
296
297    protected override void Update(Time time)
298    {
299        hahmo.Angle = (Mouse.PositionOnWorld - hahmo.Position).Angle;       
300
301        base.Update(time);
302    }
303
304}
Note: See TracBrowser for help on using the repository browser.