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

Revision 7017, 13.2 KB checked in by masorval, 6 years ago (diff)

Peli on valmis @author markus Sorvali
pelin nimi: Maken Känninen Seikkailu

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