source: 2011/24/LeeviK/Pong/Pong/Pong/Peli.cs @ 3761

Revision 3761, 15.7 KB checked in by lesejuku, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Assets;
7using Jypeli.Controls;
8using Jypeli.Effects;
9using Jypeli.Widgets;
10
11
12class Natsi : PhysicsObject
13{
14    public int Elamat = 3;
15
16    public Natsi(double leveys, double korkeus)
17        : base(leveys, korkeus)
18    {
19    }
20}
21
22class Pelaaja : PhysicsObject
23{
24
25    public int Elamat = 2;
26    public List<Weapon> aseet;
27
28    public Pelaaja(double leveys, double korkeus)
29        : base(leveys, korkeus)
30    {
31        aseet = new List<Weapon>();
32    }
33}
34
35public class Peli : PhysicsGame
36{
37    Vector nopeusYlos = new Vector(0, 200);
38    Vector nopeusAlas = new Vector(0, -200);
39    List<Label> valikonKohdat;
40
41
42    //GameObject crosshair;
43    PhysicsObject pelaaja;
44    PhysicsObject pelaaja2;
45
46    AssaultRifle pulttilukkoKivaari;
47    AssaultRifle rynkky;
48    AssaultRifle aktiivinenAse;
49
50    Label ammoNaytto;
51    Animation pulttilukkoAnimaatio;
52    Animation rynkkyAnimaatio;
53    SoundEffect aseAani = LoadSoundEffect("SpringfieldFire1");
54    ExplosionSystem explosionSystem2;
55    ExplosionSystem explosionSystem;
56    SoundEffect osumisAani = LoadSoundEffect("den_damage_32");
57    Image crosshairkuva = LoadImage("crosshair kuva");
58    Image jenkkiveri = LoadImage("jenkkiveri");
59    Image muurikakka = LoadImage("Muuri");
60    SoundEffect LaskuriAani = LoadSoundEffect("wave");
61    Image punainenlaiska = LoadImage("HITLERNATSI");
62    IntMeter kenttaLaskuri;
63    IntMeter Pistelaskuri;
64    ScoreList topLista = new ScoreList(10, false, 0);
65    Image ammusKuva = LoadImage("luodi");
66    Image[] natsikuvat = LoadImages("NATSI", "NATSI");
67
68
69    public override void Begin()
70    {
71        Valikko();
72        topLista = DataStorage.TryLoad<ScoreList>(topLista, "pisteet.xml");
73    }
74
75    void LuoNatsi(Vector paikka, double x, double y)
76    {
77        Natsi natsi = new Natsi(40, 40);
78        natsi.Shape = Shape.Circle;
79        natsi.Position = new Vector(x, y);
80        natsi.Tag = "natsi";
81
82        Image natsinKuva = LoadImage("NATSI");
83        natsi.Image = natsinKuva;
84        natsi.Animation = new Animation(natsikuvat);
85        natsi.Animation.Start();
86        natsi.Width = 175;
87        natsi.Height = 130;
88
89        FollowerBrain natsinAivot = new FollowerBrain(pelaaja, pelaaja2);
90        //natsinAivot.FollowDistance = 1;
91        natsinAivot.TurnWhileMoving = true;
92        natsinAivot.Speed = 160;
93        natsinAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
94        //natsinAivot.FollowAlways = true;
95        natsinAivot.Active = true;
96        natsi.Brain = natsinAivot;
97        Add(natsi);
98        natsi.Angle = pelaaja.Angle;
99
100        //Timer ajastin = new Timer();
101        //ajastin.Interval = 300000000.0;
102        //ajastin.Timeout += KäännyPelaajaan;
103        //ajastin.Start();
104        //ajastin.Tag = natsi;
105    }
106
107
108
109    void LiikutaPelaajaa(Vector suunta)
110    {
111        pelaaja.Push(suunta);
112    }
113
114    void LuoKentta()
115    {
116        TileMap ruudut = TileMap.FromFile("Round.txt");
117
118        ruudut.SetTileMethod('Z', LuoNatsi);
119        ruudut.SetTileMethod('P', LuoPelaajat);
120        ruudut.SetTileMethod('M', LuoMuuri);
121        ruudut.Execute(500, 100);
122
123        Timer ajastin = new Timer();
124        ajastin.Interval = 2.0;
125        ajastin.Timeout += lisaaNatseja;
126        ajastin.Start();
127
128        //crosshair = new GameObject(5.0, 5.0, Shape.Circle);
129        //crosshair.Image = crosshairkuva;
130        //Add(crosshair);
131
132        explosionSystem2 = new ExplosionSystem(LoadImage("jenkkiveri"), 100);
133        //MediaPlayer.Play("mus_17a_mystery");
134
135        Level.BackgroundColor = Color.DarkGreen;
136
137        Camera.Follow(pelaaja, pelaaja2);
138        Add(explosionSystem);
139        explosionSystem.MinScale = 50;
140        explosionSystem.MaxScale = 50;
141        explosionSystem.MinLifetime = 0.1;
142        explosionSystem.MaxLifetime = 1;
143        Timer ajastin2 = new Timer();
144        ajastin2.Interval = 214;
145        ajastin2.Timeout += pistelaskuri;
146        ajastin2.Start();
147        LuoLaskurit();
148    }
149
150    void LuoPelaajat(Vector paikka, double x, double y)
151    {
152        pelaaja = LuoPelaaja(paikka, x, y);
153        pelaaja2 = LuoPelaaja(paikka, x, y);
154        alustaAseet();
155    }
156
157    PhysicsObject LuoPelaaja(Vector paikka, double x, double y)
158    {
159        PhysicsObject pelaaja = new PhysicsObject(200.0, 115.0);
160        pelaaja.Shape = Shape.Circle;
161        pelaaja.Image = LoadImage("jenkki");
162        pelaaja.X = -200.0;
163        pelaaja.Y = 0.0;
164        pelaaja.Restitution = 0.7;
165        pelaaja.AngularDamping = 0.7;
166        pelaaja.LinearDamping = 0.9;
167        pelaaja.KineticFriction = 0.0;
168        Add(pelaaja);
169        AddCollisionHandler(pelaaja, KasittelePelaajanTormays);   
170        return pelaaja;
171    }
172
173    void alustaAseet()
174    {
175        // rynkky
176        rynkky = new AssaultRifle(20, 0);
177        rynkky.Ammo.Value = 30;
178        rynkky.Ammo.MinValue = 0;
179        rynkky.Ammo.LowerLimit += delegate
180        {
181            pelaaja.Animation.Start();
182            Timer.SingleShot(1, delegate
183            {
184                rynkky.Ammo.Value += 30;
185                pelaaja.Animation.Stop();
186            });
187        };
188        rynkky.ProjectileCollision = AmmusOsui;
189        pelaaja.Add(rynkky);
190
191        aktiivinenAse = rynkky;
192
193        // pulttilukko
194        pulttilukkoKivaari = new AssaultRifle(20, 0);
195        pulttilukkoKivaari.TimeBetweenUse = TimeSpan.FromSeconds(1.0);
196        pulttilukkoKivaari.AttackSound = aseAani;
197
198        pulttilukkoKivaari.Ammo.Value = 1;
199        pulttilukkoKivaari.Ammo.MinValue = 0;
200        pulttilukkoKivaari.Ammo.LowerLimit += delegate
201        {
202            pelaaja.Animation.Start();
203            Timer.SingleShot(1, delegate
204            {
205                pulttilukkoKivaari.Ammo.Value += 1;
206                pelaaja.Animation.Stop();
207            });
208        };
209        pulttilukkoKivaari.ProjectileCollision = AmmusOsui;
210
211        pelaaja.Add(pulttilukkoKivaari);
212    }
213
214    /*void LataaAse(int arvo)
215    {
216        Timer.SingleShot(1, LisaaAmmuksia);
217        pelaaja.Animation.Start();
218    }
219
220    void LisaaAmmuksia()
221    {
222        pelaajanAse.Ammo.Value += 30;
223        pelaaja.Animation.Stop();
224    }*/
225
226    Label LuoNaytto(double x, double y, IntMeter sidottavaLaskuri)
227    {
228        Label naytto = new Label();
229        naytto.BindTo(sidottavaLaskuri);
230        naytto.X = x;
231        naytto.Y = y;
232        naytto.TextColor = Color.White;
233        naytto.BorderColor = Level.BackgroundColor;
234        naytto.Color = Level.BackgroundColor;
235        Add(naytto);
236        return naytto;
237    }
238
239
240    void AsetaOhjaimet()
241    {
242        //Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa vasemmalle", new Vector(-1500, 0));
243        //Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1500, 0));
244        //Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1500));
245        //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1500));
246
247        //Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, pelaajanAse);
248        //Keyboard.Listen(Key.F, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse1);     
249
250        //Pelaaja 1 liikkuminen
251
252        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "sticks move against rotation.", pelaaja);
253        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, KäännäPelaajaa, "sticks move against rotation.", pelaaja);
254
255        ControllerOne.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuAseella, "Use the right trigger, like the accelerator.", aktiivinenAse);
256        ControllerOne.Listen(Button.Y, ButtonState.Pressed, VaihdaAse, "");
257
258        //Pelaaja 2 liikkuminen
259
260        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "sticks move against rotation.", pelaaja2);
261        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, KäännäPelaajaa, "sticks move against rotation.", pelaaja2);
262
263        ControllerTwo.ListenAnalog(AnalogControl.RightTrigger, 0.1, AmmuAseella, "Use the right trigger, like the accelerator.", aktiivinenAse);
264        ControllerTwo.Listen(Button.Y, ButtonState.Pressed, VaihdaAse, "");
265
266
267    }
268
269    void AmmuAseella(AnalogState liipasimenTila, Weapon ase)
270    {
271        double liipasimenAsento = liipasimenTila.State;
272        PhysicsObject ammus = ase.Shoot();
273
274        if (ammus != null)
275        {
276            ammus.Size = new Vector(ammus.Width * 5.0, ammus.Height * 0.2);
277            ammus.Color = Color.Yellow;
278        }
279    }
280
281
282    void KäännäPelaajaa(AnalogState tatinTila, PhysicsObject Kapitalisti)
283    {
284        Kapitalisti.Angle = tatinTila.StateVector.Angle;
285    }
286
287    void LiikutaPelaajaa(AnalogState tatinTila, PhysicsObject Kapitalisti)
288    {
289        Vector tatinSuunta = tatinTila.StateVector;
290        Kapitalisti.Push(tatinSuunta * 1500);
291    }
292
293
294    void KuunteleLiiketta(AnalogState hiirenTila)
295    {
296        Vector suunta = (pelaaja.Position - Mouse.PositionOnWorld).Normalize();
297        Mouse.IsCursorVisible = true;
298        Vector hiirenLiike = hiirenTila.MouseMovement;
299        pelaaja.Angle = suunta.Angle + Angle.FromDegrees(180);
300
301        //crosshair.X  = Mouse.PositionOnWorld.X;
302        //crosshair.Y = Mouse.PositionOnWorld.Y;
303        Mouse.IsCursorVisible = false;
304    }
305
306    void AmmuAseella(PhysicsObject pelaaja, Weapon pelaajanAse)
307    {
308        PhysicsObject ammus = pelaajanAse.Shoot();
309
310        if (ammus != null)
311        {
312            ammus.Size = new Vector(ammus.Width * 2.0, ammus.Height * 0.2);
313
314            ammus.Image = ammusKuva;
315        }
316
317    }
318
319    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
320    {
321        ammus.Destroy();
322
323        if (kohde is Natsi)
324        {
325            Natsi natsi = (Natsi)kohde;
326            natsi.Elamat--;
327            Explosion rajahdys = new Explosion(50);
328            rajahdys.Position = ammus.Position;
329            rajahdys.Force = 5;
330            rajahdys.ShockwaveColor = Color.Red;
331            rajahdys.Sound = osumisAani;
332            Add(rajahdys);
333
334            if (natsi.Elamat < 1)
335            {
336                explosionSystem.AddEffect(natsi.Position, 100);
337                natsi.Destroy();
338                Pistelaskuri.Value += 50;
339            }
340        }
341    }
342
343    void mitaTapahtuuKunOllaanLahella()
344    {
345
346    }
347
348    void VaihdaAse()
349    {
350        if (aktiivinenAse == rynkky)
351        {
352            aktiivinenAse = pulttilukkoKivaari;
353            ammoNaytto.Unbind();
354            ammoNaytto.BindTo(pulttilukkoKivaari.Ammo);
355            pelaaja.Animation = pulttilukkoAnimaatio;
356        }
357        else
358        {
359            aktiivinenAse = rynkky;
360            ammoNaytto.Unbind();
361            ammoNaytto.BindTo(rynkky.Ammo);
362            pelaaja.Animation = rynkkyAnimaatio;
363        }
364    }
365
366    void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
367    {
368        if (kohde.Tag.ToString() == "natsi")
369        {
370            pelaaja.Destroy();
371            explosionSystem.AddEffect(pelaaja.Position, 100);
372
373            HighScoreWindow topIkkuna = new HighScoreWindow("Zombie Survival BETA Local Highscores",
374                             "You Got  %p! Enter Your Name:",
375                             topLista, Pistelaskuri.Value);
376            topIkkuna.Closed += TallennaPisteet;
377            Add(topIkkuna);
378
379        }
380    }
381
382    void Valikko()
383    {
384        ClearAll();
385        valikonKohdat = new List<Label>();
386
387        Label kohta1 = new Label("Start zombie survival");
388        kohta1.Position = new Vector(0, 40);
389        valikonKohdat.Add(kohta1);
390
391        Label kohta2 = new Label("Exit Game and be coward");
392        kohta2.Position = new Vector(0, -40);
393        valikonKohdat.Add(kohta2);
394
395        foreach (Label valikonKohta in valikonKohdat)
396        {
397            Add(valikonKohta);
398        }
399
400        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
401        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Poistu, null);
402
403        Mouse.IsCursorVisible = true;
404        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
405        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Poistu, "");
406    }
407    void ValikossaLiikkuminen(AnalogState hiirenTila)
408    {
409        foreach (Label kohta in valikonKohdat)
410        {
411            if (Mouse.IsCursorOn(kohta))
412            {
413                kohta.TextColor = Color.Red;
414            }
415            else
416            {
417                kohta.TextColor = Color.Black;
418            }
419
420        }
421    }
422
423    void AloitaPeli()
424    {
425        ClearAll();
426        explosionSystem = new ExplosionSystem(LoadImage("natsiveri"), 100);
427        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
428        LuoKentta();
429        AsetaOhjaimet();
430
431        //Muista ottaa pois kommentista:
432        //ammoNaytto = LuoNaytto(Screen.Left + 60, Screen.Top - 60, aktiivinenAse.Ammo);
433
434        Mouse.IsCursorVisible = true;
435        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
436        Image[] pulttilukkoKuvat = LoadImages("jenkki2", "jenkki2lataus1", "jenkki2lataus2", "jenkki2lataus3", "jenkki2lataus2", "jenkki2lataus1", "jenkki2", "jenkki2", "jenkki2", "jenkki2");
437        Image[] rynkkyKuvat = LoadImages("jenkki", "jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5", "jenkki lataus1");
438        pulttilukkoAnimaatio = new Animation(pulttilukkoKuvat);
439        rynkkyAnimaatio = new Animation(rynkkyKuvat);
440        pelaaja.Animation = pulttilukkoAnimaatio;
441        pelaaja.Animation.FPS = 10;
442    }
443
444    void Poistu()
445    {
446        Exit();
447    }
448
449    void KäännyPelaajaan(Timer sender)
450    {
451        Natsi natsi = (Natsi)sender.Tag;
452        Vector suunta = (pelaaja.Position - natsi.Position).Normalize();
453        natsi.Angle = suunta.Angle;
454    }
455
456
457    void LuoMuuri(Vector paikka, double leveys, double korkeus)
458    {
459        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
460        muuri.Position = paikka;
461        muuri.Shape = Shape.Rectangle;
462        muuri.Color = Color.Gray;
463        Add(muuri);
464        muuri.Image = muurikakka;
465    }
466
467    void lisaaNatseja()
468    {
469        LuoNatsi(new Vector(100, 50), 100, 50);
470
471
472    }
473
474    void LuoLaskurit()
475    {
476        kenttaLaskuri = new IntMeter(1);
477
478        Label KenttäNäyttö = new Label();
479        KenttäNäyttö.X = Screen.Left + 100;
480        KenttäNäyttö.Y = Screen.Bottom + 100;
481        KenttäNäyttö.TextColor = Color.Red;
482        KenttäNäyttö.SizeMode = TextSizeMode.StretchText;
483        KenttäNäyttö.Size *= 5;
484        KenttäNäyttö.BindTo(kenttaLaskuri);
485        Add(KenttäNäyttö);
486
487        Pistelaskuri = new IntMeter(0);
488
489        PhysicsObject punainenLaiska = new PhysicsObject(150, 200);
490        punainenLaiska.Image = punainenlaiska;
491        punainenLaiska.Position = new Vector(Screen.Right - 100, Screen.Bottom + 100);
492        Add(punainenLaiska);
493
494        Label PisteNäyttö = new Label();
495        PisteNäyttö.BindTo(Pistelaskuri);
496        Add(PisteNäyttö);
497        PisteNäyttö.TextColor = Color.White;
498        PisteNäyttö.X = Screen.Right - 100;
499        PisteNäyttö.Y = Screen.Bottom + 100;
500
501    }
502    void pistelaskuri()
503    {
504        LaskuriAani.Play();
505        kenttaLaskuri.Value++;
506    }
507
508
509    void TallennaPisteet(Window sender)
510    {
511        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
512    }
513}
Note: See TracBrowser for help on using the repository browser.