source: 2011/23/iltakuop/Blocks/Blocks/Blocks/Peli.cs @ 1751

Revision 1751, 10.4 KB checked in by iltakuop, 12 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10class Taso2 : PhysicsObject
11{
12    public int hitPoints = 2;
13    public Taso2()
14    : base(40, 10)
15    {
16           
17    }
18
19
20}
21
22
23
24
25
26public class Peli : PhysicsGame
27{
28    Vector nopeusOikea = new Vector(500, 0);
29    Vector nopeusVasen = new Vector(-500, 0);
30
31    PhysicsObject pallo;
32    PhysicsObject maila;
33    PhysicsObject tnt;
34
35    PhysicsObject alaReuna;
36    int kenttäNro = 1;
37    int kenttäMäärä = 3;
38
39    int palloolemassa;
40    const int RUUDUN_KOKO = 5;
41
42    Image tntKuva = LoadImage("TNT");
43    Image tasoKuva = LoadImage("Palikka");
44    Image taso2Kuva = LoadImage("Vahvistettu palikka");
45    Image taso2Kuva2 = LoadImage("Vahvistettu palikka2");
46    int pisteet;
47    int elämät = 3;
48    IntMeter pisteetL;
49    IntMeter elämätL;
50
51    List<PhysicsObject> tasot = new List<PhysicsObject>();
52    List<PhysicsObject> taso2t = new List<PhysicsObject>();
53    List<PhysicsObject> tntt = new List<PhysicsObject>();
54
55    public override void Begin()
56    {
57        LuoKenttä(1);
58        AsetaOhjaimet();
59        LisääLaskurit(3, 0);
60        AloitaPeli();
61    }
62    PhysicsObject LuoPallo() //-170
63    {
64        PhysicsObject pallo1 = new PhysicsObject(20.0, 20.0);
65        pallo1.Shape = Shape.Circle;
66        pallo1.Color = Color.Blue;
67        pallo1.Tag = "pallo";
68        pallo1.Restitution = 1.0;
69        pallo1.X = 0;
70        pallo1.Y = -170;
71        palloolemassa = 1;
72        return pallo1;
73    }
74   
75   
76    void LuoKenttä(int a)
77    {
78        Level.BackgroundColor = Color.Red; 
79        LuoPalikat(a);       
80        Camera.ZoomToLevel(1);
81    }
82
83    void AloitaPeli()
84    {
85        maila.X = 0;
86        if (palloolemassa == 1)
87        {
88            pallo.Destroy();
89        }
90        pallo = LuoPallo();
91       
92        AddCollisionHandler(pallo, KäsittelePallonTörmäys);
93        Add(pallo);
94    }
95
96 
97    void AsetaOhjaimet()
98    {
99        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta mailaa oikealle", maila, nopeusOikea);
100        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
101        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta mailaa vasemmalle", maila, nopeusVasen);
102        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
103
104        Keyboard.Listen(Key.T, ButtonState.Pressed, AloitaPeli, "Liikuta mailaa vasemmalle");
105        //Keyboard.Listen(Key.R, ButtonState.Pressed, DebugRäjäytys, "Liikuta mailaa vasemmalle");
106       
107        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
108        Keyboard.Listen(Key.F2, ButtonState.Pressed, SeuraavaTaso, "Näytä ohjeet");
109
110        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
111
112
113    }
114    //void DebugRäjäytys() {  Räjähdys(tnt.Position); }
115
116    void LisääLaskurit(int elämät, int pisteet)
117    {
118        pisteetL = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 80.0, pisteet);
119        elämätL = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 80.0, elämät);
120    }
121
122    IntMeter LuoPisteLaskuri(double x, double y, int määrä)
123    {
124        IntMeter laskuri = new IntMeter(määrä);
125        //laskuri.MaxValue = 9;
126        Label näyttö = new Label();
127        näyttö.BindTo(laskuri);
128        näyttö.X = x;
129        näyttö.Y = y;
130        näyttö.TextColor = Color.White;
131        näyttö.BorderColor = Level.BackgroundColor;
132        näyttö.Color = Level.BackgroundColor;
133        Add(näyttö);
134        return laskuri;
135    }
136
137
138    void KäsittelePallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
139    {
140            if (kohde == alaReuna)
141            {
142                pallo.Destroy();
143                palloolemassa = 0;
144                elämät -= 1;
145                if (elämät == 0)
146                {
147                    HävisitPelin();
148                }
149                else Timer.SingleShot(1, AloitaPeli);
150            }
151            if (kohde.Tag.ToString() == "taso")
152            {
153                pisteet += 100;
154                Timer.SingleShot(0.01, kohde.Destroy);
155                tasot.Remove(kohde);
156                TarkistaVoitto();
157            }
158            if (kohde.Tag.ToString() == "taso2")
159            {
160                Taso2 taso2 = (Taso2)kohde;
161                taso2.hitPoints--;
162                if (taso2.hitPoints == 1)
163                { taso2.Image = taso2Kuva2; }
164                else if (taso2.hitPoints == 0)
165                {
166                    Timer.SingleShot(0.01, kohde.Destroy);
167                    pisteet += 300;
168                }
169                taso2t.Remove(kohde);
170                TarkistaVoitto();
171            }
172            if (kohde.Tag.ToString() == "TNT")
173            {
174                pisteet += 100;
175                Räjähdys(kohde.Position);
176                Timer.SingleShot(0.01, kohde.Destroy);
177                TarkistaVoitto();
178            }
179            pisteetL.Value = pisteet;
180            elämätL.Value = elämät;
181       
182    }
183    void TarkistaVoitto()
184    {
185        if ((tasot.Count == 0) && (tntt.Count == 0))
186        {
187            Timer.SingleShot(1, SeuraavaTaso);
188        }
189    }
190    void SeuraavaTaso()
191    {
192        tasot.Clear();
193        tntt.Clear();
194        kenttäNro += 1;
195        if (kenttäNro > kenttäMäärä)
196        {
197            ClearAll();
198            Label tekstikentta = new Label("Voitit");
199            Add(tekstikentta);
200            Timer.SingleShot(5, Exit);
201        }
202        else
203        {
204            ClearAll();
205            Label tekstikentta = new Label("Pääsit seuraavaan tasoon");
206            Add(tekstikentta);
207            Timer.SingleShot(2, SeuraavaTaso2);
208        }
209       
210    }
211    void SeuraavaTaso2()
212    {
213        ClearAll();
214        LuoKenttä(kenttäNro);
215        AsetaOhjaimet();
216        LisääLaskurit(elämät, pisteet);
217        AloitaPeli();
218    }
219
220    void Räjähdys(Vector kohde)
221    {
222       
223        Explosion rajahdys = new Explosion(10);
224        rajahdys.Position = kohde;
225        rajahdys.Force = 0;
226        Add(rajahdys);
227
228        //foreach (PhysicsObject taso in tasot)
229        //for(int i = 0; i<tasot.Count; i++)
230        int i = 0;
231        while(i<tasot.Count)
232        {
233            if (((tasot[i].X - kohde.X) < 100) && ((tasot[i].X - kohde.X) > -100) 
234                && ((tasot[i].Y - kohde.Y) < 80) && ((tasot[i].Y - kohde.Y) > -80))
235            {
236                tasot[i].Destroy();
237                tasot.RemoveAt(i);
238                pisteet += 100;
239                pisteetL.Value = pisteet;
240            }
241            else
242            {
243                i++;
244            }
245        }
246        int o = 0;
247        while (o<tntt.Count)
248        {
249            if (((tntt[o].X - kohde.X) < 100) && ((tntt[o].X - kohde.X) > -100)
250                && ((tntt[o].Y - kohde.Y) < 80) && ((tntt[o].Y - kohde.Y) > -80))
251            {
252                Vector räjähdysPaikka = tntt[o].Position;
253                tntt[o].Destroy();
254                tntt.RemoveAt(o);
255                pisteet += 100;
256                pisteetL.Value = pisteet;
257                Räjähdys(räjähdysPaikka);
258       
259            }
260            else
261            {
262                o++;
263            }
264        }
265    }
266
267
268 
269    void LuoPalikat(int x)
270    {
271       
272        TileMap kentta = TileMap.FromFile("kentta" + x + ".txt");
273        kentta['#'] = lisaaTaso;
274        kentta['!'] = lisaaTaso2;
275        kentta['*'] = lisaaTNT;
276        kentta['m'] = LuoMaila;
277        kentta['-'] = LuoReunat;
278        kentta['_'] = LuoAlaReuna;
279        kentta['y'] = LuoYläReuna;
280        kentta.Insert(40, 40);
281    }
282
283    PhysicsObject lisaaTaso()
284    {
285        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 10);
286        taso.Tag = "taso";
287        taso.Image = tasoKuva;
288        taso.Restitution = 1.0;
289        tasot.Add(taso);
290        return taso;
291    }
292
293    PhysicsObject lisaaTaso2()
294    {
295        Taso2 taso2 = new Taso2();
296        taso2.Tag = "taso2";
297        taso2.Image = taso2Kuva;
298        taso2.Restitution = 1.0;
299        taso2t.Add(taso2);
300        return taso2;
301    }
302
303    PhysicsObject lisaaTNT()
304    {
305        tnt = PhysicsObject.CreateStaticObject(40, 10);
306        tnt.Image = tntKuva;
307        tnt.Restitution = 1;
308        tntt.Add(tnt);
309        tnt.Tag = "TNT";
310       
311        return tnt;
312    }
313
314    PhysicsObject LuoMaila()
315    {
316        maila = PhysicsObject.CreateStaticObject(60.0, 10);
317        maila.Shape = Shape.Rectangle;
318        maila.Restitution = 1.0;
319        maila.Color = Color.Green;
320        return maila;
321    }
322
323    PhysicsObject LuoReunat()
324    {
325        PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 800);
326        reuna.IsVisible = false;
327        reuna.Restitution = 1.0;
328        return reuna;
329    }
330
331    PhysicsObject LuoAlaReuna()
332    {
333        alaReuna = PhysicsObject.CreateStaticObject(800, 40);
334        alaReuna.Color = Color.Black;
335        alaReuna.IsVisible = false;
336        alaReuna.Restitution = 1.0;
337        return alaReuna;
338    }
339    PhysicsObject LuoYläReuna()
340    {
341        PhysicsObject yläReuna = PhysicsObject.CreateStaticObject(800, 40);
342        yläReuna.Color = Color.Black;
343        yläReuna.IsVisible = false;
344        yläReuna.Restitution = 1.0;
345        return yläReuna;
346    }
347
348    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
349    {
350        if ((nopeus.X < 0) && (maila.Left < Level.Left + 40))
351        {
352            maila.Velocity = Vector.Zero;
353            return;
354        }
355
356        if ((nopeus.X > 0) && (maila.Right > Level.Right - 40))
357        {
358            maila.Velocity = Vector.Zero;
359            return;
360        }
361        maila.Velocity = nopeus;
362    }
363
364    void HävisitPelin()
365    {
366        ClearAll();
367        Label tekstikentta = new Label("Hävisit. Sait " + pisteet + " pistettä");
368        Add(tekstikentta);
369        Timer.SingleShot(3, Exit);
370    }
371
372    const double PALLON_NOPEUS = 300;
373
374    protected override void Update(Time time)
375    {
376        if (pallo != null && Math.Abs(pallo.Velocity.Y) < PALLON_NOPEUS)
377        {
378            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
379
380        }
381        base.Update(time);
382       
383    }
384
385
386}
Note: See TracBrowser for help on using the repository browser.