source: 2010/30/janiemit/tiili/Peli.cs @ 9062

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