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

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