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

Revision 3700, 13.2 KB checked in by lesejuku, 10 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
22
23public class Peli : PhysicsGame
24{
25    Vector nopeusYlos = new Vector(0, 200);
26    Vector nopeusAlas = new Vector(0, -200);
27    List<Label> valikonKohdat;
28
29    GameObject crosshair;
30    PhysicsObject pelaaja;
31    AssaultRifle pelaajanAse;
32    AssaultRifle pelaajanAse1;
33    Label ammoNaytto;
34    Animation animaatio1;
35    SoundEffect aseAani = LoadSoundEffect("ThompsonFire1");
36    ExplosionSystem explosionSystem2;
37    ExplosionSystem explosionSystem;
38    SoundEffect osumisAani = LoadSoundEffect("den_damage_32");
39    Image crosshairkuva = LoadImage("crosshair kuva");
40    Image jenkkiveri = LoadImage("jenkkiveri");
41    Image muurikakka = LoadImage("Muuri");
42    SoundEffect LaskuriAani = LoadSoundEffect("wave");
43    Image punainenlaiska = LoadImage("HITLERNATSI");
44    IntMeter kenttaLaskuri;
45    IntMeter Pistelaskuri;
46    ScoreList topLista = new ScoreList(10, false, 0);
47   
48
49   
50
51
52
53    public override void Begin()
54    {
55        Valikko();
56        if (DataStorage.Exists("pisteet.xml"))
57            topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml");
58                                                       
59    }
60
61
62
63    void LuoNatsi(Vector paikka, double x, double y)
64    {
65        Natsi natsi = new Natsi(40, 40);
66        natsi.Shape = Shape.Circle;
67        natsi.Position = new Vector(x, y);
68        natsi.Tag = "natsi";
69
70        Image natsinKuva = LoadImage("NATSI");
71        natsi.Image = natsinKuva;
72        natsi.Width = 100;
73        natsi.Height = 75;
74
75        FollowerBrain natsinAivot = new FollowerBrain();
76        natsinAivot.Target = pelaaja;
77        natsinAivot.TargetFollowDistance = 1;
78        natsinAivot.Speed = 160;
79        natsinAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
80        natsinAivot.FollowAlways = true;
81        natsinAivot.Active = true;
82        natsi.Brain = natsinAivot;
83        Add(natsi);
84        natsi.Angle = pelaaja.Angle;
85        Timer ajastin = new Timer();
86        ajastin.Interval = 300000000.0;
87        ajastin.Trigger += KäännyPelaajaan;
88        ajastin.Start();
89        ajastin.Tag = natsi;
90    }
91
92    void LiikutaPelaajaa(Vector kakkakasa)
93    {
94        pelaaja.Push(kakkakasa);
95    }
96
97    void LuoKentta()
98    {
99        TileMap ruudut = TileMap.FromFile("Round.txt");
100        pelaaja = new PhysicsObject(200.0, 115.0);
101        ruudut.SetTileMethod('Z', LuoNatsi);
102        ruudut.SetTileMethod('P', LuoPelaaja);       
103        ruudut.SetTileMethod('M', LuoMuuri);
104        ruudut.Execute(500, 100);
105
106        Timer ajastin = new Timer();
107        ajastin.Interval = 3.0;
108        ajastin.Trigger += lisaaNatseja;
109        ajastin.Start();
110
111        crosshair = new GameObject(5.0, 5.0, Shape.Circle);
112        crosshair.Image = crosshairkuva;
113        Add(crosshair);
114
115        explosionSystem2 = new ExplosionSystem(LoadImage("jenkkiveri"), 100);
116        //MediaPlayer.Play("mus_17a_mystery");
117
118        Level.BackgroundColor = Color.DarkGray;
119       
120        Camera.Follow(pelaaja);
121        Add(explosionSystem);
122        explosionSystem.MinScale = 50;
123        explosionSystem.MaxScale = 50;
124        explosionSystem.MinLifetime = 0.1;
125        explosionSystem.MaxLifetime = 1;
126        Timer ajastin2 = new Timer();
127        ajastin2.Interval = 214;                                     
128        ajastin2.Trigger += pistelaskuri;
129        ajastin2.Start();
130        LuoLaskurit();       
131    }
132
133   
134
135    void LuoPelaaja(Vector paikka, double x, double y)
136    {
137       
138        pelaaja.Shape = Shape.Circle;
139        pelaaja.X = -200.0;
140        pelaaja.Y = 0.0;
141        pelaaja.Restitution = 0.7;
142        pelaaja.AngularDamping = 0.7;
143        pelaaja.LinearDamping = 0.9;
144        pelaaja.KineticFriction = 0.0;
145        Add(pelaaja);
146        pelaaja.Image = LoadImage("jenkki");
147        pelaajanAse1 = new AssaultRifle(20, 0);
148        pelaajanAse = pelaajanAse1;
149        pelaaja.Add(pelaajanAse);
150        pelaajanAse.AttackSound = aseAani;
151        AddCollisionHandler(pelaaja, KasittelePelaajanTormays);
152        pelaajanAse.Ammo.Value = 30;
153        pelaajanAse.Ammo.MinValue = 0;
154        pelaajanAse.Ammo.LowerLimit += LataaAse;
155        pelaajanAse.ProjectileCollision = AmmusOsui;
156    }
157    void LataaAse(int arvo)
158    {
159        Timer.SingleShot(1, LisaaAmmuksia);
160        pelaaja.Animation.Start();
161    }
162
163    void LisaaAmmuksia()
164    {
165        pelaajanAse.Ammo.Value += 30;
166        pelaaja.Animation.Stop();
167    }
168
169    Label LuoNaytto(double x, double y, IntMeter sidottavaLaskuri)
170    {
171        Label naytto = new Label();
172        naytto.BindTo(sidottavaLaskuri);
173        naytto.X = x;
174        naytto.Y = y;
175        naytto.TextColor = Color.White;
176        naytto.BorderColor = Level.BackgroundColor;
177        naytto.Color = Level.BackgroundColor;
178        Add(naytto);
179        return naytto;
180    }
181
182
183    void AsetaOhjaimet()
184    {
185        //Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa vasemmalle", new Vector(-1500, 0));
186        //Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1500, 0));
187        //Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1500));
188        //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1500));
189        //Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, pelaajanAse);
190        //Keyboard.Listen(Key.F, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse1);     
191   
192        ControllerOne.ListenAnalog (AnalogControl.LeftStick, 0.1, 
193        LiikutaPelaajaa, "sticks move against rotation." );
194        ControllerOne.ListenAnalog (AnalogControl.RightStick, 0.1, 
195        KäännäPelaajaa, "sticks move against rotation." );
196
197        ControllerOne.ListenAnalog (AnalogControl.RightTrigger, 0.1, 
198        AmmuAseella, "Use the right trigger, like the accelerator." );
199
200
201    }
202
203    void AmmuAseella(AnalogState liipasimenTila)
204    {
205        double liipasimenAsento = liipasimenTila.State;
206        PhysicsObject ammus = pelaajanAse.Shoot();
207
208        if (ammus != null)
209        {
210            ammus.Size = new Vector(ammus.Width * 5.0, ammus.Height * 0.2);
211            ammus.Color = Color.Yellow;
212        }
213    }
214
215
216    void KäännäPelaajaa(AnalogState tatinTila)
217    {
218        pelaaja.Angle = tatinTila.StateVector.Angle;
219    }
220   
221       void  LiikutaPelaajaa (AnalogState tatinTila)
222    {
223        Vector tatinSuunta = tatinTila.StateVector;
224        pelaaja.Push(tatinSuunta*1500);
225    }
226
227
228    void KuunteleLiiketta(AnalogState hiirenTila)
229    {
230        Vector suunta = (pelaaja.Position - Mouse.PositionOnWorld).Normalize();
231        Mouse.IsCursorVisible = true;
232        Vector hiirenLiike = hiirenTila.MouseMovement;
233        pelaaja.Angle = suunta.Angle + Angle.FromDegrees(180);
234
235        crosshair.= Mouse.PositionOnWorld.X;
236        crosshair.Y = Mouse.PositionOnWorld.Y;
237        Mouse.IsCursorVisible = false;
238    }
239
240    void AmmuAseella(PhysicsObject pelaaja, Weapon pelaajanAse)
241    {
242        PhysicsObject ammus = pelaajanAse.Shoot();
243       
244        if (ammus != null)
245        {
246            ammus.Size = new Vector(ammus.Width*2.0, ammus.Height* 0.2);
247            ammus.Color = Color.DarkOrange;
248         }
249
250    }
251
252    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
253    {
254        ammus.Destroy();
255
256        if (kohde is Natsi)
257        {
258            Natsi natsi = (Natsi)kohde;
259            natsi.Elamat--;
260            Explosion rajahdys = new Explosion(100);
261            rajahdys.Position = ammus.Position;
262            rajahdys.Force = 5;
263            rajahdys.ShockwaveColor = Color.Red;
264            rajahdys.Sound = osumisAani;
265            Add(rajahdys);
266
267            if (natsi.Elamat < 1)
268            {
269                explosionSystem.AddEffect(natsi.Position, 100); 
270                natsi.Destroy();
271                Pistelaskuri.Value += 50;
272            }
273        }       
274    }
275
276    void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e)
277    {
278       
279    }
280    void VaihdaAse(PhysicsObject pelaaja, Weapon ase)
281    {
282        pelaajanAse = (AssaultRifle)ase;
283    }
284
285    void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
286    {
287        if (kohde.Tag.ToString() == "natsi")
288        {
289            pelaaja.Destroy();
290            explosionSystem.AddEffect(pelaaja.Position, 100);
291
292            HighScoreWindow topIkkuna = new HighScoreWindow("Call of Duty World at War Nazi Zombies COPY",
293                             "HighScore!",
294                             "You Got Points %p! Enter Your Name:",
295                             topLista, Pistelaskuri.Value);
296            topIkkuna.Closed += TallennaPisteet;
297            Add(topIkkuna);
298
299        }
300    }
301
302    void Valikko()
303    {
304        ClearAll();
305        valikonKohdat = new List<Label>();
306
307        Label kohta1 = new Label("Start zombie survival");
308        kohta1.Position = new Vector(0, 40);
309        valikonKohdat.Add(kohta1);
310
311        Label kohta2 = new Label("Exit Game and be coward");
312        kohta2.Position = new Vector(0, -40);
313        valikonKohdat.Add(kohta2);
314
315        foreach (Label valikonKohta in valikonKohdat)
316        {
317            Add(valikonKohta);
318        }
319
320        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
321        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Poistu, null);
322
323        Mouse.IsCursorVisible = true;
324        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
325        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Poistu, "");
326    }
327    void ValikossaLiikkuminen(AnalogState hiirenTila)
328    {
329        foreach (Label kohta in valikonKohdat)
330        {
331            if (Mouse.IsCursorOn(kohta))
332            {
333                kohta.TextColor = Color.Red;
334            }
335            else
336            {
337                kohta.TextColor = Color.Black;
338            }
339
340        }
341    }
342    void AloitaPeli()
343    {
344        ClearAll();
345        explosionSystem = new ExplosionSystem(LoadImage("natsiveri"), 100);
346        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
347        LuoKentta();
348        AsetaOhjaimet();
349        ammoNaytto = LuoNaytto(Screen.Left + 60, Screen.Top - 60, pelaajanAse.Ammo);
350        // AloitaPeli();
351        Mouse.IsCursorVisible = true;
352        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
353        Image[] pelaajankuvat = LoadImages("jenkki", "jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus1", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5", "jenkki lataus1");
354        animaatio1 = new Animation(pelaajankuvat);
355        pelaaja.Animation = animaatio1;
356        pelaaja.Animation.FPS = 10;
357
358        for (int i = 0; i <5; i++)
359        {
360            //LuoNatsi(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
361        }
362
363    }
364
365    void Poistu()
366    {
367        Exit();
368    }
369    void KäännyPelaajaan( Timer sender )
370    {
371        Natsi natsi = (Natsi)sender.Tag;
372        Vector suunta = (pelaaja.Position - natsi.Position).Normalize();
373        natsi.Angle = suunta.Angle;
374    }
375
376
377    void LuoMuuri(Vector paikka, double leveys, double korkeus)
378    {
379        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
380        muuri.Position = paikka;
381        muuri.Shape = Shape.Rectangle;
382        muuri.Color = Color.Gray;
383        Add(muuri);
384        muuri.Image = muurikakka;
385    }
386
387    void lisaaNatseja(Timer sender)
388    {
389        LuoNatsi(new Vector(100, 50), 100, 50);
390
391
392    }   
393
394    void LuoLaskurit()
395    {
396        kenttaLaskuri = new IntMeter(1);
397
398        Label KenttäNäyttö = new Label();
399        KenttäNäyttö.X = Screen.Left + 100;
400        KenttäNäyttö.Y = Screen.Bottom + 100;
401        KenttäNäyttö.TextColor = Color.Red;
402        KenttäNäyttö.SizeMode = TextSizeMode.StretchText;
403        KenttäNäyttö.Size *= 5;
404        KenttäNäyttö.BindTo(kenttaLaskuri);
405        Add(KenttäNäyttö);
406
407        Pistelaskuri = new IntMeter(0);
408
409        PhysicsObject punainenLaiska = new PhysicsObject(150, 200);
410        punainenLaiska.Image = punainenlaiska;
411        punainenLaiska.Position = new Vector(Screen.Right - 100, Screen.Bottom + 100);
412        Add(punainenLaiska);
413
414        Label PisteNäyttö = new Label();
415        PisteNäyttö.BindTo(Pistelaskuri);
416        Add(PisteNäyttö);
417        PisteNäyttö.TextColor = Color.White;
418        PisteNäyttö.X = Screen.Right - 100;
419        PisteNäyttö.Y = Screen.Bottom + 100;
420
421    }
422    void pistelaskuri(Timer kakka)
423    {
424        LaskuriAani.Play();
425        kenttaLaskuri.Value++;
426    }
427
428
429    void TallennaPisteet(Window sender)
430    {
431        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
432    }
433
434}
435
436
Note: See TracBrowser for help on using the repository browser.