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

Revision 1746, 7.7 KB checked in by iltakuop, 8 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
9public class Peli : PhysicsGame
10{
11    Vector nopeusOikea = new Vector(500, 0);
12    Vector nopeusVasen = new Vector(-500, 0);
13
14    PhysicsObject pallo;
15    PhysicsObject maila;
16    PhysicsObject tnt;
17
18    PhysicsObject alaReuna;
19    int kenttäNro = 1;
20
21    int palloolemassa;
22    const int RUUDUN_KOKO = 5;
23
24    Image tntKuva = LoadImage("TNT");
25    IntMeter pisteet;
26    IntMeter elämät;
27
28    List<PhysicsObject> tasot = new List<PhysicsObject>();
29
30    public override void Begin()
31    {
32        LuoKenttä(1);
33        AsetaOhjaimet();
34        LisääLaskurit(3, 0);
35        AloitaPeli();
36    }
37    PhysicsObject LuoPallo() //-170
38    {
39        PhysicsObject pallo1 = new PhysicsObject(20.0, 20.0);
40        pallo1.Shape = Shape.Circle;
41        pallo1.Color = Color.Blue;
42        pallo1.Tag = "pallo";
43        pallo1.Restitution = 1.0;
44        pallo1.X = 0;
45        pallo1.Y = -170;
46        palloolemassa = 1;
47        return pallo1;
48    }
49   
50   
51    void LuoKenttä(int a)
52    {
53        Level.BackgroundColor = Color.Red; 
54        LuoPalikat(a);       
55        Camera.ZoomToLevel(1);
56    }
57
58    void AloitaPeli()
59    {
60        maila.X = 0;
61        if (palloolemassa == 1)
62        {
63            pallo.Destroy();
64        }
65        pallo = LuoPallo();
66       
67        AddCollisionHandler(pallo, KäsittelePallonTörmäys);
68        Add(pallo);
69    }
70
71 
72    void AsetaOhjaimet()
73    {
74        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liikuta mailaa oikealle", maila, nopeusOikea);
75        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
76        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liikuta mailaa vasemmalle", maila, nopeusVasen);
77        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, null, maila, Vector.Zero);
78
79        Keyboard.Listen(Key.T, ButtonState.Pressed, AloitaPeli, "Liikuta mailaa vasemmalle");
80        Keyboard.Listen(Key.R, ButtonState.Pressed, Räjähdys, "Liikuta mailaa vasemmalle", tnt);
81       
82        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
83        //Keyboard.Listen(Key.F2, ButtonState.Pressed, SeuraavaTaso, "Näytä ohjeet", kenttäNro);
84
85        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
86
87
88    }
89
90    void LisääLaskurit(int elämät, int pisteet)
91    {
92        pisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 80.0, pisteet);
93        elämät = LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 80.0, elämät);
94    }
95
96    IntMeter LuoPisteLaskuri(double x, double y, int määrä)
97    {
98        IntMeter laskuri = new IntMeter(määrä);
99        //laskuri.MaxValue = 9;
100        Label näyttö = new Label();
101        näyttö.BindTo(laskuri);
102        näyttö.X = x;
103        näyttö.Y = y;
104        näyttö.TextColor = Color.White;
105        näyttö.BorderColor = Level.BackgroundColor;
106        näyttö.Color = Level.BackgroundColor;
107        Add(näyttö);
108        return laskuri;
109    }
110
111
112    void KäsittelePallonTörmäys(PhysicsObject pallo, PhysicsObject kohde)
113    {
114            if (kohde == alaReuna)
115            {
116                pallo.Destroy();
117                palloolemassa = 0;
118                elämät.Value -= 1;
119                if (elämät.Value == 0)
120                {
121                    HävisitPelin();
122                }
123                Timer.SingleShot(1, AloitaPeli);
124            }
125            if (kohde.Tag.ToString() == "taso")
126            {
127                pisteet.Value += 10;
128                Timer.SingleShot(0.01, kohde.Destroy);
129                tasot.Remove(kohde);
130                if (tasot.Count == 0)
131                {
132                    SeuraavaTaso(kenttäNro, 3, 0);
133                }
134            }
135            if (kohde.Tag.ToString() == "TNT")
136            {
137                pisteet.Value += 10;
138                Räjähdys(kohde);
139                Timer.SingleShot(0.01, kohde.Destroy);
140
141            }
142       
143    }
144    void SeuraavaTaso(int a, int elämät, int pisteet)
145    {
146        a += 1;
147        SeuraavaTaso2(a, elämät, pisteet);
148       
149    }
150    void SeuraavaTaso2(int a, int elämät, int pisteet)
151    {
152        ClearAll();
153        LuoKenttä(a);
154        AsetaOhjaimet();
155        LisääLaskurit(elämät, pisteet);
156        AloitaPeli();
157    }
158
159    void Räjähdys(PhysicsObject kohde)
160    {
161       
162        Explosion rajahdys = new Explosion(10);
163        rajahdys.Position = kohde.Position;
164        rajahdys.Force = 0;
165        Add(rajahdys);
166
167        //foreach (PhysicsObject taso in tasot)
168        //for(int i = 0; i<tasot.Count; i++)
169        int i = 0;
170        while(i<tasot.Count)
171        {
172            if (Vector.Distance(tasot[i].Position, kohde.Position) < 100)
173            {
174                tasot[i].Destroy();
175                tasot.RemoveAt(i);
176                pisteet.Value += 10;
177            }
178            else
179            {
180                i++;
181            }
182        }
183    }
184
185
186 
187    void LuoPalikat(int x)
188    {
189       
190        TileMap kentta = TileMap.FromFile("kentta" + x + ".txt");
191        kentta['#'] = lisaaTaso;
192        kentta['*'] = lisaaTNT;
193        kentta['m'] = LuoMaila;
194        kentta['-'] = LuoReunat;
195        kentta['_'] = LuoAlaReuna;
196        kentta['y'] = LuoYläReuna;
197        kentta.Insert(40, 40);
198    }
199
200    PhysicsObject lisaaTaso()
201    {
202        PhysicsObject taso = PhysicsObject.CreateStaticObject(40, 10);
203        taso.Color = Color.Green;
204        taso.Tag = "taso";
205        taso.Restitution = 1.0;
206        tasot.Add(taso);
207        return taso;
208    }
209
210    PhysicsObject lisaaTNT()
211    {
212        tnt = PhysicsObject.CreateStaticObject(40, 10);
213        //tnt.Image = tntKuva;
214        tnt.Tag = "TNT";
215       
216        return tnt;
217    }
218
219    PhysicsObject LuoMaila()
220    {
221        maila = PhysicsObject.CreateStaticObject(60.0, 10);
222        maila.Shape = Shape.Rectangle;
223        maila.Restitution = 1.0;
224        return maila;
225    }
226
227    PhysicsObject LuoReunat()
228    {
229        PhysicsObject reuna = PhysicsObject.CreateStaticObject(40, 800);
230        reuna.IsVisible = false;
231        reuna.Restitution = 1.0;
232        return reuna;
233    }
234
235    PhysicsObject LuoAlaReuna()
236    {
237        alaReuna = PhysicsObject.CreateStaticObject(800, 40);
238        alaReuna.Color = Color.Black;
239        alaReuna.IsVisible = false;
240        alaReuna.Restitution = 1.0;
241        return alaReuna;
242    }
243    PhysicsObject LuoYläReuna()
244    {
245        PhysicsObject yläReuna = PhysicsObject.CreateStaticObject(800, 40);
246        yläReuna.Color = Color.Black;
247        yläReuna.IsVisible = false;
248        yläReuna.Restitution = 1.0;
249        return yläReuna;
250    }
251
252    void AsetaNopeus(PhysicsObject maila, Vector nopeus)
253    {
254        if ((nopeus.X < 0) && (maila.Left < Level.Left + 40))
255        {
256            maila.Velocity = Vector.Zero;
257            return;
258        }
259
260        if ((nopeus.X > 0) && (maila.Right > Level.Right - 40))
261        {
262            maila.Velocity = Vector.Zero;
263            return;
264        }
265        maila.Velocity = nopeus;
266    }
267
268    void HävisitPelin()
269    {
270        MessageDisplay.Add("Hävisit");
271    }
272
273    const double PALLON_NOPEUS = 300;
274
275    protected override void Update(Time time)
276    {
277        if (pallo != null && Math.Abs(pallo.Velocity.Y) < PALLON_NOPEUS)
278        {
279            pallo.Velocity = new Vector(pallo.Velocity.X, pallo.Velocity.Y * 1.1);
280        }
281        base.Update(time);
282       
283    }
284
285
286}
Note: See TracBrowser for help on using the repository browser.