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

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