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

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