source: 2011/31/OnniP/PerusPeli3/PerusPeli3/Peli.cs @ 10334

Revision 2612, 14.8 KB checked in by onpernu, 8 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    List<Label> valikonKohdat;
12    Image Ohjuskuva = LoadImage("Ohjus");
13    Image MansikanKuva = LoadImage("Transparent Mansikka");
14    Image Pikselikatto = LoadImage("Pix");
15    Image PilviKuva = LoadImage("Pillvi");
16    Image Pilvikuva2 = LoadImage("Pillvi3");
17    GameObject Sydän1;
18    GameObject Sydän2;
19    GameObject Sydän3;
20    PhysicsObject Mansikka;
21    PhysicsObject Maila;
22
23    Vector nopeusVasemmalle = new Vector(-400, 0);
24    Vector nopeusOikealle = new Vector(400, 0);
25    Vector Pysähdys = new Vector(0, 0);
26    IntMeter Pisteet;
27    bool Onkopeliloppunut = false;
28    ScoreList topLista = new ScoreList(10, false, 0);
29    int Vaikeustaso = 1;
30    ExplosionSystem Rajahdys;
31
32    public override void Begin()
33    {
34        Valikko();
35
36
37
38
39
40    }
41
42
43    void Aloitapeli()
44    {
45        ClearAll();
46        Rajahdys =
47              new ExplosionSystem(LoadImage("Rajahdus"), 50);
48
49        Add(Rajahdys);
50        Rajahdys.MinScale = 100;
51        Rajahdys.MaxScale = 200;
52        PhysicsObject vasenreuna = Level.CreateLeftBorder();
53        vasenreuna.X = -500;
54        vasenreuna.Y = 0;
55        PhysicsObject Oikeareuna = Level.CreateRightBorder();
56        Oikeareuna.X = -500;
57        Oikeareuna.Y = 0;
58
59        Level.CreateRightBorder();
60
61        Camera.ZoomToLevel();
62        PhysicsObject katto = PhysicsObject.CreateStaticObject(1300, 100);
63        katto.X = 0;
64        katto.Y = 500;
65        katto.IsVisible = false;
66        Add(katto);
67        katto.Color = Color.Cyan;
68        PhysicsObject lattia = PhysicsObject.CreateStaticObject(1300, 100);
69        lattia.Y = -400;
70        Add(lattia);
71        lattia.IsVisible = true;
72
73        //luoMansikka();
74
75        lattia.Color = Color.DarkGray;
76
77        Level.BackgroundColor = Color.SkyBlue;
78        luoPilvi();
79
80        lattia.Tag = "lattia";
81        PhysicsObject oikeaSeinä = PhysicsObject.CreateStaticObject(300, 800);
82        oikeaSeinä.Right = Level.Right;
83        oikeaSeinä.IsVisible = false;
84        oikeaSeinä.Color = Color.Black;
85        Add(oikeaSeinä);
86        PhysicsObject vasenSeinä = PhysicsObject.CreateStaticObject(300, 800);
87        vasenSeinä.Left = Level.Left; 
88        vasenSeinä.IsVisible = false;
89        vasenSeinä.Color = Color.Black;
90        Add(vasenSeinä);
91        Sydän1 = new GameObject(30, 30);
92        Sydän1.Shape = Shape.Heart;
93        Sydän1.Color = Color.Pink;
94        Sydän1.X = 300;
95        Sydän1.Y = -330;
96        Add(Sydän1);
97        Sydän2 = new GameObject(30, 30);
98        Sydän2.Shape = Shape.Heart;
99        Sydän2.Color = Color.Pink;
100        Sydän2.X = 350;
101        Sydän2.Y = -330;
102        Add(Sydän2);
103        Sydän3 = new GameObject(30, 30);
104        Sydän3.Shape = Shape.Heart;
105        Sydän3.Color = Color.Pink;
106        Sydän3.X = 400;
107        Sydän3.Y = -330;
108        Add(Sydän3);
109
110        Maila = PhysicsObject.CreateStaticObject(80, 20);
111        Maila.Color = Color.Black;
112        Add(Maila);
113        Maila.Y = (-200);
114        Asetaohjaimet();
115        Maila.Tag = "maila";
116        LisaaLaskuri();
117        if (Vaikeustaso == 1)
118        {
119            laskuri1();
120
121        }
122        if (Vaikeustaso == 2)
123        {
124            laskuri2();
125
126
127        }
128
129        if (Vaikeustaso == 3)
130        {
131            laskuri3();
132
133
134        }
135
136
137
138    }
139
140    void Valikko()
141    {
142
143        ClearAll();
144        laskuri0();
145
146
147
148
149        valikonKohdat = new List<Label>();
150
151        Label kohta1 = new Label("Helppo");
152        kohta1.Position = new Vector(0, 40);
153        valikonKohdat.Add(kohta1);
154
155        Label kohta2 = new Label("Keskivaikea");
156        kohta2.Position = new Vector(0, -40);
157        valikonKohdat.Add(kohta2);
158
159
160        Label kohta3 = new Label("Vaikea");
161        kohta3.Position = new Vector(0, -120);
162        valikonKohdat.Add(kohta3);
163
164        Label kohta4 = new Label("Lopeta");
165        kohta4.Position = new Vector(0, -200);
166        valikonKohdat.Add(kohta4);
167
168        foreach (Label valikonKohta in valikonKohdat)
169        {
170            Add(valikonKohta);
171        }
172
173        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Aloitapelivaikeus, null, 1);
174        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Aloitapelivaikeus, null, 2);
175        Mouse.ListenOn(kohta3, MouseButton.Left, ButtonState.Pressed, Aloitapelivaikeus, null, 3);
176        Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Exit, null);
177
178        Mouse.IsCursorVisible = true;
179        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
180        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
181        Level.Background.CreateGradient(Color.Black, Color.Red);
182        GameObject Rikselikatto = new GameObject(500, 500);
183        Rikselikatto.X = -400;
184        Rikselikatto.Image = Pikselikatto;
185        Rikselikatto.Y = 275;
186        Add(Rikselikatto);
187        GameObject Hikselikatto = new GameObject(500, 500);
188        Hikselikatto.X = 100;
189        Hikselikatto.Image = Pikselikatto;
190        Hikselikatto.Y = 200;
191        Add(Hikselikatto);
192        GameObject Mikselikatto = new GameObject(500, 500);
193        Mikselikatto.X = 100;
194        Mikselikatto.Image = Pikselikatto;
195        Mikselikatto.Y = 300;
196        Add(Mikselikatto);
197        GameObject Sikselikatto = new GameObject(500, 500);
198        Sikselikatto.X = 100;
199        Sikselikatto.Image = Pikselikatto;
200        Sikselikatto.Y = 250;
201        Add(Sikselikatto);
202        GameObject Nikselikatto = new GameObject(500, 500);
203        Nikselikatto.X = 100;
204        Nikselikatto.Image = Pikselikatto;
205        Nikselikatto.Y = 225;
206        Add(Nikselikatto);
207        GameObject Vikselikatto = new GameObject(500, 500);
208        Vikselikatto.X = 100;
209        Vikselikatto.Image = Pikselikatto;
210        Vikselikatto.Y = 275;
211        Add(Vikselikatto);
212        GameObject Zikselikatto = new GameObject(500, 500);
213        Zikselikatto.X = 600;
214        Zikselikatto.Image = Pikselikatto;
215        Zikselikatto.Y = 200;
216        Add(Zikselikatto);
217        GameObject Qikselikatto = new GameObject(500, 500);
218        Qikselikatto.X = 600;
219        Qikselikatto.Image = Pikselikatto;
220        Qikselikatto.Y = 300;
221        Add(Qikselikatto);
222        GameObject Fikselikatto = new GameObject(500, 500);
223        Fikselikatto.X = 600;
224        Fikselikatto.Image = Pikselikatto;
225        Fikselikatto.Y = 250;
226        Add(Fikselikatto);
227        GameObject Gikselikatto = new GameObject(500, 500);
228        Gikselikatto.X = 600;
229        Gikselikatto.Image = Pikselikatto;
230        Gikselikatto.Y = 225;
231        Add(Gikselikatto);
232        GameObject Tikselikatto = new GameObject(500, 500);
233        Tikselikatto.X = 600;
234        Tikselikatto.Image = Pikselikatto;
235        Tikselikatto.Y = 275;
236        Add(Tikselikatto);
237
238
239
240
241
242    }
243
244
245
246    void ValikossaLiikkuminen(AnalogState hiirenTila)
247    {
248        foreach (Label kohta in valikonKohdat)
249        {
250            if (Mouse.IsCursorOn(kohta))
251            {
252                kohta.TextColor = Color.Red;
253            }
254            else
255            {
256                kohta.TextColor = Color.Lime;
257            }
258
259        }
260    }
261
262
263
264
265
266    void luoMansikka()
267    {
268        Mansikka = new PhysicsObject(80, 90);
269        Mansikka.Image = MansikanKuva;
270        Mansikka.X = RandomGen.NextDouble(-450, 450);
271        Mansikka.Y = 300;
272        Add(Mansikka);
273
274        Mansikka.Tag = "Mansikka";
275        AddCollisionHandler(Mansikka, MansikkaMaassa);
276
277
278
279        if (Vaikeustaso == 1)
280        {
281            Vector impulssi1 = new Vector(0, -100);
282            Mansikka.Hit(impulssi1);
283            Mansikka.MaximumLifetime = new TimeSpan(0, 0, 8);
284        }
285
286
287        else if (Vaikeustaso == 2)
288        {
289            Vector impulssi2 = new Vector(0, -200);
290            Mansikka.Hit(impulssi2);
291            Mansikka.MaximumLifetime = new TimeSpan(0, 0, 6);
292
293        }
294
295        else if (Vaikeustaso == 3)
296        {
297            Vector impulssi3 = new Vector(0, -300);
298            Mansikka.Hit(impulssi3);
299            Mansikka.MaximumLifetime = new TimeSpan(0, 0, 3);
300
301
302
303        }
304
305
306
307
308
309
310
311    }
312    void luoPilvi()
313    {
314        GameObject Pilvi = new GameObject(800, 400);
315        Pilvi.Image = PilviKuva;
316        Pilvi.Y = 200;
317        Pilvi.X = 300;
318        Add(Pilvi);
319        Pilvi.IsVisible = true;
320
321        GameObject Pilvi3 = new GameObject(800, 400);
322        Pilvi3.Image = Pilvikuva2;
323        Add(Pilvi3);
324        Pilvi3.X = -400;
325        Pilvi3.Y = 300;
326
327    }
328    void MansikkaMaassa(PhysicsObject tormaaja, PhysicsObject Kohde)
329    {
330        if (Kohde.Tag == "lattia")
331        {
332            double x = Kohde.X;
333            double y = Kohde.Y;
334            int pMaara = 1000;
335
336            Rajahdys.AddEffect(x, y, pMaara);
337            tormaaja.Destroy();
338           
339            Sydänkato();
340
341
342
343        }
344
345
346
347        if (Kohde.Tag == "maila")
348        {
349
350            double x = Kohde.X;
351            double y = Kohde.Y;
352            int pMaara = 1000;
353
354            Rajahdys.AddEffect(x, y, pMaara);
355
356            tormaaja.Destroy();
357           
358            Sydänkato();
359        }
360        if (Kohde.Tag == "ohjus")
361        {
362            double x = Kohde.X;
363            double y = Kohde.Y;
364            int pMaara = 100000000;
365
366            Rajahdys.AddEffect(x, y, pMaara);
367
368            tormaaja.Destroy();
369           
370
371
372
373
374        }
375
376    }
377
378    void Asetaohjaimet()
379    {
380        Keyboard.Listen(Key.Left, ButtonState.Down, Asetanopeus, "Liiku Vasemmalle", Maila, nopeusVasemmalle);
381        Keyboard.Listen(Key.Right, ButtonState.Down, Asetanopeus, "Liiku Oikealle", Maila, nopeusOikealle);
382        Keyboard.Listen(Key.Right, ButtonState.Released, Asetanopeus, "Pysähdys", Maila, Pysähdys);
383        Keyboard.Listen(Key.Left, ButtonState.Released, Asetanopeus, "Pysähdys", Maila, Pysähdys);
384        Keyboard.Listen(Key.Space, ButtonState.Pressed, ohjus, "Ammu Ohjus");
385        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu");
386    }
387
388
389
390
391    void Asetanopeus(PhysicsObject Maila, Vector nopeus)
392    {
393
394        if ((nopeus.X > 0) && (Maila.X > Level.Right))
395        {
396            Maila.Velocity = Vector.Zero;
397            return;
398        }
399         if ((nopeus.X < 0 )&&(Maila.X < Level.Left))
400        {
401            Maila.Velocity = Vector.Zero;
402            return;
403        }
404
405        Maila.Velocity = nopeus;
406
407
408
409    }
410
411
412
413    void ohjus()
414    {
415        PhysicsObject ohjus = new PhysicsObject(30, 90);
416        ohjus.Image = Ohjuskuva;
417        ohjus.Y = Maila.Y + (30);
418        ohjus.X = Maila.X;
419        ohjus.IgnoresCollisionResponse = true;
420        Add(ohjus);
421        ohjus.Tag = "ohjus";
422        ohjus.CanRotate = false;
423        AddCollisionHandler(ohjus, Ohjusosuma);
424        Vector Ylöspäin = new Vector(0, 300);
425        ohjus.Hit(Ylöspäin);
426        ohjus.MaximumLifetime = new TimeSpan(0, 0, 3);
427
428
429    }
430
431    void laskuri1()
432    {
433        Timer ajastin = new Timer();
434        ajastin.Interval = RandomGen.NextDouble(1, 2);
435        ajastin.Timeout += luoMansikka;
436        ajastin.Start();
437    }
438
439    void laskuri2()
440    {
441        Timer ajastin = new Timer();
442        ajastin.Interval = RandomGen.NextDouble(0.8, 1.2);
443        ajastin.Timeout += luoMansikka;
444        ajastin.Start();
445
446    }
447    void laskuri3()
448    {
449        Timer ajastin = new Timer();
450        ajastin.Interval = RandomGen.NextDouble(0.4, 1);
451        ajastin.Timeout += luoMansikka;
452        ajastin.Start();
453
454
455
456    }
457
458    void Sydänkato()
459    {
460        if (!Sydän1.IsDestroyed)
461        {
462            Sydän1.Destroy();
463            return;
464        }
465
466
467
468        if (!Sydän2.IsDestroyed)
469        {
470            Sydän2.Destroy();
471            return;
472        }
473
474
475        if (!Sydän3.IsDestroyed)
476        {
477            Sydän3.Destroy();
478
479        }
480
481        else if (Sydän3.IsDestroyed)
482        {
483            if (!Onkopeliloppunut)
484                Lopetapeli();
485
486
487        }
488
489
490
491    }
492
493
494
495    void Ohjusosuma(PhysicsObject tormaaja, PhysicsObject Kohde)
496    {
497        if (Kohde.Tag == "Mansikka")
498        {
499            Explosion rajahdys = new Explosion(100);
500            rajahdys.Position = tormaaja.Position;
501            rajahdys.Force = 0;
502            Add(rajahdys);
503            tormaaja.Destroy();
504            Kohde.Destroy();
505            Pisteet.Value += 1;
506
507
508        }
509    }
510
511    IntMeter pistelaskuri(double x, double y)
512    {
513        IntMeter laskuri = new IntMeter(0);
514        laskuri.MaxValue = 1000;
515        Label naytto = new Label();
516        naytto.BindTo(laskuri);
517        naytto.X = x;
518        naytto.Y = y;
519        naytto.TextColor = Color.Black;
520        naytto.BorderColor = Level.BackgroundColor;
521        naytto.Color = Level.BackgroundColor
522    ;
523        Add(naytto);
524
525        return laskuri;
526    }
527
528
529    void LisaaLaskuri()
530    {
531        Pisteet = pistelaskuri(550, 400);
532
533
534
535
536
537
538    }
539
540    void TallennaPisteet(Window sender)
541    {
542
543        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
544    }
545
546
547
548
549
550
551    void Lopetapeli()
552    {
553        Onkopeliloppunut = true;
554        if (DataStorage.Exists("pisteet.xml"))
555            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
556        HighScoreWindow topIkkuna = new HighScoreWindow("Pelin nimi tai jotain",
557                             "Parhaat pisteet",
558                             "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:",
559                             topLista, Pisteet);
560        topIkkuna.Closed += TallennaPisteet;
561        topIkkuna.OKButton.Clicked += new Action(Begin);
562
563
564        Add(topIkkuna);
565
566    }
567
568
569    void timer2()
570    {
571        Timer ajastin = new Timer();
572        ajastin.Interval = RandomGen.NextDouble(0.4, 1);
573        ajastin.Timeout += Mansikka2;
574        ajastin.Start();
575
576
577
578
579    }
580
581
582
583    void Mansikka2()
584    {
585
586        PhysicsObject Mansikka = new PhysicsObject(100, 100);
587        Mansikka.Image = MansikanKuva;
588        Mansikka.X = RandomGen.NextDouble(-500, 500);
589        Mansikka.Y = 600;
590        Add(Mansikka);
591        Vector alas = new Vector(0, -200);
592        Mansikka.Hit(alas);
593
594
595
596    }
597
598    void Aloitapelivaikeus(int vaikeus)
599    {
600
601        Vaikeustaso = vaikeus;
602
603        Aloitapeli();
604
605
606
607
608    }
609
610
611    void laskuri0()
612    {
613        Timer ajastin = new Timer();
614        ajastin.Interval = RandomGen.NextDouble(0.5, 0.9);
615        ajastin.Timeout += Mansikka2;
616        ajastin.Start();
617       
618
619
620
621    }
622
623
624}
625
626
627
628
629
630
631
Note: See TracBrowser for help on using the repository browser.