source: 2011/26/JouniM/MatoPeli/MatoPeli/MatoPeli/Peli.cs @ 2370

Revision 2370, 6.8 KB checked in by jojumuho, 9 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    PhysicsObject Mato;
12    PhysicsObject Saalis;
13
14    DoubleMeter alaspainLaskuri;
15
16    Timer ajastin;
17    Timer sadeajastin;
18    Timer aikaLaskuri;
19    IntMeter pisteLaskuri;
20
21    Image MadonKuva = LoadImage("Mato");
22    Image SaaliinKuva = LoadImage("Saalis");
23    Image GameOver = LoadImage("game over");
24
25    bool kuolematon = false;
26
27    public override void Begin()
28    {
29        // TODO: Kirjoita ohjelmakoodisi tähän
30
31        ajastin = new Timer();
32        ajastin.Interval = 0.1;
33        ajastin.Trigger += LiikutaMatoa;
34
35
36        sadeajastin = new Timer();
37        sadeajastin.Trigger += LuoVihollinen;
38
39        aikaLaskuri = new Timer();
40        aikaLaskuri.Interval = 0.1;
41        aikaLaskuri.Trigger += LaskeAlaspain;
42
43        Aloitapeli();
44
45    }
46
47    private void Aloitapeli()
48    {
49        sadeajastin.Interval = 1.1;
50        LuoKentta();
51        LuoMato();
52        AsetaOhjaimet();
53        LuoSaalis(20, 30);
54        LuoLaskuri();
55        LuoAikaLaskuri();
56        ajastin.Start();
57        sadeajastin.Start();
58        aikaLaskuri.Start();
59
60
61    }
62
63    void LuoKentta()
64    {
65        Level.CreateBorders();
66        Camera.ZoomToLevel();
67
68
69    }
70
71    void LuoMato()
72    {
73        Mato = new PhysicsObject(30.0, 40.0);
74        Mato.Tag = "Mato";
75        Add(Mato);
76        Mato.Shape = Shape.Heart;
77        Mato.Image = MadonKuva;
78
79        AddCollisionHandler(Mato, KasitteleMadonTormays);
80
81    }
82
83    void KasitteleMadonTormays(PhysicsObject Mato, PhysicsObject kohde)
84    {
85
86        if (kohde.Tag.ToString() == "saalis")
87        {
88            kohde.Destroy();
89            SaalisDestroyed();
90        }
91
92    }
93
94
95    void AsetaOhjaimet()
96    {
97        Mouse.IsCursorVisible = true;
98        Keyboard.Listen(Key.G, ButtonState.Down, TuleeKuolemattomaksi, null);
99        Keyboard.Listen(Key.G, ButtonState.Up, Kuolemattomuusloppuu, null);
100        Keyboard.Listen(Key.R, ButtonState.Released, uudestaan, "aloitus");
101
102
103    }
104
105
106    void TuleeKuolemattomaksi()
107    {
108        kuolematon = true;
109    }
110
111    void Kuolemattomuusloppuu()
112    {
113        kuolematon = false;
114    }
115
116    void KuunteleLiiketta(AnalogState hiirenTila)
117    {
118        Mato.X = Mouse.PositionOnWorld.X;
119        Mato.Y = Mouse.PositionOnWorld.Y;
120
121        Vector hiirenLiike = hiirenTila.MouseMovement;
122
123    }
124
125    void LiikutaMatoa(Timer sender)
126    {
127        Vector etaisyys = Mouse.PositionOnWorld - Mato.Position;
128        Mato.MoveTo(Mouse.PositionOnWorld, etaisyys.Magnitude * 1.5);
129        Mato.Angle = etaisyys.Angle + Angle.FromDegrees(270);
130
131    }
132
133    void LuoSaalis(double X, double Y)
134    {
135        Saalis = new PhysicsObject(30, 30);
136        Saalis.Tag = "saalis";
137        Saalis.Image = SaaliinKuva;
138        Add(Saalis);
139        Saalis.Shape = Shape.Star;
140        Saalis.X = RandomGen.NextDouble(Level.Left, Level.Right);
141        Saalis.Y = RandomGen.NextDouble(Level.Bottom, Level.Top);
142        //FollowerBrain karkuunSaalis = new FollowerBrain(Mato, -50);
143        //karkuunSaalis.Target = Mato;
144        //Saalis.Brain = karkuunSaalis;
145        Saalis.Hit(new Vector(RandomGen.NextDouble(-600, 600), RandomGen.NextDouble(-600, 600)));
146        AddCollisionHandler(Saalis, KasitteleSaaliinTormays);
147        //Saalis.Destroyed += new Action(Saalis_Destroyed);
148    }
149
150    void KasitteleSaaliinTormays(PhysicsObject saalis, PhysicsObject kohde)
151    {
152        if(kohde.Tag.ToString() != "saalis") saalis.Hit(-1/2*saalis.Position);
153    }
154
155    void SaalisDestroyed()
156    {
157        LuoSaalis(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
158        LuoSaalis(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
159        pisteLaskuri.Value = pisteLaskuri.Value + 1 ;
160        // KasvataMatoa();
161    }
162
163    void LuoLaskuri()
164    {
165        pisteLaskuri = new IntMeter(0);
166
167        Label pisteTeksti = new Label("Pisteitä: ");
168        pisteTeksti.X = Screen.Right - 160;
169        pisteTeksti.Y = Screen.Top - 100;
170        pisteTeksti.TextColor = Color.Red;
171        Add(pisteTeksti);
172
173        Label pisteNaytto = new Label();
174        pisteNaytto.X = Screen.Right - 110;
175        pisteNaytto.Y = Screen.Top - 100;
176        pisteNaytto.TextColor = Color.Red;
177
178        pisteNaytto.BindTo(pisteLaskuri);
179        Add(pisteNaytto);
180
181
182    }
183
184    void LuoVihollinen(Timer sender)
185    {
186        sender.Interval = sender.Interval - 0.019;
187
188        Vector suunta = new Vector(0, 1);
189
190        Vector position;
191        if (RandomGen.NextBool())
192        {
193            double x = RandomGen.NextDouble(Level.Left, Level.Right);
194            while (Math.Abs(Mato.X - x) <100 )
195            {
196                x = RandomGen.NextDouble(Level.Left, Level.Right);
197            }
198            position = new Vector(x, Level.Top);
199            suunta = new Vector(0.0, -1);
200        }
201
202        else
203        {
204        double y = RandomGen.NextDouble(Level.Bottom, Level.Top);
205            while (Math.Abs(Mato.Y - y) <100 )
206            {
207                y = RandomGen.NextDouble(Level.Bottom, Level.Top);
208            }
209            position = new Vector(Level.Left, y);
210            suunta = new Vector(1,0);
211        }
212
213       
214        PhysicsObject Vihollinen = new PhysicsObject(new RaySegment(position, suunta, 2000));
215        Vihollinen.MaximumLifetime = TimeSpan.FromSeconds(2.0);
216        Vihollinen.Color = Color.Red;
217        AddCollisionHandler(Vihollinen, KasitteleVihollisenTormays);
218        Add(Vihollinen);
219
220    }
221
222    void KasitteleVihollisenTormays(PhysicsObject Vihollinen, PhysicsObject kohde)
223    {
224        if (kohde.Tag.ToString() == "Mato" && kuolematon == false)
225        {
226            kohde.Destroy();
227        }
228    }
229
230    void LuoAikaLaskuri()
231    {
232        alaspainLaskuri = new DoubleMeter(35);
233
234        Label aikaNaytto = new Label();
235        aikaNaytto.TextColor = Color.White;
236        aikaNaytto.DecimalPlaces = 1;
237        aikaNaytto.BindTo(alaspainLaskuri);
238        aikaNaytto.X = 0;
239        aikaNaytto.Y = Screen.Top - 100;
240        Add(aikaNaytto);
241    }
242
243    void LaskeAlaspain(Timer timer)
244    {
245        alaspainLaskuri.Value -= 0.1;
246
247        if (alaspainLaskuri.Value <= 0)
248        {
249            MessageDisplay.Add("Peli Loppui");
250            timer.Stop();
251            ClearAll();
252            Widget lopputeksti = new Widget(Screen.Width, Screen.Height);
253            lopputeksti.Image = GameOver;
254            Add(lopputeksti);
255
256            // täydennä mitä tapahtuu, kun aika loppuu
257        }
258    }
259
260
261    void uudestaan()
262    {
263        ClearAll();
264
265        Aloitapeli();
266    }
267
268}
Note: See TracBrowser for help on using the repository browser.