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

Revision 1414, 9.1 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    void LuoPallo()
121    {
122        double koko = RandomGen.NextDouble(10,20);
123        PhysicsObject pallo2 = new PhysicsObject(koko, koko, Shapes.Circle);
124        pallo2.Color = RandomGen.NextColor(Color.DarkBlue,Color.DarkViolet);
125        pallo2.Position = Mouse.PositionOnWorld;
126        pallo2.Restitution = 1.05;
127        Add(pallo2,0);
128        Timer Ajastin = new Timer();
129        Ajastin.Interval = 10.0;
130        Ajastin.Trigger += Poista;
131        Ajastin.Tag = pallo2;
132        Ajastin.Start();
133
134        MessageDisplay.Add("kumi pallona luokses pompin...");
135       
136    }
137
138    void Poista(Timer Ajastin) 
139    {
140        ((PhysicsObject)Ajastin.Tag).Destroy();
141        Ajastin.Destroy();
142        if (((PhysicsObject)Ajastin.Tag).IsDestroyed() && Ajastin.IsDestroyed())
143            MessageDisplay.Add("tuhottu");
144    }
145
146    PhysicsObject Puu(double koko, double x, double y)
147    {
148        PhysicsObject runko = PhysicsObject.CreateStaticObject(koko, koko, Shapes.Circle);
149        PhysicsObject lehdet = new PhysicsObject(7*koko, 7*koko, Shapes.Circle);
150        lehdet.X = runko.X = x;
151        lehdet.Y = runko.Y = y;
152        lehdet.IgnoresCollisionResponse = true;
153        lehdet.IgnoresExplosions = true;
154        lehdet.Tag = "lehdet";
155        runko.Tag = "runko";
156        runko.Color = Color.Brown;
157        lehdet.Color = Color.ForestGreen;
158       
159        Timer Ajastin = new Timer();
160        Ajastin.Interval = 0.1;
161        Ajastin.Trigger += Lapinakyvyys;
162        Ajastin.Tag = lehdet;
163        Ajastin.Start();
164
165
166
167        Add(runko);
168        Add(lehdet, 3);
169
170        return(runko);
171    }
172
173    void Lapinakyvyys(Timer Ajastin) 
174    {
175        PhysicsObject kohde = Ajastin.Tag as PhysicsObject;
176
177        if(kohde != null)
178        {
179            Vector etaisyys = new Vector(kohde.X - hahmo.X, kohde.Y - hahmo.Y);
180            if (etaisyys.Magnitude < (kohde.Width/2+5))
181            {
182                kohde.IsVisible = false;
183            }
184            else 
185            {
186                kohde.IsVisible = true;
187            }
188        }
189   
190    }
191
192    PhysicsObject Seina(double leveys, double pituus, double x, double y)
193    {
194        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, pituus, Shapes.Rectangle);
195        seina.Color = Color.LightYellow;
196        seina.X = x;
197        seina.Y = y;
198        Add(seina);
199        return (seina);
200    }
201   
202    void AsetaOhjaimet()
203    {
204        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Liiku ylös", hahmo, nopeusYlos);
205        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
206        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Liiku alas", hahmo, nopeusAlas);
207        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
208        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "liiku vasemmalle", hahmo, nopeusVasen);
209        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
210        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Liiku oikealle", hahmo, nopeusOikea);
211        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
212
213                                   
214        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
215
216        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
217
218        AsetaHiiri();
219
220    }
221
222    void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
223    {
224        hahmo.Velocity = nopeus;
225        //miekka.Velocity = hahmo.Velocity;
226    }
227
228    void AsetaHiiri()
229    {
230        //pallo = new PhysicsObject(10.0, 10.0, Shapes.Circle);
231        //pallo.IgnoresExplosions = pallo.IgnoresCollisionResponse = true;
232        //Add(pallo);
233        Mouse.IsCursorVisible = true;
234        //Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
235        //Mouse.Listen(MouseButton.Left, ButtonState.Pressed, VoimanKeruu, null);
236        Mouse.Listen(MouseButton.Left, ButtonState.Down, LataaVoimaa, null, 2.0);
237        Mouse.Listen(MouseButton.Left, ButtonState.Released, Rajahdys, null);
238        Mouse.Listen(MouseButton.Right, ButtonState.Released, LuoPallo, null);
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,50);
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     void Miekansijainti(Timer Ajastin) 
290    {
291         //miekka.Position = hahmo.Position;
292         miekka.X = hahmo.X ;
293         miekka.Y = hahmo.Y ;
294         miekka.Angle = hahmo.Angle;
295    }
296    protected override void Update(Time time)
297    {
298        hahmo.Angle = (Mouse.PositionOnWorld - hahmo.Position).Angle;
299        //Miekansijainti();
300       
301
302        base.Update(time);
303    }
304
305}
Note: See TracBrowser for help on using the repository browser.