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

Revision 2104, 12.1 KB checked in by lesejuku, 10 years ago (diff)
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 = 155;
73        natsi.Height = 120;
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(30.0, 30.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    void LuoPelaaja(Vector paikka, double x, double y)
134    {
135       
136        pelaaja.Shape = Shape.Circle;
137        pelaaja.X = -200.0;
138        pelaaja.Y = 0.0;
139        pelaaja.Restitution = 0.7;
140        pelaaja.AngularDamping = 0.7;
141        pelaaja.LinearDamping = 0.9;
142        pelaaja.KineticFriction = 0.0;
143        Add(pelaaja);
144        pelaaja.Image = LoadImage("jenkki");
145        pelaajanAse1 = new AssaultRifle(20, 0);
146        pelaajanAse = pelaajanAse1;
147        pelaaja.Add(pelaajanAse);
148        pelaajanAse.AttackSound = aseAani;
149        AddCollisionHandler(pelaaja, KasittelePelaajanTormays);
150        pelaajanAse.Ammo.Value = 30;
151        pelaajanAse.Ammo.MinValue = 0;
152        pelaajanAse.Ammo.LowerLimit += LataaAse;
153        pelaajanAse.ProjectileCollision = AmmusOsui;
154    }
155    void LataaAse(int arvo)
156    {
157        Timer.SingleShot(1, LisaaAmmuksia);
158        pelaaja.Animation.Start();
159    }
160
161    void LisaaAmmuksia()
162    {
163        pelaajanAse.Ammo.Value += 30;
164        pelaaja.Animation.Stop();
165    }
166
167    Label LuoNaytto(double x, double y, IntMeter sidottavaLaskuri)
168    {
169        Label naytto = new Label();
170        naytto.BindTo(sidottavaLaskuri);
171        naytto.X = x;
172        naytto.Y = y;
173        naytto.TextColor = Color.White;
174        naytto.BorderColor = Level.BackgroundColor;
175        naytto.Color = Level.BackgroundColor;
176        Add(naytto);
177        return naytto;
178    }
179
180
181    void AsetaOhjaimet()
182    {
183        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa vasemmalle", new Vector(-1500, 0));
184        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1500, 0));
185        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1500));
186        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1500));
187        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, pelaajanAse);
188        Keyboard.Listen(Key.D1, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse1);       
189    }
190
191
192    void KuunteleLiiketta(AnalogState hiirenTila)
193    {
194        Vector suunta = (pelaaja.Position - Mouse.PositionOnWorld).Normalize();
195        Mouse.IsCursorVisible = true;
196        Vector hiirenLiike = hiirenTila.MouseMovement;
197        pelaaja.Angle = suunta.Angle + Angle.FromDegrees(180);
198
199        crosshair.= Mouse.PositionOnWorld.X;
200        crosshair.Y = Mouse.PositionOnWorld.Y;
201        Mouse.IsCursorVisible = false;
202    }
203
204    void AmmuAseella(PhysicsObject pelaaja, Weapon pelaajanAse)
205    {
206        PhysicsObject ammus = pelaajanAse.Shoot();
207       
208        if (ammus != null)
209        {
210            ammus.Size = new Vector(ammus.Width*1.2, ammus.Height* 0.2);
211            ammus.Color = Color.DarkOrange;
212         }
213
214    }
215
216    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
217    {
218        ammus.Destroy();
219
220        if (kohde is Natsi)
221        {
222            Natsi natsi = (Natsi)kohde;
223            natsi.Elamat--;
224            Explosion rajahdys = new Explosion(100);
225            rajahdys.Position = ammus.Position;
226            rajahdys.Force = 5;
227            rajahdys.ShockwaveColor = Color.Red;
228            rajahdys.Sound = osumisAani;
229            Add(rajahdys);
230
231            if (natsi.Elamat < 1)
232            {
233                explosionSystem.AddEffect(natsi.Position, 100); 
234                natsi.Destroy();
235                Pistelaskuri.Value += 50;
236            }
237        }       
238    }
239
240    void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e)
241    {
242       
243    }
244    void VaihdaAse(PhysicsObject pelaaja, Weapon ase)
245    {
246        pelaajanAse = (AssaultRifle)ase;
247    }
248
249    void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
250    {
251        if (kohde.Tag.ToString() == "natsi")
252        {
253            pelaaja.Destroy();
254            explosionSystem.AddEffect(pelaaja.Position, 100);
255
256            HighScoreWindow topIkkuna = new HighScoreWindow("Call of Duty World at War Nazi Zombies COPY",
257                             "HighScore!",
258                             "You Got Points %p! Enter Your Name:",
259                             topLista, Pistelaskuri.Value);
260            topIkkuna.Closed += TallennaPisteet;
261            Add(topIkkuna);
262
263        }
264    }
265
266    void Valikko()
267    {
268        ClearAll();
269        valikonKohdat = new List<Label>();
270
271        Label kohta1 = new Label("Start zombie game");
272        kohta1.Position = new Vector(0, 40);
273        valikonKohdat.Add(kohta1);
274
275        Label kohta2 = new Label("Exit Game");
276        kohta2.Position = new Vector(0, -40);
277        valikonKohdat.Add(kohta2);
278
279        foreach (Label valikonKohta in valikonKohdat)
280        {
281            Add(valikonKohta);
282        }
283
284        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
285        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Poistu, null);
286
287        Mouse.IsCursorVisible = true;
288        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
289        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Poistu, "");
290    }
291    void ValikossaLiikkuminen(AnalogState hiirenTila)
292    {
293        foreach (Label kohta in valikonKohdat)
294        {
295            if (Mouse.IsCursorOn(kohta))
296            {
297                kohta.TextColor = Color.Red;
298            }
299            else
300            {
301                kohta.TextColor = Color.Black;
302            }
303
304        }
305    }
306    void AloitaPeli()
307    {
308        ClearAll();
309        explosionSystem = new ExplosionSystem(LoadImage("natsiveri"), 100);
310        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
311        LuoKentta();
312        AsetaOhjaimet();
313        ammoNaytto = LuoNaytto(Screen.Left + 60, Screen.Top - 60, pelaajanAse.Ammo);
314        // AloitaPeli();
315        Mouse.IsCursorVisible = true;
316        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
317        Image[] pelaajankuvat = LoadImages("jenkki","jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus1", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5");
318        animaatio1 = new Animation(pelaajankuvat);
319        pelaaja.Animation = animaatio1;
320        pelaaja.Animation.FPS = 10;
321
322        for (int i = 0; i <5; i++)
323        {
324            //LuoNatsi(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
325        }
326
327    }
328
329    void Poistu()
330    {
331        Exit();
332    }
333    void KäännyPelaajaan( Timer sender )
334    {
335        Natsi natsi = (Natsi)sender.Tag;
336        Vector suunta = (pelaaja.Position - natsi.Position).Normalize();
337        natsi.Angle = suunta.Angle;
338    }
339
340
341    void LuoMuuri(Vector paikka, double leveys, double korkeus)
342    {
343        PhysicsObject muuri = PhysicsObject.CreateStaticObject(leveys, korkeus);
344        muuri.Position = paikka;
345        muuri.Shape = Shape.Rectangle;
346        muuri.Color = Color.Gray;
347        Add(muuri);
348        muuri.Image = muurikakka;
349    }
350
351    void lisaaNatseja(Timer sender)
352    {
353        LuoNatsi(new Vector(100, 50), 100, 50);
354
355
356    }   
357
358    void LuoLaskurit()
359    {
360        kenttaLaskuri = new IntMeter(1);
361
362        Label KenttäNäyttö = new Label();
363        KenttäNäyttö.X = Screen.Left + 100;
364        KenttäNäyttö.Y = Screen.Bottom + 100;
365        KenttäNäyttö.TextColor = Color.Red;
366        KenttäNäyttö.SizeMode = TextSizeMode.StretchText;
367        KenttäNäyttö.Size *= 5;
368        KenttäNäyttö.BindTo(kenttaLaskuri);
369        Add(KenttäNäyttö);
370
371        Pistelaskuri = new IntMeter(0);
372
373        PhysicsObject punainenLaiska = new PhysicsObject(150, 200);
374        punainenLaiska.Image = punainenlaiska;
375        punainenLaiska.Position = new Vector(Screen.Right - 100, Screen.Bottom + 100);
376        Add(punainenLaiska);
377
378        Label PisteNäyttö = new Label();
379        PisteNäyttö.BindTo(Pistelaskuri);
380        Add(PisteNäyttö);
381        PisteNäyttö.TextColor = Color.White;
382        PisteNäyttö.X = Screen.Right - 100;
383        PisteNäyttö.Y = Screen.Bottom + 100;
384
385    }
386    void pistelaskuri(Timer kakka)
387    {
388        LaskuriAani.Play();
389        kenttaLaskuri.Value++;
390    }
391
392
393    void TallennaPisteet(Window sender)
394    {
395        DataStorage.Save<ScoreList>(topLista, "pisteet.xml");
396    }
397
398}
399
400
Note: See TracBrowser for help on using the repository browser.