source: 2013/30/NoelV/shooter/shooter/shooter/shooter.cs @ 4670

Revision 4670, 10.3 KB checked in by novaanan, 7 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 shooter : PhysicsGame
10{
11    DoubleMeter elamaLaskuri;
12    IntMeter pisteLaskuri;
13    IntMeter vihollisLaskuri;
14
15    Image aluksenKuva = LoadImage("alus");
16    Image vihollisenKuva = LoadImage("vihollinen");
17    Image enkanKuva = LoadImage("enkka");
18    SoundEffect ampuminen = LoadSoundEffect("laser");
19    Image kilvenKuva = LoadImage("kilpi");
20    PhysicsObject alus;
21
22    PhysicsObject ammus;
23
24    EasyHighScore topLista = new EasyHighScore();
25
26    bool onkoKilpea = false;
27
28    public override void Begin()
29    {
30        //topLista.HighScoreWindow.Image = aluksenKuva;
31        topLista.HighScoreWindow.OKButton.Image = vihollisenKuva;
32
33        //topLista.Show();
34        //alkuvalikko tähän
35        valikko(null);
36
37    }
38
39    void valikko(Window sender)
40    {
41        MultiSelectWindow alkuValikko = new MultiSelectWindow("Valikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
42        alkuValikko.Image = aluksenKuva;
43        Level.BackgroundColor = Color.Red;
44        alkuValikko.SelectionColor = Color.Black;
45        Add(alkuValikko);
46        alkuValikko.AddItemHandler(0, AloitaPeli);
47        alkuValikko.AddItemHandler(1, ParhaatPisteet);
48        alkuValikko.AddItemHandler(2, Exit);
49
50        alkuValikko.Color = Color.Transparent;
51
52
53    }
54
55    void ParhaatPisteet()
56    {
57        topLista.Show();
58        topLista.HighScoreWindow.Closed += valikko;
59    }
60
61    void AloitaPeli()
62    {
63        ClearAll();
64        LuoPelaaja();
65
66
67
68
69        LuoVihollinen(new Vector(0, 450));
70
71        //Surfaces reunat = Level.CreateBorders(1.3, true);
72
73        Level.BackgroundColor = Color.Gray;
74
75        Timer vihunLuontiAjastin = new Timer();
76        vihunLuontiAjastin.Interval = 0.6;
77        vihunLuontiAjastin.Timeout += delegate { LuoVihollinen(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Top)); };
78        vihunLuontiAjastin.Start();
79
80        Timer enkkaAjastin = new Timer();
81        enkkaAjastin.Interval = 15.0;
82        enkkaAjastin.Timeout += delegate { LuoEnkka(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Top)); };
83        enkkaAjastin.Start();
84
85        Timer kilpiAjastin = new Timer();
86        kilpiAjastin.Interval = 22.0;
87        kilpiAjastin.Timeout += delegate { LuoKilpi(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Top)); };
88        kilpiAjastin.Start();
89
90        LuoElamaLaskuri();
91        LuoPisteLaskuri();
92
93
94        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, "Ampuu", alus);
95        Keyboard.Listen(Key.Escape, ButtonState.Pressed, KysyPoistumista, "Lopeta peli");
96
97        Level.Background.CreateStars();
98        Camera.ZoomToLevel();
99    }
100
101    void KysyPoistumista()
102    {
103        IsPaused = true;
104        MultiSelectWindow valikko = new MultiSelectWindow("Haluatko lopettaa?",
105"Kyllä", "Ei", "EN tiedä!");
106        valikko.AddItemHandler(0, Exit);
107        valikko.AddItemHandler(2, delegate { if (RandomGen.NextBool()) Exit(); });
108        valikko.Closed += delegate { IsPaused = false; };
109        valikko.Color = Color.Red;
110        Add(valikko);
111
112    }
113
114
115    private void LuoPelaaja()
116    {
117        alus = new PhysicsObject(100, 100);
118        alus.Image = aluksenKuva;
119        Add(alus);
120        Mouse.IsCursorVisible = true;
121        alus.CollisionIgnoreGroup = 2;
122        alus.MakeStatic();
123        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
124        alus.Position = new Vector(0, -350);
125        alus.Tag = "alus";
126        alus.Restitution = 1.5;
127        alus.CanRotate = false;
128
129        AddCollisionHandler(alus, "vihu", OsuuViholliseen);
130
131        AddCollisionHandler(alus, "enkka", OsuuEnkkaan);
132
133        AddCollisionHandler(alus, "kilpi", OsuuKilpeen);
134
135    }
136
137    void OsuuKilpeen(PhysicsObject pelaaja, PhysicsObject kilpi)
138    {
139        kilpi.Destroy();
140        onkoKilpea = true;
141
142        double aikaaJaljella = 10.0;
143       
144        Label teksti = new Label("kilpi " + aikaaJaljella);
145        teksti.Y = Screen.Top - 100;
146        teksti.X = Screen.Left + 100;
147        teksti.TextColor = Color.Red;
148        Add(teksti);
149
150        Timer ajastin = new Timer();
151        ajastin.Interval = 1.0;
152        //myöhemmin: näytä aia jäljellä väliajoin:
153        ajastin.Timeout += delegate 
154        {
155            aikaaJaljella -= 1.0;
156            teksti.Text = "kilpi " + aikaaJaljella;
157           
158            //MessageDisplay.Add("Aikaa: " + aikaaJaljella);
159 
160        };
161        ajastin.Start(5);
162        ajastin.Stopped += delegate 
163        {
164            onkoKilpea = false;
165            teksti.Destroy();
166 
167       
168        };
169       
170    }
171
172    void OsuuViholliseen(PhysicsObject pelaaja, PhysicsObject vihu)
173    {
174        if (onkoKilpea == false)
175        {
176            elamaLaskuri.Value--;
177
178        }
179        else
180        {
181            vihu.Destroy();
182        }
183    }
184
185
186    private void LuoVihollinen(Vector paikka)
187    {
188        PhysicsObject vihollinen = new PhysicsObject(100, 100);
189        vihollinen.Position = paikka;
190        vihollinen.Image = vihollisenKuva;
191
192        Add(vihollinen);
193        Vector impulssi = new Vector(0.0, -100000.0);
194        vihollinen.Hit(impulssi);
195        vihollinen.Restitution = 1.5;
196        //vihollinen.Velocity = 100;
197        vihollinen.Tag = "vihu";
198
199        vihollinen.MoveTo(new Vector(RandomGen.NextDouble(Level.Left, Level.Right), Level.Bottom - 250), 500, delegate { vihollisLaskuri.Value++; });
200        //FollowerBrain seuraajanAivot = new FollowerBrain("alus");
201        //seuraajanAivot.Speed = 500.0;
202        //seuraajanAivot.DistanceClose = 200;
203        //seuraajanAivot.TargetClose += delegate
204        //{
205        //    seuraajanAivot.Active = false;
206        //    vihollinen.Hit(new Vector(0, -5000));
207
208        //};
209
210        //vihollinen.Brain = seuraajanAivot;
211
212
213    }
214
215
216
217    void Ammu(PhysicsObject ampuja)
218    {
219        if (ampuja.IsDestroyed) return;
220        ampuminen.Play();
221        //PlaySound("laser");
222        ammus = new PhysicsObject(2, 20);
223        ammus.Color = Color.OrangeRed;
224        ammus.LifetimeLeft = TimeSpan.FromSeconds(4);
225        ammus.Position = ampuja.Position;
226        ammus.CollisionIgnoreGroup = ampuja.CollisionIgnoreGroup;
227        Add(ammus);
228
229        ammus.Hit(Vector.FromLengthAndAngle(1000, ampuja.Angle + Angle.FromDegrees(90)));
230        ammus.Angle = ampuja.Angle;
231        ammus.Tag = "ammus";
232        AddCollisionHandler(ammus, AmmusOsuu);
233    }
234
235    void AmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
236    {
237
238        if (!kohde.Tag.Equals("enkka")) ammus.Destroy();
239        if (kohde.Tag.Equals("vihu"))
240        {
241            Explosion rajahdys = new Explosion(150);
242            rajahdys.Position = kohde.Position;
243            rajahdys.ShockwaveColor = Color.Transparent;
244            Add(rajahdys);
245            kohde.Destroy();
246            pisteLaskuri.Value++;
247        }
248    }
249
250
251    void LiikutaPelaajaa(Vector vektori)
252    {
253        alus.Push(vektori);
254    }
255
256    void KuunteleLiiketta(AnalogState hiirenTila)
257    {
258        alus.X = Mouse.PositionOnWorld.X;
259
260        Vector hiirenLiike = hiirenTila.MouseMovement;
261    }
262
263    void LuoPisteLaskuri()
264    {
265        pisteLaskuri = new IntMeter(0, 0, int.MaxValue);
266
267        Label pisteNaytto = new Label();
268        pisteNaytto.X = Screen.Right - 100;
269        pisteNaytto.Y = Screen.Top - 100;
270        pisteNaytto.TextColor = Color.Orange;
271        pisteNaytto.Color = Color.Transparent;
272        pisteNaytto.IntFormatString = "Pisteet: {00}";
273        pisteNaytto.BindTo(pisteLaskuri);
274        Add(pisteNaytto);
275
276        vihollisLaskuri = new IntMeter(0, 0, 5);
277        vihollisLaskuri.UpperLimit += ElamaLoppui;
278
279        Label vihollisNaytto = new Label();
280        vihollisNaytto.X = 0;
281        vihollisNaytto.Y = Screen.Top - 100;
282        vihollisNaytto.TextColor = Color.Red;
283        vihollisNaytto.Color = Color.Transparent;
284        vihollisNaytto.IntFormatString = "Vihollisia päässyt läpi: {00}";
285        vihollisNaytto.BindTo(vihollisLaskuri);
286        Add(vihollisNaytto);
287    }
288
289
290    void LuoElamaLaskuri()
291    {
292        elamaLaskuri = new DoubleMeter(10);
293        elamaLaskuri.MaxValue = 10;
294        elamaLaskuri.LowerLimit += ElamaLoppui;
295
296        ProgressBar elamaPalkki = new ProgressBar(150, 20);
297        elamaPalkki.X = Screen.Left + 150;
298        elamaPalkki.Y = Screen.Top - 20;
299        elamaPalkki.BindTo(elamaLaskuri);
300        Add(elamaPalkki);
301    }
302
303    void ElamaLoppui()
304    {
305
306        Explosion rajahdys = new Explosion(50);
307
308        rajahdys.Position = alus.Position;
309        Add(rajahdys);
310        Pause();
311
312        alus.Destroy();
313        MessageDisplay.Add("Hävisit pelin");
314
315        Label teksti = new Label("PELI LOPPUI!!!");
316        teksti.TextScale = new Vector(3, 3);
317        Add(teksti);
318        teksti.Color = Color.Red;
319
320        topLista.EnterAndShow(pisteLaskuri.Value);
321        topLista.HighScoreWindow.Closed += AloitaAlusta;
322
323    }
324
325    public void AloitaAlusta(Window sender)
326    {
327        ClearAll();
328        if (IsPaused == true)
329        {
330            Pause();
331        }
332        Begin();
333    }
334
335    private void LuoEnkka(Vector paikka)
336    {
337        PhysicsObject enkka = new PhysicsObject(50, 50);
338        enkka.Position = paikka;
339        enkka.Image = enkanKuva;
340        enkka.IgnoresCollisionResponse = true;
341        enkka.IgnoresExplosions = true;
342        Add(enkka);
343        Vector impulssi = new Vector(0.0, -500.0);
344        enkka.Hit(impulssi);
345        enkka.Tag = "enkka";
346        enkka.CanRotate = false;
347
348    }
349
350    void OsuuEnkkaan(PhysicsObject pelaaja, PhysicsObject enkka)
351    {
352        elamaLaskuri.Value += 2;
353        enkka.Destroy();
354    }
355
356    void LuoKilpi(Vector paikka)
357    {
358        IPhysicsObject kilpi = new PhysicsObject(50, 50);
359        kilpi.Position = paikka;
360        kilpi.Image = kilvenKuva;
361        kilpi.IgnoresCollisionResponse = true;
362        kilpi.IgnoresExplosions = true;
363        Add(kilpi);
364        Vector impulssi = new Vector(0.0, -500.0);
365        kilpi.Hit(impulssi);
366        kilpi.Tag = "kilpi";
367        kilpi.CanRotate = false;
368    }
369}
370
371
372
373
374
375
376
377
Note: See TracBrowser for help on using the repository browser.