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

Revision 8216, 8.5 KB checked in by pybesilt, 5 years ago (diff)

Tein vihollisille liikeradan ja paransin luotien osumis fysiikoita. aloin tekemään myös toista vihollista

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