source: 2016/30/PyryS/Peli/Peli/Peli/Peli.cs @ 8249

Revision 8249, 10.7 KB checked in by pybesilt, 5 years ago (diff)

coasipdgsrdgt

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8using System.Collections.Generic;
9
10public class Peli : PhysicsGame
11{
12
13    Vector nopeusYlos = new Vector(0, 50000);
14    Vector nopeusAlas = new Vector(0, -50000);
15    Vector nopeusOikeaan = new Vector(50000, 0);
16    Vector nopeusVasempaan = new Vector(-50000, 0);
17
18    Pelaaja pelaaja;
19    AssaultRifle pelaajanAse;
20
21    PhysicsObject oikeareuna;
22    PhysicsObject vasenreuna;
23    PhysicsObject ylareuna;
24    PhysicsObject alareuna;
25
26
27    public override void Begin()
28    {
29
30
31        Leveli();
32        LuoPelaaja(0, -400);
33        Ohjaimet();
34        Vihollinen2(Level.Right, 0);
35
36        Timer vihuSpawnausAika = new Timer();
37        vihuSpawnausAika.Interval = 2.0;
38        vihuSpawnausAika.Timeout += delegate { LuoVihollinen(Level.Right, 20); };
39        vihuSpawnausAika.Start(7);
40
41
42
43
44
45        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
46    }
47
48    void LuoVihollinen(double x, double y)
49    {
50        Vihollinen vihu1 = new Vihollinen(x, y);
51        vihu1.X = x;
52        vihu1.Y = y;
53        vihu1.LifetimeLeft = TimeSpan.FromSeconds(10.0);
54        //vihu1.CollisionIgnoreGroup = 1;
55        AddCollisionHandler(vihu1, "joku", CollisionHandler.AddMeterValue(vihu1.VihuHealth, -1));
56        vihu1.CanRotate = false;
57        vihu1.CollisionIgnoreGroup = 3;
58        Add(vihu1);
59
60
61        //AddCollisionHandler(vihu1, "joku", VihuunOsuu);
62        AssaultRifle vihu1Laser = new AssaultRifle(30, 10);
63        vihu1Laser.InfiniteAmmo = true;
64        vihu1Laser.Angle = Angle.FromDegrees(-90);
65        vihu1Laser.ProjectileCollision = VihuOsuu;
66        vihu1.Add(vihu1Laser);
67
68        Timer ammusajastin = new Timer();
69        ammusajastin.Interval = 0.2;
70        ammusajastin.Timeout += delegate () { V1LaserAmpuu(vihu1Laser); };
71        ammusajastin.Start();
72
73
74        PathFollowerBrain vihu1Aivot = new PathFollowerBrain(200);
75
76
77
78        List<Vector> polku = new List<Vector>();
79        polku.Add(new Vector(Level.Right, 0));
80        polku.Add(new Vector(Level.Right - 50, 0));
81        polku.Add(new Vector(Level.Right - 100, 10));
82        polku.Add(new Vector(Level.Right - 200, 50));
83        polku.Add(new Vector(Level.Right - 250, 100));
84        polku.Add(new Vector(Level.Right - 300, 125));
85        polku.Add(new Vector(Level.Right - 350, 150));
86        polku.Add(new Vector(Level.Right - 400, 200));
87        polku.Add(new Vector(Level.Right - 450, 250));
88        polku.Add(new Vector(Level.Right - 650, 600));
89        //polku.Add(new Vector(-100, 50));
90        //polku.Add(new Vector(-250, -200));
91
92        vihu1Aivot.Path = polku;
93        vihu1Aivot.Loop = false;
94        vihu1Aivot.Speed = 200;
95
96        vihu1.Brain = vihu1Aivot;
97
98        vihu1.Destroyed += delegate () { ammusajastin.Stop(); };
99
100
101
102
103
104
105    }
106    void LuoPelaaja(double x, double y)
107    {
108        pelaaja = new Pelaaja(40.0, 40.0);
109        pelaaja.Shape = Shape.Triangle;
110        pelaaja.X = 0.0;
111        pelaaja.Y = -300;
112        pelaaja.CollisionIgnoreGroup = 1;
113        pelaaja.KineticFriction = 0;
114        pelaaja.StaticFriction = 0;
115        pelaaja.MaxVelocity = 1.0;
116        pelaaja.CanRotate = false;
117        AddCollisionHandler(pelaaja, "vihu1Luoti", VahennaElamaa);
118        AddCollisionHandler(pelaaja, "vihu2Luoti", VahennaElamaa);
119        pelaaja.Image = LoadImage("Alus");
120        Add(pelaaja);
121
122        PelaanjaAse();
123    }
124    void Leveli()
125    {
126        oikeareuna = Level.CreateRightBorder();
127        vasenreuna = Level.CreateLeftBorder();
128        oikeareuna.CollisionIgnoreGroup = 3;
129        vasenreuna.CollisionIgnoreGroup = 3;
130        oikeareuna.Restitution = 0.0;
131        vasenreuna.Restitution = 0.0;
132       
133
134        alareuna = Level.CreateBottomBorder();
135        alareuna.CollisionIgnoreGroup = 3;
136        alareuna.Restitution = 0.0;
137        ylareuna = Level.CreateTopBorder();
138        ylareuna.CollisionIgnoreGroup = 3;
139        ylareuna.Restitution = 0.0;
140       
141        Level.Background.Color = Color.Black;
142
143        //AddCollisionHandler(ylareuna, "joku",(ylareuna.YlaReunaCollisionHandler));
144
145
146
147
148    }
149
150
151    void Ohjaimet()
152    {
153        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, nopeusVasempaan);
154        Keyboard.Listen(Key.Left, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
155        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, nopeusOikeaan);
156        Keyboard.Listen(Key.Right, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
157        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, nopeusAlas);
158        Keyboard.Listen(Key.Down, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
159        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, pelaaja, nopeusYlos);
160        Keyboard.Listen(Key.Up, ButtonState.Released, LiikutaPelaajaa, null, pelaaja, Vector.Zero);
161        Keyboard.Listen(Key.Z, ButtonState.Down, PelaajaAmpuu, null, pelaajanAse);
162
163    }
164
165    void LiikutaPelaajaa(PhysicsObject pelaaja, Vector nopeus)
166    {
167        pelaaja.Push(nopeus);
168    }
169
170    void VihuOsuu(PhysicsObject laser, PhysicsObject kohde)
171    {
172        laser.Destroy();
173
174    }
175
176    void PelaanjaAse()
177    {
178        pelaajanAse = new AssaultRifle(10, 10);
179        pelaajanAse.InfiniteAmmo = true;
180        pelaajanAse.ProjectileCollision = PelaajaOsuu;
181       
182        pelaajanAse.Angle = Angle.FromDegrees(90);
183        pelaajanAse.Image = null;
184        pelaaja.Add(pelaajanAse);
185    }
186
187    void PelaajaOsuu(PhysicsObject luoti, PhysicsObject kohde)
188    {
189        if (kohde == pelaaja)
190            return;
191
192        luoti.Destroy();
193
194        if (kohde is Vihollinen || kohde is Vihollinen2)
195        {
196            luoti.Destroy();
197        }
198
199    }
200
201    void V1LaserAmpuu(AssaultRifle ase)
202    {
203        PhysicsObject laser = ase.Shoot();
204
205        if (laser != null)
206        {
207            Vector vihuAmpumisSuunta = (pelaaja.Position - ase.Position).Normalize();
208            laser.Velocity = vihuAmpumisSuunta * 300;
209            laser.Tag = "vihu1Luoti";
210            laser.Angle = vihuAmpumisSuunta.Angle;
211            laser.CollisionIgnoreGroup = 2;
212        }
213    }
214
215    void PelaajaAmpuu(AssaultRifle pelaajanAse)
216    {
217        PhysicsObject pelaajanammus = pelaajanAse.Shoot();
218
219        if (pelaajanammus != null)
220        {
221            pelaajanammus.Size *= 3;
222            pelaajanammus.Tag = "joku";
223            pelaajanammus.CollisionIgnoreGroup = 2;
224           // pelaajanammus.MaximumLifetime = TimeSpan.FromSeconds(0.7);
225           
226
227        }
228
229    }
230
231    void VahennaElamaa(PhysicsObject pelaaja, PhysicsObject luoti)
232    {
233        (pelaaja as Pelaaja).VahennaElamaa();
234    }
235
236    void Vihollinen2(double x, double y)
237    {
238        Vihollinen2 vihu2 = new Vihollinen2(50, 50);
239        vihu2.Color = Color.Red;
240        vihu2.X = x;
241        vihu2.Y = y;
242        vihu2.CanRotate = false;
243        vihu2.CollisionIgnoreGroup = 3;
244        AddCollisionHandler(vihu2, "joku", CollisionHandler.AddMeterValue(vihu2.Vihu2Health, -1));
245        Add(vihu2);
246
247        Timer clusterBallSpawn = new Timer();
248        clusterBallSpawn.Interval = 1.5;
249        clusterBallSpawn.Timeout += delegate { Vihollinen2Ase(vihu2); };
250        clusterBallSpawn.Start();
251
252
253
254        PathFollowerBrain vihu2Aivot = new PathFollowerBrain(200);
255
256        vihu2.Destroyed += delegate () { clusterBallSpawn.Stop(); };
257
258
259
260        List<Vector> polku = new List<Vector>();
261        polku.Add(new Vector(Level.Right, 0));
262        polku.Add(new Vector(Level.Left + 20, 0));
263        polku.Add(new Vector(0, 400));
264        polku.Add(new Vector(Level.Right + 10000, 0));
265
266        vihu2Aivot.Path = polku;
267        vihu2Aivot.Loop = false;
268        vihu2Aivot.Speed = 200;
269
270        vihu2.Brain = vihu2Aivot;
271
272    }
273
274     void Vihollinen2Ase(Vihollinen2 vihu2)
275    {
276        PhysicsObject clusterBall = new PhysicsObject(75, 75);
277        clusterBall.Shape = Shape.Circle;
278        clusterBall.CollisionIgnoreGroup = 2;
279        clusterBall.Position = vihu2.Position;
280        clusterBall.Image = LoadImage("ClusterBall");
281
282
283        Timer.SingleShot(1, delegate { ClusterBallExplode(clusterBall); });
284        Vector vihu2AmpumisSuunta = (pelaaja.Position - clusterBall.Position).Normalize();
285        clusterBall.Velocity = vihu2AmpumisSuunta * 300;
286        clusterBall.Tag = "vihu2Luoti";
287        clusterBall.Angle = vihu2AmpumisSuunta.Angle;
288        clusterBall.CollisionIgnoreGroup = 2;
289       
290
291
292       
293
294
295
296        Add(clusterBall);
297    }
298    void ClusterBallExplode(PhysicsObject rajahdys)
299    {
300
301
302        PhysicsObject clusterBallExplode = new PhysicsObject(25, 25);
303        rajahdys.Destroy();
304    }
305
306    /*void V2Ampuu(PhysicsObject clusterBall)
307    {
308        if (clusterBall != null)
309        {
310            Vector vihu2AmpumisSuunta = (pelaaja.Position - clusterBall.Position).Normalize();
311            clusterBall.Velocity = vihu2AmpumisSuunta * 300;
312            clusterBall.Tag = "vihu2Luoti";
313            clusterBall.Angle = vihu2AmpumisSuunta.Angle;
314            clusterBall.CollisionIgnoreGroup = 2;
315        }*/
316
317    }
318    class Vihollinen : PhysicsObject
319    {
320        private IntMeter vihuHealth = new IntMeter(2, 0, 2);
321        public IntMeter VihuHealth { get { return vihuHealth; } }
322
323
324        public Vihollinen(double leveys, double korkeus)
325            : base(40, 40)
326        {
327            VihuHealth.LowerLimit += delegate { this.Destroy(); };
328        }
329
330
331
332    }
333
334    class Pelaaja : PhysicsObject
335    {
336        private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
337        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
338        private bool voikoOttaaOsumaa = true;
339        public Pelaaja(double leveys, double korkeus)
340            : base(leveys, korkeus)
341        {
342            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
343        }
344        public void VahennaElamaa()
345        {
346            if (voikoOttaaOsumaa)
347            {
348                elamaLaskuri.Value -= 1;
349                voikoOttaaOsumaa = false;
350                Timer.SingleShot(1, delegate { voikoOttaaOsumaa = true; });
351            }
352        }
353    }
354
355    class Vihollinen2 : PhysicsObject
356    {
357        private IntMeter vihu2Health = new IntMeter(10, 0, 10);
358        public IntMeter Vihu2Health { get { return vihu2Health; } }
359
360
361        public Vihollinen2(double leveys, double korkeus)
362            : base(40, 40)
363        {
364            Vihu2Health.LowerLimit += delegate { this.Destroy(); };
365        }
366
367
368
369    }
370
371
372
Note: See TracBrowser for help on using the repository browser.