source: 2010/30/johulkko/FysiikkaPeli2/Peli.cs @ 1441

Revision 1441, 9.8 KB checked in by johulkko, 10 years ago (diff)

peli valmis

Line 
1using System;
2using System.Collections.Generic;
3
4using Jypeli;
5using Jypeli.Widgets;
6using Jypeli.Assets;
7using Jypeli.Effects;
8
9
10public class Peli : PhysicsGame
11{
12    const int lisaElamaVali = 2500;
13
14    double nopeusvasemmalle = -200;
15    double nopeusoikealle = 200;
16
17    double maastonLeveys = 1000;
18    double maastonKorkeus = 300;
19    Image maastonKuva = LoadImage("tausta2");
20    Shape maastonMuoto;
21    Image olionKuva = LoadImage("hahmo2 pienenpi");
22    PlatformCharacter hahmo;
23    Image CameOver = LoadImage("CAME OVER");
24
25    Image pomminkuva = LoadImage("ohjus");
26    Image tahdenkuva = LoadImage("tähti");
27
28    IntMeter elamaLaskuri;
29    IntMeter pisteLaskuri;
30    Label pisteNaytto;
31    int seuraavalisaelama;
32
33    PhysicsObject maa;
34
35    PhysicsObject tahti = null;
36
37    double pommienPutoamisKiihtyvyys;
38    ExplosionSystem rajahdys;
39
40    protected override void Begin()
41    {
42        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), 300);
43        Add(rajahdys);
44
45        LuoKentta();
46        LuoPelihahmo();
47        LuoOhjaimet();
48        LuoLaskurit();
49        LuoAikaLaskuri();
50        LuoPomminPudotusAjastin();
51        LuoTahti();
52        Camera.ZoomToLevel();
53        seuraavalisaelama = lisaElamaVali;
54    }
55
56    void LuoPelihahmo()
57    {
58        hahmo = new PlatformCharacter(50, 72);
59        hahmo.Shape = Shapes.Rectangle;
60        hahmo.Image = olionKuva;
61        hahmo.Tag = "tyyppi";
62        Add(hahmo);
63
64        hahmo.Y = -180;
65        hahmo.X = -110;
66        AddCollisionHandler(hahmo, PelaajaTormasi);
67    }
68
69    void PelaajaTormasi(PhysicsObject hahmo, PhysicsObject kohde)
70    {
71        if (kohde.Tag.ToString() == "pommi")
72        {
73            elamaLaskuri.Value--;
74        }
75        if (kohde.Tag.ToString() == "tähti")
76        {
77            pisteLaskuri.Value += 250;
78            TarkistaLisaElama();
79            LuoTahti();
80        }
81    }
82
83    private void LuoPomminPudotusAjastin()
84    {
85        Timer ajastin = new Timer();
86        ajastin.Interval = 1;
87        ajastin.Trigger += LuoPommi;
88        ajastin.Start();
89    }
90
91    void LuoPommi(Timer t)
92    {
93        double x= RandomGen.NextDouble(Level.Left, Level.Right);
94        double y = Level.Top;
95        PhysicsObject pommi = new PhysicsObject(20, 40, Shapes.Rectangle);
96        pommi.Position = new Vector(x, y);
97        pommienPutoamisKiihtyvyys = RandomGen.NextDouble(0.65, 0.99);
98        pommi.LinearDamping = pommienPutoamisKiihtyvyys;
99        pommi.Tag = "pommi";
100        pommi.Image = pomminkuva;
101        AddCollisionHandler(pommi, PommiTormasi);
102        Add(pommi);
103    }
104
105    void PommiTormasi(PhysicsObject pommi, PhysicsObject kohde)
106    {
107        if (kohde == tahti)
108        {
109            return;
110        }
111        rajahdys.MinVelocity = 20;
112        rajahdys.MaxVelocity = 300;
113        rajahdys.MinScale = 0.05;
114        rajahdys.MaxScale = 0.2;
115        rajahdys.MinLifetime = 0.1;
116        rajahdys.MaxLifetime = 1.5;
117        rajahdys.AddEffect(pommi.X, pommi.Y, 40);
118        pommi.Destroy();
119
120        if (kohde==maa)
121        {
122            if (pisteLaskuri.Value >= 50)
123            {
124                pisteLaskuri.Value -= 50;
125
126            }
127            else
128            {
129                pisteLaskuri.Value = 0;
130            }
131        }
132
133 
134
135    }
136
137    void LuoKentta()
138    {
139        Mouse.IsCursorVisible = true;
140
141        maa = PhysicsObject.CreateStaticObject(Level.Width, 110.0);
142        maa.Y = -350;
143        maa.Color = Color.Green;
144        Add(maa);
145
146        LuoTaso(200, 100);
147        LuoTaso(0, -100);
148        LuoTaso(-200, 100);
149
150        Gravity = new Vector(0.0, -800.0);
151
152        Level.CreateLeftBorder();
153        Level.CreateBottomBorder();
154        Level.CreateRightBorder();
155    }
156
157    void Liikuta(PlatformCharacter hahmo, double nopeus)
158    {
159        hahmo.Walk(nopeus);
160    }
161    void LuoOhjaimet()
162    {
163        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
164
165        Keyboard.Listen(Key.Left, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu vasemmalle", hahmo, nopeusvasemmalle);
166        Keyboard.Listen(Key.Left, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
167        Keyboard.Listen(Key.Right, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu oikealle", hahmo, nopeusoikealle);
168        Keyboard.Listen(Key.Right, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
169        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hahmohyppaa, "hahmo liikkuu oikealle", hahmo);
170        //Keyboard.Listen(Key.Up, ButtonState.Released, Hahmohyppaa, null, hahmo);
171
172        Keyboard.Listen(Key.A, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu vasemmalle", hahmo, nopeusvasemmalle);
173        Keyboard.Listen(Key.A, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
174        Keyboard.Listen(Key.D, ButtonState.Down, HahmoLiikkuu, "hahmo liikkuu oikealle", hahmo, nopeusoikealle);
175        Keyboard.Listen(Key.D, ButtonState.Released, HahmoLiikkuu, null, hahmo, 0.0);
176        Keyboard.Listen(Key.W, ButtonState.Pressed, Hahmohyppaa, "hahmo liikkuu oikealle", hahmo);
177        //Keyboard.Listen(Key.W, ButtonState.Released, Hahmohyppaa, null, hahmo);
178
179        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "hahmo liikkuu oikealle");
180
181    }
182
183    void HahmoLiikkuu(PlatformCharacter hahmo, double nopeus)
184    {
185        hahmo.Walk(nopeus);
186    }
187
188    void Hahmohyppaa(PlatformCharacter hahmo)
189    {
190        hahmo.Jump(1000);
191    }
192
193    void LuoTaso(double x, double y)
194    {
195        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 20);
196        taso.X = x;
197        taso.Y = y;
198
199        PathFollowerBrain polkuAivot = new PathFollowerBrain();       
200        List<Vector> polku = new List<Vector>();
201
202        for (int i = 0; i < 10; i++)
203        {
204            polku.Add(new Vector(
205                RandomGen.NextDouble(Level.Left + 50, Level.Right - 50),
206                RandomGen.NextDouble(Level.Bottom+200, Level.Top-100)
207                ));
208        }
209
210        polkuAivot.Path = polku;
211        polkuAivot.Active = true;
212        polkuAivot.Speed = 50;
213
214        taso.Brain = polkuAivot;
215        taso.Color = Color.Gray;
216        Add(taso);
217
218    }
219
220    void Ammu()
221    {
222        PhysicsObject panos = new PhysicsObject(9, 9);
223        panos.Color = Color.Yellow;
224        panos.Shape = Shapes.Circle;
225
226        Vector pyssynTeho = Mouse.PositionOnWorld - hahmo.Position;
227        panos.Angle = pyssynTeho.Angle;
228        pyssynTeho.X = pyssynTeho.X * 5;
229        pyssynTeho.Y = pyssynTeho.Y * 5;
230        if (pyssynTeho.X < hahmo.X)
231        {
232            panos.X = hahmo.X - 20;
233            panos.Y = hahmo.Y;
234        }
235        else
236        {
237            panos.X = hahmo.X + 20;
238            panos.Y = hahmo.Y;
239        }
240        panos.Hit(pyssynTeho);
241        panos.IgnoresGravity = false;
242        TimeSpan elinaika = new TimeSpan(10000000);
243        panos.MaximumLifetime = elinaika;
244        AddCollisionHandler(panos, PanosOsuu);
245        Add(panos);
246    }
247
248    void PanosOsuu(PhysicsObject panos, PhysicsObject kohde)
249    {
250        if (kohde.Tag.ToString() != "tyyppi")
251        {
252            panos.Destroy();
253        }
254
255        if (kohde.Tag.ToString() == "pommi")
256        {
257            pisteLaskuri.Value += 25;
258            TarkistaLisaElama();
259        }
260    }
261
262
263
264    void LuoLaskurit()
265    {
266        elamaLaskuri = new IntMeter(5);
267        elamaLaskuri.MinValue = 0;
268        elamaLaskuri.LowerLimit += ElamatLoppu;
269
270        pisteLaskuri = new IntMeter(0);
271        pisteLaskuri.MinValue = 0;
272        Label elamaNaytto = new Label();
273        elamaNaytto.X = Screen.Left + 100;
274        elamaNaytto.Y = Screen.Top - 100;
275        elamaNaytto.TextColor = Color.Black;
276        elamaNaytto.BindTo(elamaLaskuri);
277        Add(elamaNaytto);
278
279        Label elamaTeksti = new Label("Elämät: ");
280        elamaTeksti.X = Screen.Left + 50;
281        elamaTeksti.Y = Screen.Top - 100;
282        elamaTeksti.TextColor = Color.Black;
283        Add(elamaTeksti);
284
285        pisteNaytto = new Label();
286        pisteNaytto.X = Screen.Right - 100;
287        pisteNaytto.Y = Screen.Top - 100;
288        pisteNaytto.TextColor = Color.Black;
289        pisteNaytto.BindTo(pisteLaskuri);
290        Add(pisteNaytto);
291
292        Label pisteTeksti = new Label("Pisteet: ");
293        pisteTeksti.X = Screen.Right - 200;
294        pisteTeksti.Y = Screen.Top - 100;
295        pisteTeksti.TextColor = Color.Black;
296        Add(pisteTeksti);
297
298
299    }
300
301    void ElamatLoppu(int elamat)
302    {
303        ClearAll();
304        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
305        Level.Background.Image = CameOver;       
306    }
307
308    void LuoTahti()
309    {
310        if (tahti == null)       
311        {
312            tahti = new PhysicsObject(25.0, 25.0);
313            tahti.IgnoresGravity = true;
314            tahti.IgnoresCollisionResponse = true;
315            tahti.Tag = "tähti";
316            tahti.Image = tahdenkuva;
317            Add(tahti);
318        }
319        /*
320        PhysicsObject tahti2 = PhysicsObject.CreateStaticObject(25.0, 25.0);
321         * */
322
323        tahti.Y = RandomGen.NextDouble(200, 400);
324        tahti.X = RandomGen.NextDouble(Level.Left, Level.Right);       
325       
326    }
327    void LuoAikaLaskuri()
328    {
329        Timer aikaLaskuri = new Timer();
330        aikaLaskuri.Interval = 60;
331        aikaLaskuri.Trigger += AikaLoppui;
332        Add(aikaLaskuri);
333        aikaLaskuri.Start();
334
335     
336    }
337
338    void AikaLoppui(Timer ajastin)
339    {
340        ajastin.Stop();
341        ajastin.Reset();
342        ajastin.Start();
343        LuoTahti();
344    }
345    void TarkistaLisaElama()
346    {
347        if (pisteLaskuri.Value >= seuraavalisaelama)
348        {
349            elamaLaskuri.Value++;
350            seuraavalisaelama = seuraavalisaelama + lisaElamaVali;
351        }
352    }
353   
354   
355}
Note: See TracBrowser for help on using the repository browser.