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

Revision 6928, 9.7 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) : base(pelaajanKuva)
19    {
20        this.KineticFriction = 1.0;
21        this.LinearDamping = 0.9;
22       
23       
24        this.ase = new AssaultRifle(100, 100);
25        //((git_gud_the_game)Game.Instance).Add(this.ase);
26
27        //this.ase.Image = null;
28        //this.ase.Color = Color.Transparent;
29        //Timer aseenPaikka = new Timer();
30        //aseenPaikka.Interval = 0.01;
31        //aseenPaikka.Timeout += delegate
32        //{
33        //    this.ase.Position = this.Position;
34        //};
35       
36        //aseenPaikka.Start();
37        this.Add(this.ase);
38        ase.FireRate = 1;
39        ase.CanHitOwner = false;
40        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
41
42    }
43}
44
45public class Vihollinen : PhysicsObject
46{
47    public AssaultRifle ase;
48    public IntMeter ElamaLaskuri;
49   
50
51    public Vihollinen(Image vihollisenKuva, int elamat)
52        : base(vihollisenKuva)
53    {
54        this.KineticFriction = 1.0;
55        this.LinearDamping = 0.9;
56        this.ElamaLaskuri = new IntMeter(elamat, 0, elamat);
57
58        this.ase = new AssaultRifle(100, 100);
59        //((git_gud_the_game)Game.Instance).Add(this.ase);
60
61        //this.ase.Image = null;
62        //this.ase.Color = Color.Transparent;
63        //Timer aseenPaikka = new Timer();
64        //aseenPaikka.Interval = 0.01;
65        //aseenPaikka.Timeout += delegate
66        //{
67        //    this.ase.Position = this.Position;
68        //};
69
70        //aseenPaikka.Start();
71        this.Add(this.ase);
72
73        ase.FireRate = 1;
74        ase.CanHitOwner = false;
75        ElamaLaskuri.LowerLimit += delegate { 
76            this.ase.Destroy(); 
77            this.Destroy(); 
78        };
79
80    }
81}
82
83public class git_gud_the_game : PhysicsGame
84{
85    Pelaaja pelaaja2;
86    Pelaaja pelaaja1;
87    Image pelaajanKuva = LoadImage("pelaajankuva");
88    Image SeinanKuva = LoadImage("Seina");
89    Image vihollisenKuva = LoadImage("vihollisenKuva");
90    Image taustaKuva = LoadImage("Tausta");
91    Image haulikonKuva = LoadImage("haulikko");
92    public override void Begin()
93    {
94        // TODO: Kirjoita ohjelmakoodisi tähän
95        LuoKentta();
96       
97        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
98        PelinControllit();
99
100
101    }
102    void LuoKentta()
103    {
104        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kentta1");
105        ruudut.SetTileMethod(Color.Cyan, LuoPelaaja1);
106        ruudut.SetTileMethod(Color.Gold, LuoPelaaja2);
107        ruudut.SetTileMethod(Color.Black, LuoSeinä);
108        ruudut.SetTileMethod(Color.Red, LuoVihollinen);
109        //ruudut.SetTileMethod(Color.Harlequin, LuoHCVihollinen);
110        ruudut.SetTileMethod(Color.FromHexCode("B6FF00"), SpawnaaHaulikko);
111        ruudut.Execute(20, 20);
112        //Level.Background.Image = taustaKuva;
113        //Level.Background.ScaleToLevelFull();
114        Level.Background.Color = Color.Black;
115        Level.Background.CreateStars();
116        //Camera.ZoomToLevel();
117        Camera.Follow(pelaaja1);
118        Camera.StayInLevel = true;
119       
120    }
121    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
122    {
123        pelaaja1 = new Pelaaja(pelaajanKuva);
124        pelaaja1.Position = paikka;
125        Add(pelaaja1);
126        pelaaja1.ase.Ammo.Value = 1000;
127        pelaaja1.ase.ProjectileCollision = AmmusOsui;
128        pelaaja1.CanRotate = false;
129
130        pelaaja1.AngularDamping = 0.5;
131
132        AddCollisionHandler(pelaaja1, "ammus", AmmusOsuuPelaajaan);
133        pelaaja1.Tag = "pelaaja";
134    }
135
136    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
137    {
138        pelaaja2 = new Pelaaja(pelaajanKuva);
139        pelaaja2.Position = paikka;
140        Add(pelaaja2);
141        pelaaja2.ase.Ammo.Value = 1000;
142        pelaaja2.ase.ProjectileCollision = AmmusOsui;
143
144        pelaaja2.AngularDamping = 0.5;
145
146        AddCollisionHandler(pelaaja2, "ammus", AmmusOsuuPelaajaan);
147        pelaaja2.Tag = "pelaaja";
148    }
149
150    void LuoSeinä(Vector paikka, double leveys, double korkeus)
151    {
152        PhysicsObject Seina = PhysicsObject.CreateStaticObject(leveys, korkeus);
153        Seina.Image = SeinanKuva;
154        Seina.Position = paikka;
155        Add(Seina);
156
157    }
158    void LuoHCVihollinen(Vector paikka, double leveys, double korkeus)
159    {
160        LuoVihu(paikka, leveys, korkeus, 7, vihollisenKuva);
161    }
162    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
163    {
164        LuoVihu(paikka, leveys, korkeus, 3, vihollisenKuva);
165    }
166    void LuoVihu(Vector paikka, double leveys, double korkeus, int elamat, Image vihollisenKuva)
167    {
168        Vihollinen vihollinen = new Vihollinen(vihollisenKuva, elamat);
169        vihollinen.Position = paikka;
170        Add(vihollinen);
171        vihollinen.ase.Ammo.Value = 1000;
172        vihollinen.ase.ProjectileCollision = AmmusOsui;
173        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
174        seuraajanAivot.Speed = 300;                 // Millä nopeudella kohdetta seurataan
175        seuraajanAivot.DistanceFar = 600;           // Etäisyys jolla aletaan seurata kohdetta
176        seuraajanAivot.DistanceClose = 200;         // Etäisyys jolloin ollaan lähellä kohdetta
177        seuraajanAivot.StopWhenTargetClose = true;  // Pysähdytään kun ollaan lähellä kohdetta
178        seuraajanAivot.Active = true;
179        vihollinen.Brain = seuraajanAivot;
180
181        Timer ajastin = new Timer();
182        ajastin.Interval = 1.5;
183        ajastin.Timeout += delegate
184        {
185            int satunnainenLuku = RandomGen.NextInt(2);
186            Pelaaja valittuPelaaja = pelaaja1;
187            if (satunnainenLuku == 0) valittuPelaaja = pelaaja1;
188            if (satunnainenLuku == 1) valittuPelaaja = pelaaja2;
189            Vector suunta = (valittuPelaaja.Position - vihollinen.ase.AbsolutePosition).Normalize();
190            vihollinen.ase.Angle = suunta.Angle;
191            PhysicsObject ammus = vihollinen.ase.Shoot();
192            if (ammus != null)
193            {
194                ammus.Tag = "ammus";
195            }
196        };
197        ajastin.Start();
198
199        vihollinen.AngularDamping = 0.3;
200
201        AddCollisionHandler(vihollinen, "ammus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 1); });
202        AddCollisionHandler(vihollinen, "haulikonAmmus", delegate(PhysicsObject a, PhysicsObject b) { AmmusOsuuViholliseen(a, b, 2); });
203    }
204    void PelinControllit()
205    {
206        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "", pelaaja1);
207        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja1);
208        ControllerOne.ListenAnalog(AnalogControl.RightStick, 0.1, Tahtays, "", pelaaja1);
209
210        ControllerTwo.ListenAnalog(AnalogControl.LeftStick ,0.1, LiikutaPelaajaa, "", pelaaja2);
211        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "", pelaaja2);
212        ControllerTwo.ListenAnalog(AnalogControl.RightStick, 0.1 , Tahtays, "", pelaaja2);
213    }
214    void LiikutaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja)
215    {
216        if (tatinTila.StateVector.Angle.MainDirection == Direction.Right)
217        {
218            pelaaja.Move(new Vector(200, 0));
219        }
220        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Left)
221        {
222            pelaaja.Move(new Vector(-200, 0));
223        }
224        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Down)
225        {
226            pelaaja.Move(new Vector(0, -200));
227        }
228        else if (tatinTila.StateVector.Angle.MainDirection == Direction.Up)
229        {
230            pelaaja.Move(new Vector(0, 200));
231        }
232        //pelaaja.Move(Vector.FromLengthAndAngle(tatinTila.StateVector.Magnitude * 200, tatinTila.StateVector.Angle));
233    }
234    void Tahtays(AnalogState tatinTila, Pelaaja pelaaja)
235    {
236        pelaaja.ase.Angle = tatinTila.StateVector.Angle;
237    }
238    void AmmuAseella(Pelaaja pelaaja)
239    {
240        PhysicsObject ammus = pelaaja.ase.Shoot();
241        if (ammus != null)
242        {
243            if (pelaaja.ase.Image == haulikonKuva)
244            {
245                ammus.Tag = "haulikonAmmus";
246            }
247            else
248            {
249                ammus.Tag = "ammus";
250            }
251        }
252
253       
254    }
255    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
256    {
257        ammus.Destroy();     
258    }
259    void AmmusOsuuPelaajaan(PhysicsObject pelaaja, PhysicsObject ammus)
260    {
261        ((Pelaaja)pelaaja).ElamaLaskuri.Value--;
262    }
263    void AmmusOsuuViholliseen(PhysicsObject vihu, PhysicsObject kohde, int vahinko)
264    {
265        ((Vihollinen)vihu).ElamaLaskuri.Value -= vahinko;
266    }
267    void SpawnaaHaulikko(Vector paikka, double leveys, double korkeus)
268    {
269        PhysicsObject haulikko = new PhysicsObject(haulikonKuva);
270        haulikko.Position = paikka;
271        Add(haulikko);
272        haulikko.Tag = "haulikko";
273        AddCollisionHandler(haulikko, "pelaaja", PoimiHaulikko);
274
275    }
276    void PoimiHaulikko(PhysicsObject haulikko, PhysicsObject pelaaja)
277    {
278        Pelaaja tyyppi = pelaaja as Pelaaja;
279        tyyppi.ase.Destroy();
280
281        tyyppi.ase = new AssaultRifle(100, 100);
282        tyyppi.ase.FireRate = 1;
283        tyyppi.ase.CanHitOwner = false;
284        tyyppi.ase.Image = haulikonKuva;
285        tyyppi.Add(tyyppi.ase);
286
287        haulikko.Destroy();
288       
289    }
290}
Note: See TracBrowser for help on using the repository browser.