source: 2010/30/janiemit/FysiikkaPeli3/Peli.cs @ 1422

Revision 1422, 7.5 KB checked in by janiemit, 10 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5using Jypeli.Effects;
6
7
8public class Peli : PhysicsGame
9{
10    int elamiaAlussa = 50;
11    Vector nopeusoikealle = new Vector(2000, 0);
12    Vector nopeusvasemmalle = new Vector(-2000, 0);
13    const double pallonNopeus = 500;
14    Image taustaKuva = LoadImage("avaruus");
15
16
17
18    Vector pysahdy = new Vector(0, 0);
19
20    PhysicsObject pallo;
21    PhysicsObject maila1;
22    // PhysicsObject maila2;
23    IntMeter pelaajan1Pisteet;
24    IntMeter pelaajanhp;
25    int rajahdyslaskuri;
26   
27
28
29    protected override void Begin()
30    {
31        ClearAll();
32        LuoKentta();
33        AsetaOhjaimet();
34        AloitaPeli();
35        LisaaLaskurit();
36        Level.Background.Image = taustaKuva;
37        rajahdyslaskuri = 0;
38    }
39
40
41    void TiileenTormattiin(PhysicsObject tiili, PhysicsObject tormaaja)
42    {
43        // Jos tormaaja == pallo (esim.)
44        // niin tiili räjähtää...
45
46        if (tormaaja == pallo)
47        {
48            Timer.SingleShot(0.1, tiili.Destroy);
49            Explosion rajahdys = new Explosion(300);
50            rajahdys.Position = tiili.Position;
51            rajahdys.Speed = 90.0;
52            rajahdys.Force = 0;
53            rajahdys.ShockwaveColor = Color.TransparentBlack;
54                //new Color(100,0,0 , 50);
55            Add(rajahdys);
56            pelaajan1Pisteet.Value += 100;
57           
58
59        }
60
61
62    }
63    PhysicsObject LuoTiili(double X, double Y)
64    {
65        //Paikallaan pysyvä
66        PhysicsObject tiili = PhysicsObject.CreateStaticObject(100.0, 20.0);
67        AddCollisionHandler(tiili, TiileenTormattiin);
68        tiili.X = X;
69        tiili.Y = Y;
70        Add(tiili,0);
71        return tiili;
72
73    }
74    void LuoKentta()
75    {
76        pallo = new PhysicsObject(40.0, 40.0);
77        pallo.Shape = Shapes.Circle;
78        pallo.Color = Color.Red;
79        pallo.X = 0.0;
80        pallo.Y = -340.0;
81        pallo.KineticFriction = 0.0;
82        pallo.Restitution = 1.0;
83
84        Add(pallo,1);
85
86        //Level.CreateBorders(90.0, true);
87        Level.BackgroundColor = Color.Black;
88        pallo.Restitution = 1.0;
89        Camera.ZoomToLevel();
90
91        maila1 = LuoMaila(0.0, -370.0);
92        //Add(maila1);
93        //maila2 = LuoMaila(0.0,-365.0);
94
95
96    }
97    void AloitaPeli()
98    {
99        Vector impulssi = new Vector(0.0, 200.0);
100        pallo.Hit(impulssi);
101    }
102    void AsetaOhjaimet()
103    {
104        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa vasemmalle", maila1, nopeusvasemmalle);
105        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila1, pysahdy);
106        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Liikuta mailaa oikealle", maila1, nopeusoikealle);
107        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila1, pysahdy);
108        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
109        Keyboard.Listen(Key.F12, ButtonState.Pressed,uudistatiili ,"uusi tiili kasa" );
110    }
111    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
112    {
113        maila.Velocity = nopeus;
114        if ((maila.Right) > Level.Right)
115        {
116            maila.X = maila.X - 4;
117            maila.Velocity = Vector.Zero;
118        }
119        if ((maila.Left) < Level.Left)
120        {
121            maila.X = maila.X + 4;
122            maila.Velocity = Vector.Zero;
123        }
124    }
125    PhysicsObject LuoMaila(double x, double y)
126    {
127        PhysicsObject maila = PhysicsObject.CreateStaticObject(200.0, 20.0,Shapes.Rectangle,CollisionShapeQuality.Best);
128        maila.X = x;
129        maila.Y = y;
130        maila.Restitution = 1.0;
131        maila.Color = Color.ForestGreen;
132        maila.IgnoresCollisionResponse = false;
133       
134        Add(maila);
135
136        return maila;
137    }
138
139
140    protected override void Update(Time time)
141    {
142        if (rajahdyslaskuri == 100)
143        {
144            pummi();
145            rajahdyslaskuri = 0;
146        }
147        rajahdyslaskuri++;
148
149        if (pallo != null && Math.Abs(pallo.Velocity.Y) < pallonNopeus)
150        {
151            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
152        }
153        Vector pallonNykyinenVektori = Vector.FromLengthAndAngle(pallo.Velocity.Magnitude, pallo.Velocity.Angle);
154        if (pallo.X < Level.Left)
155        {
156            pallonNykyinenVektori.X = pallonNykyinenVektori.X * -1;
157            pallo.X = pallo.X + 5;
158        }
159        if (pallo.X > Level.Right)
160        {
161            pallonNykyinenVektori.X = pallonNykyinenVektori.X * -1;
162            pallo.X = pallo.X - 5;
163        }
164        if (pallo.Y > Level.Top)
165        {
166            pallonNykyinenVektori.Y = pallonNykyinenVektori.Y * -1;
167            pallo.Y = pallo.Y - 5;
168        }
169        if (pallo.Y < Level.Bottom)
170        {
171            pallonNykyinenVektori.Y = pallonNykyinenVektori.Y * -1;
172            pallo.Y = pallo.Y + 5;
173            pelaajanhp.Value -= 1;
174        }
175       
176     
177        pallo.Velocity = pallonNykyinenVektori;
178        base.Update(time);
179    }
180    void LisaaLaskurit()
181    {
182        pelaajan1Pisteet = LuoPisteLaskuri(350, 350,"pisteet");
183        pelaajanhp = LuoPisteLaskuri(-350, 350,"HP");
184        pelaajanhp.Value = elamiaAlussa;
185        pelaajanhp.MinValue = -1;
186        pelaajanhp.LowerLimit += PeliLoppui;
187
188    }
189    IntMeter LuoPisteLaskuri(double x, double y,string texti )
190    {
191        IntMeter laskuri = new IntMeter(0);
192       
193        Label naytto = new Label();
194        naytto.BindTo(laskuri);
195        naytto.X = x;
196        naytto.Y = y;
197        naytto.TextColor = Color.Red;
198        Add(naytto);
199        Label textit = new Label(texti);
200        Add(textit);
201        textit.X = naytto.X -70;
202        textit.Y = naytto.Y = 300;
203        textit.Color = Color.Red;
204        return laskuri;
205    }
206   
207    void uudistatiili()
208    { 
209     for (int i = 0; i < 10; i++)
210        {
211            LuoTiili(-450 + i * 101, 100);
212        }
213        for (int j = 0; j < 9; j++)
214        {
215            LuoTiili(-400 + j * 101, 121);
216        }
217        for (int y = 0; y < 8; y++)
218        {
219            LuoTiili(-350 + y * 101, 142);
220        }
221        for (int x = 0; x < 7; x++)
222        {
223            LuoTiili(-300 + x * 101, 163);
224        }
225        for (int z = 0; z < 6; z++)
226        {
227            LuoTiili(-250 + z * 101, 184);
228}
229        for (int s = 0; s < 5; s++)
230        {
231            LuoTiili(-200 + s * 101, 205);
232        }
233        for (int g = 0; g < 4; g++)
234        {
235            LuoTiili(-150 + g * 101, 226);
236        }
237        for (int p = 0; p < 3; p++)
238        {
239            LuoTiili(-100 + p * 101, 247);
240        }
241        for (int i = 0; i < 2; i++)
242        {
243            LuoTiili(-50 + i * 101, 268);
244        }
245        for (int o = 0; o < 1; o++)
246        {
247            LuoTiili(-0 + o * 101, 289);
248        }
249    }
250    void PeliLoppui(int elamia)
251    {
252        Label gameower = new Label();
253        gameower.Text = "GAMEOWER";
254        gameower.Color = Color.Red;
255        Add(gameower);
256        Timer.SingleShot(1,Begin);
257    }
258    void pummi()
259    {
260        Explosion rajahdys = new Explosion(10);
261        rajahdys.Position = RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Bottom);
262        rajahdys.Speed = 5.0;
263        rajahdys.Force = 0;
264        rajahdys.ShockwaveColor = Color.TransparentBlack;
265         //new Color(0, 100, 0, 100);
266        Add(rajahdys);
267
268    }
269
270
271
272}
Note: See TracBrowser for help on using the repository browser.