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

Revision 1392, 6.2 KB checked in by vematata, 13 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    PhysicsObject pallo;
11    PhysicsObject pallo2;
12   
13   
14
15    PhysicsObject hahmo;
16
17    protected override void Begin()
18    {
19        Testi();
20        AsetaOhjaimet();
21    }
22
23    void Testi()
24    {
25        Hahmo(0, 0);
26        Kivi(45, -100, 180);
27        Kivi(50, 100, 100);
28        Kivi(200, 400, 50);
29        Puu(40, -100, 100);
30        Puu(20, -190, -20);
31        Seina(1000, 100, 0, 550);
32        Seina(1000, 100, 0, -550);
33        Seina(100, 1000, 550, 0);
34        Seina(100, 1000, -550, 0);
35    }
36
37    void Hahmo(double x, double y)
38    {
39        hahmo = new PhysicsObject(40,40);
40        hahmo.Shape = Shapes.Circle;
41        hahmo.Color = Color.GreenYellow;
42        hahmo.X = x;
43        hahmo.Y = y;
44        hahmo.LinearDamping = 0.5;
45        Add(hahmo);
46
47        Camera.Follow(hahmo);
48        Camera.Zoom(1.5);
49    }
50   
51    PhysicsObject Kivi(double koko, double x, double y) 
52    {
53        PhysicsObject kivi = new PhysicsObject(koko, koko, Shapes.Circle);
54        kivi.Color = Color.DarkGray;
55        kivi.X = x;
56        kivi.Y = y;
57        kivi.LinearDamping = 0.85;
58        if (koko >= 100)
59            kivi.Mass = koko * 2;
60        else
61            kivi.Mass = koko / 2;
62        Add(kivi);
63        return(kivi);
64    }
65
66    void LuoPallo()
67    {
68        double koko = RandomGen.NextDouble(10,20);
69        pallo2 = new PhysicsObject(koko, koko, Shapes.Circle);
70        pallo2.Color = RandomGen.NextColor(Color.DarkBlue,Color.DarkViolet);
71        pallo2.Position = Mouse.PositionOnWorld;
72        pallo2.Restitution = 1.05;
73        Add(pallo2);
74        Timer Ajastin2 = new Timer();
75        Ajastin2.Interval = 10.0;
76        Ajastin2.Trigger += Poista;
77        Ajastin2.Tag = pallo2;
78        Ajastin2.Start();
79
80        MessageDisplay.Add("kumi pallona luokses pompin...");
81        if (Ajastin2.IsDestroyed())
82            MessageDisplay.Add("onnistui");
83       
84    }
85
86    void Poista(Timer Ajastin2) 
87    {
88        pallo2.Destroy();
89        Ajastin2.Destroy();
90        if (pallo2.IsDestroyed() && Ajastin2.IsDestroyed())
91            MessageDisplay.Add("tuhottu");
92    }
93
94    PhysicsObject Puu(double koko, double x, double y)
95    {
96        PhysicsObject runko = PhysicsObject.CreateStaticObject(koko, koko, Shapes.Circle);
97        PhysicsObject lehdet = new PhysicsObject(7*koko, 7*koko, Shapes.Circle);
98        lehdet.X = runko.X = x;
99        lehdet.Y = runko.Y = y;
100        lehdet.IgnoresCollisionResponse = true;
101        lehdet.IgnoresExplosions = true;
102        lehdet.Tag = "lehdet";
103        runko.Tag = "runko";
104        runko.Color = Color.Brown;
105        lehdet.Color = Color.ForestGreen;
106       
107        Timer Ajastin = new Timer();
108        Ajastin.Interval = 0.1;
109        Ajastin.Trigger += Lapinakyvyys;
110        Ajastin.Tag = lehdet;
111        Ajastin.Start();
112
113
114
115        Add(runko);
116        Add(lehdet);
117
118        return(runko);
119    }
120
121    void Lapinakyvyys(Timer Ajastin) 
122    {
123        PhysicsObject kohde = Ajastin.Tag as PhysicsObject;
124
125        if(kohde != null)
126        {
127            Vector etaisyys = new Vector(kohde.X - hahmo.X, kohde.Y - hahmo.Y);
128            if (etaisyys.Magnitude < (kohde.Width/2+10))
129            {
130                kohde.IsVisible = false;
131            }
132            else 
133            {
134                kohde.IsVisible = true;
135            }
136        }
137   
138    }
139
140    PhysicsObject Seina(double leveys, double pituus, double x, double y)
141    {
142        PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, pituus, Shapes.Rectangle);
143        seina.Color = Color.LightYellow;
144        seina.X = x;
145        seina.Y = y;
146        Add(seina);
147        return (seina);
148    }
149   
150    void AsetaOhjaimet()
151    {
152        Keyboard.Listen(Key.W, ButtonState.Down, AsetaNopeus, "Liiku ylös", hahmo, nopeusYlos);
153        Keyboard.Listen(Key.W, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
154        Keyboard.Listen(Key.S, ButtonState.Down, AsetaNopeus, "Liiku alas", hahmo, nopeusAlas);
155        Keyboard.Listen(Key.S, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
156        Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "liiku vasemmalle", hahmo, nopeusVasen);
157        Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
158        Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Liiku oikealle", hahmo, nopeusOikea);
159        Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, hahmo, Vector.Zero);
160
161                                   
162        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
163
164        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
165
166        AsetaHiiri();
167
168    }
169
170    void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
171    {
172        hahmo.Velocity = nopeus;
173    }
174
175
176
177    void AsetaHiiri()
178    {
179        pallo = new PhysicsObject(10.0, 10.0, Shapes.Circle);
180        pallo.IgnoresExplosions = pallo.IgnoresCollisionResponse = true;
181        Add(pallo);
182        Mouse.IsCursorVisible = true;
183        //Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
184        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, VoimanKeruu, null);
185        //Mouse.Listen(MouseButton.Left, ButtonState.Down, Rajahdys, null);
186        //Mouse.Listen(MouseButton.Left, ButtonState.Released, Teksti, null);
187        Mouse.Listen(MouseButton.Right, ButtonState.Released, LuoPallo, null);
188
189    }
190
191    //void KuunteleLiiketta(AnalogState hiirenTila)
192    //{
193    //    pallo.X = Mouse.PositionOnWorld.X;
194    //    pallo.Y = Mouse.PositionOnWorld.Y;
195    //}
196   
197
198    void Rajahdys(double voima) 
199    {
200       
201        Explosion rajahdys = new Explosion(40);
202        rajahdys.Position = Mouse.PositionOnWorld; 
203        rajahdys.Speed = 100.0;
204        rajahdys.Force = 200;
205        Add(rajahdys);
206        MessageDisplay.Add("pum");
207    }
208
209    void Teksti()
210    {
211        MessageDisplay.Add("loppu");
212    }   
213
214}
Note: See TracBrowser for help on using the repository browser.