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

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