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

Revision 2025, 9.7 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    AssaultRifle pelaajanAse2;
34    Label ammoNaytto;
35    Animation animaatio1;
36    Animation animaatio2;
37    SoundEffect aseAani = LoadSoundEffect("ThompsonFire1");
38    ExplosionSystem explosionSystem2;
39    ExplosionSystem explosionSystem;
40    SoundEffect osumisAani = LoadSoundEffect("den_damage_32");
41    Image crosshairkuva = LoadImage("crosshair kuva");
42    Image jenkkiveri = LoadImage("jenkkiveri");
43
44    public override void Begin()
45    {
46        Valikko();
47       
48       
49
50
51                                                                                   
52    }
53
54   
55
56    void LuoNatsi(double x, double y)
57    {
58        Natsi natsi = new Natsi(40, 40);
59        natsi.Shape = Shape.Circle;
60        natsi.Position = new Vector(x, y);
61
62        Image natsinKuva = LoadImage("NATSI");
63        natsi.Image = natsinKuva;
64        natsi.Width = 155;
65        natsi.Height = 120;
66
67        FollowerBrain natsinAivot = new FollowerBrain();
68        natsinAivot.Target = pelaaja;
69        natsinAivot.TargetFollowDistance = 1;
70        natsinAivot.Speed = 160;
71        natsinAivot.TargetClose += mitaTapahtuuKunOllaanLahella;
72        natsinAivot.FollowAlways = true;
73        natsinAivot.Active = true;
74        natsi.Brain = natsinAivot;
75        Add(natsi);
76        natsi.Angle = pelaaja.Angle;
77        Timer ajastin = new Timer();
78        ajastin.Interval = 1.5;
79        ajastin.Trigger += KäännyPelaajaan;
80        ajastin.Start();
81        ajastin.Tag = natsi;
82    }
83
84    void LiikutaPelaajaa(Vector kakkakasa)
85    {
86        pelaaja.Push(kakkakasa);
87    }
88
89    void LuoKentta()
90    {
91       
92        crosshair = new GameObject(30.0, 30.0, Shape.Circle);
93        crosshair.Image = crosshairkuva;
94        Add(crosshair);
95        pelaaja = new PhysicsObject(200.0, 200.0);
96        pelaaja.Shape = Shape.Circle;
97        pelaaja.X = -200.0;
98        pelaaja.Y = 0.0;
99        pelaaja.Restitution = 0.7;
100        pelaaja.AngularDamping = 0.7;
101        pelaaja.LinearDamping = 0.9;
102        pelaaja.KineticFriction = 0.0;
103        Add(pelaaja);
104        explosionSystem2 = new ExplosionSystem(LoadImage("jenkkiveri"), 100);
105        pelaaja.Image = LoadImage("jenkki");
106        pelaajanAse1 = new AssaultRifle(20, 0);
107        pelaajanAse = pelaajanAse1;
108        pelaaja.Add(pelaajanAse);
109        pelaajanAse.AttackSound = aseAani;
110        AddCollisionHandler(pelaaja, KasittelePelaajanTormays);
111        pelaajanAse.Ammo.Value = 30;
112        pelaajanAse.Ammo.MinValue = 0;
113        pelaajanAse.Ammo.LowerLimit += LataaAse;
114        pelaajanAse.ProjectileCollision = AmmusOsui;
115
116        pelaajanAse2 = new AssaultRifle(20, 0);
117        pelaaja.Add(pelaajanAse2);
118        pelaajanAse2.Ammo.Value = 100;
119        pelaajanAse2.Ammo.MinValue = 0;
120        pelaajanAse2.Ammo.LowerLimit += LataaAse;
121        pelaajanAse2.ProjectileCollision = AmmusOsui;
122
123        MediaPlayer.Play("mus_17a_mystery");
124
125        Level.BackgroundColor = Color.DarkGreen;
126        //Level.CreateBorders();
127        Camera.Follow(pelaaja);
128        Add(explosionSystem);
129        explosionSystem.MinScale = 10;
130        explosionSystem.MaxScale = 50;
131        explosionSystem.MinLifetime = 0.1;
132        explosionSystem.MaxLifetime = 1;
133        Add(explosionSystem2);
134        explosionSystem2.MinScale = 10;
135        explosionSystem2.MaxScale = 50;
136        explosionSystem2.MinLifetime = 0.1;
137        explosionSystem2.MaxLifetime = 1;   
138       
139    }
140
141    void LataaAse(int arvo)
142    {
143        Timer.SingleShot(1, LisaaAmmuksia);
144        pelaaja.Animation.Start();
145
146    }
147
148    void LisaaAmmuksia()
149    {
150        pelaajanAse.Ammo.Value += 30;
151        pelaaja.Animation.Stop();
152
153    }
154
155    Label LuoNaytto(double x, double y, IntMeter sidottavaLaskuri)
156    {
157        Label naytto = new Label();
158        naytto.BindTo(sidottavaLaskuri);
159        naytto.X = x;
160        naytto.Y = y;
161        naytto.TextColor = Color.White;
162        naytto.BorderColor = Level.BackgroundColor;
163        naytto.Color = Level.BackgroundColor;
164        Add(naytto);
165        return naytto;
166    }
167
168
169    void AsetaOhjaimet()
170    {
171        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, "Liikuta pelaajaa vasemmalle", new Vector(-1000, 0));
172        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
173        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
174        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
175        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja, pelaajanAse);
176        Keyboard.Listen(Key.D1, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse1);
177        Keyboard.Listen(Key.D2, ButtonState.Down, VaihdaAse, "VaihdaAse", pelaaja, pelaajanAse2);
178       
179    }
180
181
182    void KuunteleLiiketta(AnalogState hiirenTila)
183    {
184        Vector suunta = (pelaaja.Position - Mouse.PositionOnWorld).Normalize();
185        Mouse.IsCursorVisible = true;
186        Vector hiirenLiike = hiirenTila.MouseMovement;
187        pelaaja.Angle = suunta.Angle + Angle.FromDegrees(180);
188
189        crosshair.= Mouse.PositionOnWorld.X;
190        crosshair.Y = Mouse.PositionOnWorld.Y;
191    }
192
193    void AmmuAseella(PhysicsObject pelaaja, Weapon pelaajanAse)
194    {
195        PhysicsObject ammus = pelaajanAse.Shoot();
196       
197        if (ammus != null)
198        {
199            ammus.Size = new Vector(ammus.Width*5, ammus.Height * 2);
200        }
201
202    }
203
204    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
205    {
206        ammus.Destroy();
207        Explosion rajahdys = new Explosion(100);
208        rajahdys.Position = ammus.Position;
209        rajahdys.Force = 90;
210        rajahdys.ShockwaveColor = Color.Red;
211        rajahdys.Sound = osumisAani;
212        Add(rajahdys);
213
214        if (kohde is Natsi)
215        {
216            Natsi natsi = (Natsi)kohde;
217            natsi.Elamat--;
218            if (natsi.Elamat < 1)
219            {
220                explosionSystem.AddEffect(natsi.Position, 100); 
221                natsi.Destroy();               
222            }
223        }       
224    }
225
226    void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e)
227    {
228       
229    }
230    void VaihdaAse(PhysicsObject pelaaja, Weapon ase)
231    {
232        pelaajanAse = (AssaultRifle)ase;
233    }
234
235    void KasittelePelaajanTormays(PhysicsObject pelaaja, PhysicsObject kohde)
236    {
237        pelaaja.Destroy();
238        explosionSystem.AddEffect(pelaaja.Position, 100);
239        pelaaja.Destroy(); 
240
241
242
243
244    }
245    void Valikko()
246    {
247        ClearAll();
248        valikonKohdat = new List<Label>();
249
250        Label kohta1 = new Label("Start zombie game");
251        kohta1.Position = new Vector(0, 40);
252        valikonKohdat.Add(kohta1);
253
254        Label kohta2 = new Label("Exit Game");
255        kohta2.Position = new Vector(0, -40);
256        valikonKohdat.Add(kohta2);
257
258        foreach (Label valikonKohta in valikonKohdat)
259        {
260            Add(valikonKohta);
261        }
262
263        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
264        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Poistu, null);
265
266        Mouse.IsCursorVisible = true;
267        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
268        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Poistu, "");
269    }
270    void ValikossaLiikkuminen(AnalogState hiirenTila)
271    {
272        foreach (Label kohta in valikonKohdat)
273        {
274            if (Mouse.IsCursorOn(kohta))
275            {
276                kohta.TextColor = Color.Gray;
277            }
278            else
279            {
280                kohta.TextColor = Color.Black;
281            }
282
283        }
284    }
285    void AloitaPeli()
286    {
287        ClearAll();
288        explosionSystem = new ExplosionSystem(LoadImage("natsiveri"), 100);
289        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
290        LuoKentta();
291        AsetaOhjaimet();
292        ammoNaytto = LuoNaytto(Screen.Left + 60, Screen.Top - 60, pelaajanAse.Ammo);
293        // AloitaPeli();
294        Mouse.IsCursorVisible = true;
295        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
296        Image[] pelaajankuvat = LoadImages("jenkki lataus1", "jenkki lataus2", "jenkki lataus3", "jenkki lataus4", "jenkki lataus3", "jenkki lataus2", "jenkki lataus1", "jenkki lataus5", "jenkki lataus6", "jenkki lataus5");
297        Image[] pelaajankuvat2 = LoadImages("jenkki2");
298        animaatio1 = new Animation(pelaajankuvat);
299        animaatio2 = new Animation(pelaajankuvat2);
300        pelaaja.Animation = animaatio1;
301        pelaaja.Animation.FPS = 10;
302
303        for (int i = 0; i <5; i++)
304        {
305            LuoNatsi(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top));
306        }
307
308    }
309
310    void Poistu()
311    {
312        Exit();
313    }
314    void KäännyPelaajaan( Timer sender )
315    {
316        Natsi natsi = (Natsi)sender.Tag;
317        Vector suunta = (pelaaja.Position - natsi.Position).Normalize();
318        natsi.Angle = suunta.Angle;
319    }
320   
321
322
323
324   
325
326
327}
Note: See TracBrowser for help on using the repository browser.