source: 2014/30/JouniP/Syonti/Syonti/Syonti/Syonti.cs @ 5578

Revision 5578, 5.0 KB checked in by jotapoti, 8 years ago (diff)

Luennolla lisätty ajastimia peliin: uusia vihollisia syntyy 5 sek välein, peli alkaa alusta jonkin ajan kuluttua kuolemisesta.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Syonti : PhysicsGame
10{
11    PhysicsObject pelaaja;
12
13    Vector nopeusOikealle   = new Vector( 200,    0);
14    Vector nopeusVasemmalle = new Vector(-200,    0);
15    Vector nopeusYlos       = new Vector(   0,  200);
16    Vector nopeusAlas       = new Vector(   0, -200);
17
18    //                                oletus, min, max
19    IntMeter pelaajanHealth = new IntMeter(10, 0, 10);
20
21    Image pelaajanKuva = LoadImage("pelaaja");
22
23    Timer vihollisajastin;
24
25    public override void Begin()
26    {
27        SetWindowSize(800, 600);
28        Level.Size = new Vector(800, 600);
29
30        AloitaPeliAlusta();
31    }
32
33    void AloitaPeliAlusta()
34    {
35        ClearAll();
36        pelaajanHealth.Value = pelaajanHealth.MaxValue;
37        LuoPelaaja();
38
39        // Tehdään muut pallot kenttään:
40        LuoPalloja(50, Color.Beige, "kerattava");
41
42        LuoPalloja(10, Color.Black, "pahis");
43
44
45        LuoPistelaskuri();
46
47
48        vihollisajastin = new Timer();
49        vihollisajastin.Interval = 5.0;
50        vihollisajastin.Timeout += TeeUusiVihollinen;
51        vihollisajastin.Start();
52
53        Level.CreateBorders();
54        LisaaNappaimet();
55    }
56
57    void LuoPistelaskuri()
58    {
59        Label pisteNaytto = new Label();
60        pisteNaytto.X = Screen.Left + 100;
61        pisteNaytto.Y = Screen.Top - 100;
62        pisteNaytto.TextColor = Color.Black;
63        pisteNaytto.Color = Color.White;
64
65        pisteNaytto.BindTo(pelaajanHealth);
66        pisteNaytto.IntFormatString = "Elämää: {0:D1}";
67        Add(pisteNaytto);
68    }
69
70    void TeeUusiVihollinen()
71    {
72        LuoPalloja(1, Color.DarkBrown, "pahis");
73    }
74
75    void LisaaNappaimet()
76    {
77        // Poistumisnäppäin
78        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
79        // Helppinäppäin:
80        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
81
82        // Pelaajan nuolinäppäimet:
83        Keyboard.Listen(Key.Right, ButtonState.Down, AsetaNopeus, "Liiku oikealle", pelaaja, nopeusOikealle);
84        Keyboard.Listen(Key.Right, ButtonState.Released, AsetaNopeus, "Liiku oikealle", pelaaja, Vector.Zero);
85        Keyboard.Listen(Key.Left, ButtonState.Down, AsetaNopeus, "Liiku vasemmalle", pelaaja, nopeusVasemmalle);
86        Keyboard.Listen(Key.Left, ButtonState.Released, AsetaNopeus, "Liiku vasemmalle", pelaaja, Vector.Zero);
87        Keyboard.Listen(Key.Up, ButtonState.Down, AsetaNopeus, "Liiku ylös", pelaaja, nopeusYlos);
88        Keyboard.Listen(Key.Up, ButtonState.Released, AsetaNopeus, "Liiku ylös", pelaaja, Vector.Zero);
89        Keyboard.Listen(Key.Down, ButtonState.Down, AsetaNopeus, "Liiku alas", pelaaja, nopeusAlas);
90        Keyboard.Listen(Key.Down, ButtonState.Released, AsetaNopeus, "Liiku alas", pelaaja, Vector.Zero);
91    }
92   
93    void AsetaNopeus(PhysicsObject hahmo, Vector nopeus)
94    {
95        hahmo.Velocity = nopeus;
96    }
97
98    void LuoPelaaja()
99    {
100        pelaaja = LuoPallo(0.0, 0.0, 30.0, Color.Red);
101        Add(pelaaja, 1);
102        pelaajanHealth.LowerLimit += PelaajaHaviaa;
103        pelaaja.Image = pelaajanKuva;
104
105        AddCollisionHandler(pelaaja, "kerattava", PelaajaOsuuKerattavaan);
106        AddCollisionHandler(pelaaja, "pahis", PelaajaOsuuPahikseen);
107    }
108
109    void PelaajaHaviaa()
110    {
111        Explosion rajahdys = new Explosion(200);
112        rajahdys.Position = pelaaja.Position;
113        Add(rajahdys);
114
115        // Lopetetaan uusien vihollisten luominen
116        vihollisajastin.Stop();
117
118        pelaaja.Destroy();
119        MessageDisplay.Add("Hävisit!");
120
121        // Aloitetaan peli hetken kuluttua kuolemisesta uudelleen:
122        Timer.SingleShot(4.0, AloitaPeliAlusta);
123    }
124
125    void PelaajaOsuuKerattavaan(PhysicsObject tormaaja, PhysicsObject kohde)
126    {
127        kohde.Destroy();
128        tormaaja.Size = tormaaja.Size + new Vector(10, 10);
129    }
130
131    void PelaajaOsuuPahikseen(PhysicsObject tormaaja, PhysicsObject kohde)
132    {
133        if (tormaaja.Width > 35)
134        {
135            tormaaja.Size = tormaaja.Size - new Vector(30, 30);
136        }
137        pelaajanHealth.Value -= 1;
138
139    }
140
141    void LuoPalloja(int maara, Color vari, string tagiteksti)
142    {
143        int i = 0;
144        while (i < maara)
145        {
146            double x = RandomGen.NextDouble(Level.Left, Level.Right);
147            double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
148            PhysicsObject p = LuoPallo(x, y, 20.0, vari);
149            p.Tag = tagiteksti;
150            Add(p);
151            i++;
152        }
153    }
154
155    PhysicsObject LuoPallo(double x, double y, double sade, Color vari)
156    {
157        PhysicsObject pallura = new PhysicsObject(sade * 2.0, sade * 2.0, Shape.Circle);
158        pallura.Position = new Vector(x, y);
159        pallura.Color = vari;
160        pallura.Tag = "pelaaja";
161        return pallura;
162    }
163}
Note: See TracBrowser for help on using the repository browser.