source: 2011/31/AleksiN/workingtitle/workingtitle/Peli.cs @ 2601

Revision 2601, 12.1 KB checked in by alnirham, 12 years ago (diff)

Talletus.

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 hyppynopeus = new Vector(0, 550);
12    Vector nopeus = new Vector(800, 0);
13    DoubleMeter kello = new DoubleMeter(0);
14
15    ScoreList topLista = new ScoreList(5, false, 0);
16
17
18    PhysicsObject ukko;
19
20    PhysicsObject palikka;
21    PhysicsObject punpalikka;
22
23    Timer aikaLaskuri = new Timer();
24    DoubleMeter alaspainLaskuri = new DoubleMeter(250);
25
26    int kenttanro = 1;
27
28    Image peruna = LoadImage("peruna");
29    Image portal1 = LoadImage("portal1");
30    SoundEffect shiumm = LoadSoundEffect("shiumm");
31
32    public override void Begin()
33    {
34        Gravity = new Vector(0.0, -1000.0);
35
36        if (DataStorage.Exists("pisteet.xml"))
37            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
38
39        LuoAikaLaskuri();
40        hahmot();
41        kontrollit();
42
43        Camera.Follow(ukko);
44
45        if (kenttanro == 1)
46        {
47            kentta1();
48        }
49        if (kenttanro == 2)
50        {
51            kentta2();
52        }
53
54    }
55
56    void hahmot()
57    {
58        ukko = new PhysicsObject(35, 50);
59        ukko.Shape = Shape.Circle;
60        ukko.Image = LoadImage("peruna");
61        ukko.KineticFriction = 0.7;
62        ukko.Restitution = 0.15;
63        ukko.X = -875.0;
64        ukko.Y = 275.0;
65        AddCollisionHandler(ukko, kuolema);
66        AddCollisionHandler(ukko, seuraavakentta);
67
68        Add(ukko);
69    }
70
71    void kentta1()
72    {
73        kentta1reunat();
74        kentta1palikat();
75
76        Level.BackgroundColor = new Color(10, 10, 50);
77    }
78
79    void kentta2()
80    {
81        ukko.Width = 42;
82        ukko.Height = 42;
83
84        kentta2reunat();
85        kentta2palikat();
86
87        ukko.X = -1260;
88        ukko.Y = 250;
89
90        Level.BackgroundColor = new Color(95, 70, 0);
91    }
92
93    void kentta2reunat()
94    {
95        PhysicsObject alareuna = PhysicsObject.CreateStaticObject(8000, 500);
96        alareuna.Y = -575;
97        alareuna.IgnoresGravity = true;
98        alareuna.Color = new Color(255, 190, 0);
99        Add(alareuna);
100
101        PhysicsObject ylareuna = PhysicsObject.CreateStaticObject(8000, 500);
102        ylareuna.Y = 575;
103        ylareuna.IgnoresGravity = true;
104        ylareuna.Color = new Color(255, 190, 0);
105        Add(ylareuna);
106
107        PhysicsObject vasenreuna = PhysicsObject.CreateStaticObject(750, 1750);
108        vasenreuna.X = -1775;
109        vasenreuna.IgnoresGravity = true;
110        vasenreuna.Color = new Color(255, 190, 0);
111        Add(vasenreuna);
112
113        PhysicsObject oikeareuna = PhysicsObject.CreateStaticObject(750, 1750);
114        oikeareuna.X = 4000;
115        oikeareuna.IgnoresGravity = true;
116        oikeareuna.Color = new Color(255, 190, 0);
117        Add(oikeareuna);
118    }
119
120    void kentta2palikat()
121    {
122        palikka = palikat2(-1260, 195, 125, 30, Angle.FromDegrees(0));
123        palikka = palikat2(-1200, 280, 30, 200, Angle.FromDegrees(0));
124        palikka = palikat2(-1350, -10, 250, 30, Angle.FromDegrees(-50));
125        palikka = palikat2(-1180, -170, 250, 30, Angle.FromDegrees(-35));
126        palikka = palikat2(-970, -280, 250, 30, Angle.FromDegrees(-20));
127        palikka = palikat2(-450, -310, 250, 30, Angle.FromDegrees(15));
128        palikka = palikat2(-220, -228, 250, 30, Angle.FromDegrees(25));
129
130        PhysicsObject boost = new PhysicsObject(10, 10);
131        boost.Shape = Shape.Circle;
132        Add(boost);
133    }
134
135    void kentta1reunat()
136    {
137
138        PhysicsObject alareuna = PhysicsObject.CreateStaticObject(3000, 500);
139        alareuna.Y = -575;
140        alareuna.IgnoresGravity = true;
141        alareuna.Color = new Color(0, 215, 215);
142        Add(alareuna);
143
144        PhysicsObject ylareuna = PhysicsObject.CreateStaticObject(3000, 500);
145        ylareuna.Y = 575;
146        ylareuna.IgnoresGravity = true;
147        ylareuna.Color = new Color(0, 215, 215);
148        Add(ylareuna);
149
150        PhysicsObject vasenreuna = PhysicsObject.CreateStaticObject(750, 1750);
151        vasenreuna.X = -1775;
152        vasenreuna.IgnoresGravity = true;
153        vasenreuna.Color = new Color(0, 215, 215);
154        Add(vasenreuna);
155
156        PhysicsObject oikeareuna = PhysicsObject.CreateStaticObject(750, 1750);
157        oikeareuna.X = 1775;
158        oikeareuna.IgnoresGravity = true;
159        oikeareuna.Color = new Color(0, 215, 215);
160        Add(oikeareuna);
161    }
162
163    void kentta1palikat()
164    {
165        palikka = palikat(-805.0, 300.0, 50, 1050, Angle.FromDegrees(0));
166        palikka = palikat(-775.0, -210.0, 80, 30, Angle.FromDegrees(0));
167        palikka = palikat(-775.0, -90.0, 60, 30, Angle.FromDegrees(0));
168        palikka = palikat(-775.0, 30.0, 40, 30, Angle.FromDegrees(0));
169        palikka = palikat(-380.0, 150.0, 60, 750, Angle.FromDegrees(0));
170        palikka = palikat(-240.0, -190.0, 28, 20, Angle.FromDegrees(0));
171        palikka = palikat(-140.0, -60.0, 28, 20, Angle.FromDegrees(0));
172        palikka = palikat(-40.0, 70.0, 28, 20, Angle.FromDegrees(0));
173        palikka = palikat(-276.0, 170.0, 250, 30, Angle.FromDegrees(0));
174        palikka = palikat(200.0, 260.0, 600, 20, Angle.FromDegrees(0));
175        palikka = palikat(70, -33, 30, 605, Angle.FromDegrees(0));
176        palikka = palikat(-1050, 220, 450, 30, Angle.FromDegrees(0));
177        palikka = palikat(-655.0, -298.0, 15, 55, Angle.FromDegrees(0));
178        palikka = palikat(600.0, 50, 60, 600, Angle.FromDegrees(0));
179        palikka = palikat(565.0, 60.0, 40, 20, Angle.FromDegrees(0));
180        palikka = palikat(280.0, 155.0, 220, 20, Angle.FromDegrees(0));
181        palikka = palikat(380, 93, 20, 123, Angle.FromDegrees(0));
182        palikka = palikat(160, -100, 250, 30, Angle.FromDegrees(-45));
183        palikka = palikat(505, -180, 200, 30, Angle.FromDegrees(40));
184        palikka = palikat(-1330, 0, 230, 30, Angle.FromDegrees(-45));
185        palikka = palikat(-1000, -250, 30, 420, Angle.FromDegrees(0));
186        palikka = palikat(1295, -50, 60, 585, Angle.FromDegrees(0));
187        palikka = palikat(730, -210, 35, 30, Angle.FromDegrees(0));
188        palikka = palikat(880, -210, 35, 30, Angle.FromDegrees(0));
189        palikka = palikat(1030, -210, 35, 30, Angle.FromDegrees(0));
190        palikka = palikat(1180, -210, 35, 30, Angle.FromDegrees(0));
191        palikka = palikat(1250, -135, 35, 30, Angle.FromDegrees(0));
192        palikka = palikat(1105, -30, 35, 30, Angle.FromDegrees(0));
193        palikka = palikat(955, -30, 35, 30, Angle.FromDegrees(0));
194        palikka = palikat(805, -30, 35, 30, Angle.FromDegrees(0));
195        palikka = palikat(640, 55, 35, 30, Angle.FromDegrees(0));
196        palikka = palikat(730, 150, 35, 30, Angle.FromDegrees(0));
197        palikka = palikat(880, 150, 35, 30, Angle.FromDegrees(0));
198        palikka = palikat(1030, 150, 35, 30, Angle.FromDegrees(0));
199        palikka = palikat(1180, 150, 35, 30, Angle.FromDegrees(0));
200        punpalikka = punpalikat(-625.0, -80.0, 60, 492, Angle.FromDegrees(0));
201        punpalikka = punpalikat(-600.0, -150.0, 100, 50, Angle.FromDegrees(0));
202        punpalikka = punpalikat(-435.0, -150.0, 50, 50, Angle.FromDegrees(0));
203        punpalikka = punpalikat(-98.0, -315.0, 305, 20, Angle.FromDegrees(0));
204        punpalikka = punpalikat(-285.0, 255.0, 130, 139, Angle.FromDegrees(0));
205        punpalikka = punpalikat(480, 40, 180, 20, Angle.FromDegrees(0));
206        punpalikka = punpalikat(326, -139, 155, 30, Angle.FromDegrees(40));
207        punpalikka = punpalikat(-1140, -312, 250, 30, Angle.FromDegrees(0));
208        punpalikka = punpalikat(274, -253, 30, 144, Angle.FromDegrees(0));
209        punpalikka = punpalikat(990, -315, 550, 20, Angle.FromDegrees(0));
210
211        PhysicsObject maali = PhysicsObject.CreateStaticObject(30, 50);
212        maali.Shape = Shape.Circle;
213        maali.X = 1363;
214        maali.Y = -300;
215        maali.Angle = Angle.FromDegrees(-15);
216        maali.Tag = "maali";
217        maali.Image = LoadImage("portal1");
218        Add(maali);
219
220        PhysicsObject test = PhysicsObject.CreateStaticObject(30, 50);
221        test.Shape = Shape.Circle;
222        test.X = -950;
223        test.Y = 275;
224        test.Angle = Angle.FromDegrees(-15);
225        test.Tag = "maali";
226        test.Image = LoadImage("portal1");
227        //Add(test);
228    }
229
230    PhysicsObject palikat(double x, double y, double width, double height, Angle kulma)
231    {
232        PhysicsObject palikka = PhysicsObject.CreateStaticObject(100.0, 100.0);
233        palikka.Color = new Color(0, 215, 215);
234        palikka.X = x;
235        palikka.Y = y;
236        palikka.Width = width;
237        palikka.Height = height;
238        palikka.Angle = kulma;
239        Add(palikka);
240
241        return palikka;
242    }
243
244    PhysicsObject palikat2(double x, double y, double width, double height, Angle kulma)
245    {
246        PhysicsObject palikka = PhysicsObject.CreateStaticObject(100.0, 100.0);
247        palikka.Color = new Color(255, 190, 0);
248        palikka.X = x;
249        palikka.Y = y;
250        palikka.Width = width;
251        palikka.Height = height;
252        palikka.Angle = kulma;
253        Add(palikka);
254
255        return palikka;
256    }
257
258    PhysicsObject punpalikat(double x, double y, double width, double height, Angle kulma)
259    {
260        PhysicsObject punpalikka = PhysicsObject.CreateStaticObject(100.0, 100.0);
261        punpalikka.Color = new Color(128, 0, 0);
262        punpalikka.X = x;
263        punpalikka.Y = y;
264        punpalikka.Width = width;
265        punpalikka.Height = height;
266        punpalikka.Angle = kulma;
267        punpalikka.Tag = "punpalikka";
268        Add(punpalikka);
269
270        return punpalikka;
271    }
272
273    void kuolema(PhysicsObject pallo, PhysicsObject kohde)
274    {
275        if (kohde.Tag.ToString() == "punpalikka" && !(ukko.IsDestroyed))
276        {
277            ukko.X = -875;
278            ukko.Y = 295;
279            shiumm.Play();
280            alaspainLaskuri.Reset();
281            kello.Reset();
282        }
283    }
284
285    void seuraavakentta(PhysicsObject ukko, PhysicsObject kohde)
286    {
287        if (kohde.Tag.ToString() == "maali")
288        {
289            shiumm.Play();
290            ukko.Destroy();
291            ClearAll();
292            topikkuna();
293
294        }
295    }
296
297    void kontrollit()
298    {
299        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
300        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
301
302        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", ukko, -nopeus);
303        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", ukko, nopeus);
304        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", ukko, hyppynopeus);
305    }
306
307    void liikuta(PhysicsObject ukko, Vector nopeus)
308    {
309        ukko.Push(nopeus);
310    }
311
312    void hyppaa(PhysicsObject ukko, Vector hyppynopeus)
313    {
314        ukko.Hit(hyppynopeus);
315    }
316
317    void topikkuna()
318    {
319        double aikaaKulunut = alaspainLaskuri.Value;
320
321        HighScoreWindow topIkkuna = new HighScoreWindow("Pelin nimi tai jotain",
322                             "Parhaat pisteet",
323                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
324                             topLista, aikaaKulunut);
325        topIkkuna.Closed += tallennapisteet;
326        Add(topIkkuna);       
327    }
328
329    void tallennapisteet(Window sender)
330    {
331        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
332        kenttanro++;
333        ClearAll();
334        Begin();
335    }
336
337    void LuoAikaLaskuri()
338    {
339        alaspainLaskuri = new DoubleMeter(250);
340
341        aikaLaskuri = new Timer();
342        aikaLaskuri.Interval = 0.01;
343        aikaLaskuri.Timeout += LaskeAlaspain;
344        aikaLaskuri.Start();
345        kello.Value = 0;
346
347
348        Label aikaNaytto = new Label();
349        aikaNaytto.TextColor = Color.White;
350        aikaNaytto.DecimalPlaces = 2;
351        aikaNaytto.BindTo(kello);
352        aikaNaytto.Y = Screen.Top - 20;
353        Add(aikaNaytto);
354    }
355
356    void LaskeAlaspain()
357    {
358        alaspainLaskuri.Value -= 0.01;
359        kello.Value += 0.01;
360    }
361
362
363}
Note: See TracBrowser for help on using the repository browser.