source: 2015/30/MarkusS/git_gud_the_game/git_gud_the_game/git_gud_the_game/git_gud_the_game.cs @ 6985

Revision 6985, 11.5 KB checked in by masorval, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Pelaaja : PhysicsObject
11{
12    public AssaultRifle ase;
13    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
14    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
15
16
17
18    public Pelaaja(Image pelaajanKuva)
19        : base(pelaajanKuva)
20    {
21        this.KineticFriction = 1.0;
22        this.LinearDamping = 0.9;
23
24
25        this.ase = new AssaultRifle(20, 20);
26        //((git_gud_the_game)Game.Instance).Add(this.ase);
27
28        //this.ase.Image = null;
29        //this.ase.Color = Color.Transparent;
30        //Timer aseenPaikka = new Timer();
31        //aseenPaikka.Interval = 0.01;
32        //aseenPaikka.Timeout += delegate
33        //{
34        //    this.ase.Position = this.Position;
35        //};
36
37        //aseenPaikka.Start();
38        this.Add(this.ase);
39        ase.FireRate = 1;
40        ase.CanHitOwner = false;
41        elamaLaskuri.LowerLimit += delegate 
42        { 
43            this.Destroy();
44            this.ase.Destroy();
45        };
46
47    }
48}
49
50public class Vihollinen : PhysicsObject
51{
52    public AssaultRifle ase;
53    public IntMeter ElamaLaskuri;
54
55
56    public Vihollinen(Image vihollisenKuva, int elamat)
57        : base(vihollisenKuva)
58    {
59        this.KineticFriction = 1.0;
60        this.LinearDamping = 0.9;
61        this.ElamaLaskuri = new IntMeter(elamat, 0, elamat);
62
63        this.ase = new AssaultRifle(20, 20);
64        //((git_gud_the_game)Game.Instance).Add(this.ase);
65
66        //this.ase.Image = null;
67        //this.ase.Color = Color.Transparent;
68        //Timer aseenPaikka = new Timer();
69        //aseenPaikka.Interval = 0.01;
70        //aseenPaikka.Timeout += delegate
71        //{
72        //    this.ase.Position = this.Position;
73        //};
74
75        //aseenPaikka.Start();
76        this.Add(this.ase);
77
78        ase.FireRate = 1;
79        ase.CanHitOwner = false;
80        ElamaLaskuri.LowerLimit += delegate
81        {
82            this.ase.Destroy();
83            this.Destroy();
84        };
85
86    }
87}
88
89public class git_gud_the_game : PhysicsGame
90{
91    Pelaaja pelaaja2;
92    Pelaaja pelaaja1;
93    Image pelaajanKuva = LoadImage("pelaajankuva");
94    Image kavelyVasemmalle = LoadImage("PelaajanKuvaSivuVasen");
95    Image kavelyOikealle = LoadImage("PelaajanKuvaSivu");
96    Image kavelyYlos = LoadImage("PelaajanKuvaSelka");
97    Image SeinanKuva = LoadImage("Seina");
98    Image vihollisenKuva = LoadImage("vihollisenKuva");
99    Image taustaKuva = LoadImage("Tausta");
100    Image haulikonKuva = LoadImage("haulikko");
101    IntMeter pisteLaskuri;
102    Image FinalBoss = LoadImage("FinalBoss");
103    const double nopeus = 400;
104
105    const int ruudunkoko =60;
106
107    public override void Begin()
108    {
109        // TODO: Kirjoita ohjelmakoodisi tähän
110        LuoKentta();
111
112        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
113        PelinControllit();
114
115
116    }
117    void LuoKentta()
118    {
119        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
120        ruudut.SetTileMethod(Color.FromHexCode("00FF90"), LuoPelaaja1);
121        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoPelaaja2);
122        ruudut.SetTileMethod(Color.Black, LuoSeinä);
123        ruudut.SetTileMethod(Color.Red, LuoVihollinen);
124        ruudut.SetTileMethod(Color.FromHexCode("808080"), LuoEsine);
125        ruudut.SetTileMethod(Color.Harlequin, LuoHCVihollinen);
126        ruudut.SetTileMethod(Color.FromHexCode("B6FF00"), SpawnaaHaulikko);
127        ruudut.Execute(ruudunkoko, ruudunkoko);
128
129        LuoPistelaskuri();
130        //Level.Background.Image = taustaKuva;
131        //Level.Background.ScaleToLevelFull();
132
133        Level.Background.Color = Color.Black;
134        Level.Background.CreateStars();
135        //Camera.ZoomToLevel();
136
137        Camera.Follow(pelaaja1);
138        Camera.StayInLevel = true;
139
140    }
141    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
142    {
143        pelaaja1 = new Pelaaja(pelaajanKuva);
144        pelaaja1.Size = new Vector(leveys, korkeus);
145        pelaaja1.Position = paikka;
146        Add(pelaaja1);
147        pelaaja1.ase.Ammo.Value = 1000;
148        pelaaja1.ase.ProjectileCollision = AmmusOsui;
149        pelaaja1.CanRotate = false;
150
151        pelaaja1.AngularDamping = 0.5;
152
153        AddCollisionHandler(pelaaja1, "ammus", AmmusOsuuPelaajaan);
154        pelaaja1.Tag = "pelaaja";
155
156        AddCollisionHandler(pelaaja1, "Esine", Esinekerätty);
157    }
158
159    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
160    {
161
162        pelaaja2 = new Pelaaja(pelaajanKuva);
163        pelaaja2.Size = new Vector(leveys, korkeus);
164        pelaaja2.Position = paikka;
165        Add(pelaaja2);
166        pelaaja2.ase.Ammo.Value = 1000;
167        pelaaja2.ase.ProjectileCollision = AmmusOsui;
168
169        pelaaja2.AngularDamping = 0.5;
170
171        AddCollisionHandler(pelaaja2, "ammus", AmmusOsuuPelaajaan);
172        pelaaja2.Tag = "pelaaja";
173
174        AddCollisionHandler(pelaaja2, "Esine", Esinekerätty);
175    }
176
177    void LuoSeinä(Vector paikka, double leveys, double korkeus)
178    {
179        PhysicsObject Seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
180        Seina.Image = SeinanKuva;
181        Seina.Position = paikka;
182        Add(Seina);
183
184    }
185    void LuoHCVihollinen(Vector paikka, double leveys, double korkeus)
186    {
187        LuoVihu(paikka, leveys, korkeus, 7, vihollisenKuva);
188    }
189    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
190    {
191        LuoVihu(paikka, leveys, korkeus, 3, vihollisenKuva);
192    }
193    void LuoVihu(Vector paikka, double leveys, double korkeus, int elamat, Image vihollisenKuva)
194    {
195        Vihollinen vihollinen = new Vihollinen(vihollisenKuva, elamat);
196        vihollinen.Size = new Vector(leveys, korkeus);
197        vihollinen.Position = paikka;
198        Add(vihollinen);
199        vihollinen.ase.Ammo.Value = 1000;
200        vihollinen.ase.ProjectileCollision = AmmusOsui;
201        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
202        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
203        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
204        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
205        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
206        seuraajanAivot.Active = true;
207        vihollinen.Brain = seuraajanAivot;
208
209        Timer ajastin = new Timer();
210        ajastin.Interval = 1.5;
211        ajastin.Timeout += delegate
212        {
213            int satunnainenLuku = RandomGen.NextInt(2);
214            Pelaaja valittuPelaaja = pelaaja1;
215            if (satunnainenLuku == 0) valittuPelaaja = pelaaja1;
216            if (satunnainenLuku == 1) valittuPelaaja = pelaaja2;
217            Vector suunta = (valittuPelaaja.Position - vihollinen.ase.AbsolutePosition).Normalize();
218            vihollinen.ase.Angle = suunta.Angle;
219            PhysicsObject ammus = vihollinen.ase.Shoot();
220            if (ammus != null)
221            {
222                ammus.Tag = "ammus";
223            }
224        };
225        ajastin.Start();
226
227        vihollinen.AngularDamping = 0.3;
228
229        AddCollisionHandler(vihollinen, "ammus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 1); });
230        AddCollisionHandler(vihollinen, "haulikonAmmus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 2); });
231    }
232    void PelinControllit()
233    {
234        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "", pelaaja1);
235        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja1);
236        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtays, "", pelaaja1);
237
238        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "", pelaaja2);
239        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja2);
240        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtays, "", pelaaja2);
241    }
242    void LiikutaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
243    {
244        if (tatinTila.StateVector.Angle.MainDirection == Direction.Right)
245        {
246            pelaaja.Image = kavelyOikealle;
247            pelaaja.Move(new Vector(nopeus, 0));
248        }
249        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Left)
250        {
251            pelaaja.Image = kavelyVasemmalle;
252            pelaaja.Move(new Vector(-nopeus, 0));
253        }
254        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Down)
255        {
256            pelaaja.Image = pelaajanKuva;
257            pelaaja.Move(new Vector(0, -nopeus));
258        }
259        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Up)
260        {
261            pelaaja.Image = kavelyYlos;
262            pelaaja.Move(new Vector(0,nopeus));
263
264        }
265        //pelaaja.Move(Vector.FromLengthAndAngle(tatinTila.StateVector.Magnitude * 200, tatinTila.StateVector.Angle));
266    }
267    void Tahtays(AnalogState tatinTila, Pelaaja pelaaja)
268    {
269        pelaaja.ase.Angle = tatinTila.StateVector.Angle;
270    }
271    void AmmuAseella(Pelaaja pelaaja)
272    {
273        PhysicsObject ammus = pelaaja.ase.Shoot();
274        if (ammus != null)
275        {
276            if (pelaaja.ase.Image == haulikonKuva)
277            {
278                ammus.Tag = "haulikonAmmus";
279            }
280            else
281            {
282                ammus.Tag = "ammus";
283            }
284        }
285
286
287    }
288    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
289    {
290        ammus.Destroy();
291    }
292    void AmmusOsuuPelaajaan(PhysicsObject pelaaja, PhysicsObject ammus)
293    {
294        ((Pelaaja)pelaaja).ElamaLaskuri.Value--;
295    }
296    void AmmusOsuuViholliseen(PhysicsObject vihu, PhysicsObject kohde, int vahinko)
297    {
298        ((Vihollinen)vihu).ElamaLaskuri.Value -= vahinko;
299    }
300    void SpawnaaHaulikko(Vector paikka, double leveys, double korkeus)
301    {
302        PhysicsObject haulikko = new PhysicsObject(haulikonKuva);
303        haulikko.Size = new Vector(40, 40);
304        haulikko.Position = paikka;
305        Add(haulikko);
306        haulikko.Tag = "haulikko";
307        AddCollisionHandler(haulikko, "pelaaja", PoimiHaulikko);
308
309    }
310    void PoimiHaulikko(PhysicsObject haulikko, PhysicsObject pelaaja)
311    {
312        Pelaaja tyyppi = pelaaja as Pelaaja;
313        tyyppi.ase.Destroy();
314
315        tyyppi.ase = new AssaultRifle(20, 20);
316        tyyppi.ase.FireRate = 1;
317        tyyppi.ase.CanHitOwner = false;
318        tyyppi.ase.Image = haulikonKuva;
319        tyyppi.Add(tyyppi.ase);
320
321        haulikko.Destroy();
322
323    }
324    void LuoPistelaskuri()
325    {
326        pisteLaskuri = new IntMeter(0);
327        pisteLaskuri.MaxValue = 10;
328        pisteLaskuri.UpperLimit += delegate { KaikkiKeratty(new Vector(0, 0), ruudunkoko *1.5, ruudunkoko *1.5); };
329
330    }
331    void KaikkiKeratty(Vector paikka, double leveys, double korkeus)
332    {
333         
334        LuoVihu(paikka, leveys, korkeus, 20, FinalBoss);
335    }
336    void LuoEsine(Vector paikka, double leveys, double korkeus)
337    {
338        PhysicsObject juttu = new PhysicsObject(20, 20);
339        Add(juttu);
340        juttu.Position = paikka;
341        juttu.Tag = "Esine";
342    }
343    void Esinekerätty(PhysicsObject Pelaaja, PhysicsObject Esine)
344    {
345        Esine.Destroy();
346        pisteLaskuri.Value += 1;
347    }
348}
Note: See TracBrowser for help on using the repository browser.