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

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