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

Revision 6969, 11.1 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 SeinanKuva = LoadImage("Seina");
95    Image vihollisenKuva = LoadImage("vihollisenKuva");
96    Image taustaKuva = LoadImage("Tausta");
97    Image haulikonKuva = LoadImage("haulikko");
98    IntMeter pisteLaskuri;
99    const double nopeus = 400;
100
101    const int ruudunkoko =60;
102
103    public override void Begin()
104    {
105        // TODO: Kirjoita ohjelmakoodisi tähän
106        LuoKentta();
107
108        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
109        PelinControllit();
110
111
112    }
113    void LuoKentta()
114    {
115        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
116        ruudut.SetTileMethod(Color.FromHexCode("00FF90"), LuoPelaaja1);
117        ruudut.SetTileMethod(Color.FromHexCode("FFD800"), LuoPelaaja2);
118        ruudut.SetTileMethod(Color.Black, LuoSeinä);
119        ruudut.SetTileMethod(Color.Red, LuoVihollinen);
120        ruudut.SetTileMethod(Color.FromHexCode("808080"), LuoEsine);
121        //ruudut.SetTileMethod(Color.Harlequin, LuoHCVihollinen);
122        ruudut.SetTileMethod(Color.FromHexCode("B6FF00"), SpawnaaHaulikko);
123        ruudut.Execute(ruudunkoko, ruudunkoko);
124
125        LuoPistelaskuri();
126        //Level.Background.Image = taustaKuva;
127        //Level.Background.ScaleToLevelFull();
128
129        Level.Background.Color = Color.Black;
130        Level.Background.CreateStars();
131        //Camera.ZoomToLevel();
132
133        Camera.Follow(pelaaja1);
134        Camera.StayInLevel = true;
135
136    }
137    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
138    {
139        pelaaja1 = new Pelaaja(pelaajanKuva);
140        pelaaja1.Size = new Vector(leveys, korkeus);
141        pelaaja1.Position = paikka;
142        Add(pelaaja1);
143        pelaaja1.ase.Ammo.Value = 1000;
144        pelaaja1.ase.ProjectileCollision = AmmusOsui;
145        pelaaja1.CanRotate = false;
146
147        pelaaja1.AngularDamping = 0.5;
148
149        AddCollisionHandler(pelaaja1, "ammus", AmmusOsuuPelaajaan);
150        pelaaja1.Tag = "pelaaja";
151
152        AddCollisionHandler(pelaaja1, "Esine", Esinekerätty);
153    }
154
155    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
156    {
157
158        pelaaja2 = new Pelaaja(pelaajanKuva);
159        pelaaja2.Size = new Vector(leveys, korkeus);
160        pelaaja2.Position = paikka;
161        Add(pelaaja2);
162        pelaaja2.ase.Ammo.Value = 1000;
163        pelaaja2.ase.ProjectileCollision = AmmusOsui;
164
165        pelaaja2.AngularDamping = 0.5;
166
167        AddCollisionHandler(pelaaja2, "ammus", AmmusOsuuPelaajaan);
168        pelaaja2.Tag = "pelaaja";
169
170        AddCollisionHandler(pelaaja2, "Esine", Esinekerätty);
171    }
172
173    void LuoSeinä(Vector paikka, double leveys, double korkeus)
174    {
175        PhysicsObject Seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
176        Seina.Image = SeinanKuva;
177        Seina.Position = paikka;
178        Add(Seina);
179
180    }
181    void LuoHCVihollinen(Vector paikka, double leveys, double korkeus)
182    {
183        LuoVihu(paikka, leveys, korkeus, 7, vihollisenKuva);
184    }
185    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
186    {
187        LuoVihu(paikka, leveys, korkeus, 3, vihollisenKuva);
188    }
189    void LuoVihu(Vector paikka, double leveys, double korkeus, int elamat, Image vihollisenKuva)
190    {
191        Vihollinen vihollinen = new Vihollinen(vihollisenKuva, elamat);
192        vihollinen.Size = new Vector(leveys, korkeus);
193        vihollinen.Position = paikka;
194        Add(vihollinen);
195        vihollinen.ase.Ammo.Value = 1000;
196        vihollinen.ase.ProjectileCollision = AmmusOsui;
197        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
198        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
199        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
200        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
201        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
202        seuraajanAivot.Active = true;
203        vihollinen.Brain = seuraajanAivot;
204
205        Timer ajastin = new Timer();
206        ajastin.Interval = 1.5;
207        ajastin.Timeout += delegate
208        {
209            int satunnainenLuku = RandomGen.NextInt(2);
210            Pelaaja valittuPelaaja = pelaaja1;
211            if (satunnainenLuku == 0) valittuPelaaja = pelaaja1;
212            if (satunnainenLuku == 1) valittuPelaaja = pelaaja2;
213            Vector suunta = (valittuPelaaja.Position - vihollinen.ase.AbsolutePosition).Normalize();
214            vihollinen.ase.Angle = suunta.Angle;
215            PhysicsObject ammus = vihollinen.ase.Shoot();
216            if (ammus != null)
217            {
218                ammus.Tag = "ammus";
219            }
220        };
221        ajastin.Start();
222
223        vihollinen.AngularDamping = 0.3;
224
225        AddCollisionHandler(vihollinen, "ammus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 1); });
226        AddCollisionHandler(vihollinen, "haulikonAmmus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 2); });
227    }
228    void PelinControllit()
229    {
230        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "", pelaaja1);
231        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja1);
232        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtays, "", pelaaja1);
233
234        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "", pelaaja2);
235        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja2);
236        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtays, "", pelaaja2);
237    }
238    void LiikutaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
239    {
240        if (tatinTila.StateVector.Angle.MainDirection == Direction.Right)
241        {
242            pelaaja.Move(new Vector(nopeus, 0));
243        }
244        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Left)
245        {
246            pelaaja.Move(new Vector(-nopeus, 0));
247        }
248        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Down)
249        {
250            pelaaja.Move(new Vector(0, -nopeus));
251        }
252        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Up)
253        {
254            pelaaja.Move(new Vector(0,nopeus));
255
256        }
257        //pelaaja.Move(Vector.FromLengthAndAngle(tatinTila.StateVector.Magnitude * 200, tatinTila.StateVector.Angle));
258    }
259    void Tahtays(AnalogState tatinTila, Pelaaja pelaaja)
260    {
261        pelaaja.ase.Angle = tatinTila.StateVector.Angle;
262    }
263    void AmmuAseella(Pelaaja pelaaja)
264    {
265        PhysicsObject ammus = pelaaja.ase.Shoot();
266        if (ammus != null)
267        {
268            if (pelaaja.ase.Image == haulikonKuva)
269            {
270                ammus.Tag = "haulikonAmmus";
271            }
272            else
273            {
274                ammus.Tag = "ammus";
275            }
276        }
277
278
279    }
280    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
281    {
282        ammus.Destroy();
283    }
284    void AmmusOsuuPelaajaan(PhysicsObject pelaaja, PhysicsObject ammus)
285    {
286        ((Pelaaja)pelaaja).ElamaLaskuri.Value--;
287    }
288    void AmmusOsuuViholliseen(PhysicsObject vihu, PhysicsObject kohde, int vahinko)
289    {
290        ((Vihollinen)vihu).ElamaLaskuri.Value -= vahinko;
291    }
292    void SpawnaaHaulikko(Vector paikka, double leveys, double korkeus)
293    {
294        PhysicsObject haulikko = new PhysicsObject(haulikonKuva);
295        haulikko.Size = new Vector(40, 40);
296        haulikko.Position = paikka;
297        Add(haulikko);
298        haulikko.Tag = "haulikko";
299        AddCollisionHandler(haulikko, "pelaaja", PoimiHaulikko);
300
301    }
302    void PoimiHaulikko(PhysicsObject haulikko, PhysicsObject pelaaja)
303    {
304        Pelaaja tyyppi = pelaaja as Pelaaja;
305        tyyppi.ase.Destroy();
306
307        tyyppi.ase = new AssaultRifle(20, 20);
308        tyyppi.ase.FireRate = 1;
309        tyyppi.ase.CanHitOwner = false;
310        tyyppi.ase.Image = haulikonKuva;
311        tyyppi.Add(tyyppi.ase);
312
313        haulikko.Destroy();
314
315    }
316    void LuoPistelaskuri()
317    {
318        pisteLaskuri = new IntMeter(0);
319        pisteLaskuri.MaxValue = 10;
320        pisteLaskuri.UpperLimit += delegate { KaikkiKeratty(new Vector(0, 0), ruudunkoko *1.5, ruudunkoko *1.5); };
321
322    }
323    void KaikkiKeratty(Vector paikka, double leveys, double korkeus)
324    {
325        LuoVihu(paikka, leveys, korkeus, 20, vihollisenKuva);
326    }
327    void LuoEsine(Vector paikka, double leveys, double korkeus)
328    {
329        PhysicsObject juttu = new PhysicsObject(20, 20);
330        Add(juttu);
331        juttu.Position = paikka;
332        juttu.Tag = "Esine";
333    }
334    void Esinekerätty(PhysicsObject Pelaaja, PhysicsObject Esine)
335    {
336        Esine.Destroy();
337        pisteLaskuri.Value += 1;
338    }
339}
Note: See TracBrowser for help on using the repository browser.