source: 2015/27/SanteriK/Hundreddays/Hundreddays/Hundreddays/Hundreddays.cs @ 10337

Revision 6795, 12.0 KB checked in by saveviku, 7 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
9public class Hundreddays : PhysicsGame
10{
11    Image wallimage = LoadImage("seinä");
12    //Image pelaajankuva = LoadImage("ukkeli2");
13    Image pelaajankuva1 = LoadImage("ukkeli1");
14    Image groundImage = LoadImage("lattia");
15    Image zombinkuva = LoadImage("zombie");
16    Image valonkuva = LoadImage("valo");
17    Image laatikonkuva = LoadImage("laatikko");
18    Image kansionkuva = LoadImage("kansio");
19    int zombilaskuri = 0;
20    IntMeter kansiolaskuri = new IntMeter(0,0,0);
21    PhysicsObject ukkeli2;
22    PhysicsObject ukkeli1;
23   
24   // List<Vector>
25    //Kuinka nopeasti ukkeli liikkuu maksimissaan
26    double maxLiikkuminen = 1800.0;
27    int AmmuksetLaatikosta = 20;
28
29    AssaultRifle ase;
30    AssaultRifle ase2;
31    public override void Begin()
32    {
33
34        LuoKentta();
35        AsetaOhjaimet();
36
37        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
38        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
39    }
40    void LuoLattia(Vector paikka, double leveys, double korkeus)
41    {
42        GameObject lattia = new GameObject(leveys, korkeus);
43
44        lattia.Position = paikka;
45        Add(lattia, -1);
46        lattia.Image = groundImage;
47
48    }
49
50    void LuoKentta()
51    {
52        zombilaskuri = 0;
53        kansiolaskuri = new IntMeter(0, 0, 0);
54        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä");
55        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
56        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), LuoPelaaja2);
57        ruudut.SetTileMethod(Color.FromHexCode("FF006E"), Luolaatikko);
58        ruudut.SetTileMethod(Color.FromHexCode("00137F"), Luolaatikko);
59        ruudut.SetTileMethod(Color.FromHexCode("FF6A00"), LuoLattia);
60        ruudut.SetTileMethod(Color.Black, LuoTaso);
61        ruudut.SetTileMethod(Color.Gray, LuoLattia);
62        ruudut.Execute(20, 20);
63        Camera.ZoomToLevel();
64        GameObject pimeys = new GameObject(Level.Width,Level.Height);
65        pimeys.Color = new Color(0, 0, 0, 100);
66        Add(pimeys,2);
67
68        // tehdään ekat zombit
69        LuoZombit();
70       
71        // luodaan tietyin väliajoin zombit
72        Timer zombiajastin = new Timer();
73        zombiajastin.Interval = 120;
74        zombiajastin.Timeout += delegate
75        {
76            LuoZombit();
77            MessageDisplay.Add("More zombies");
78        };
79        zombiajastin.Start();
80
81        Luolaskuri();
82
83        Timer.SingleShot(5, Luokansiot);
84    }
85    void Luolaskuri()
86    {
87        Label pistenäyttö = new Label();
88        pistenäyttö.X = Level.Left + 100;
89        pistenäyttö.Y = Level.Top - 100;
90        Add(pistenäyttö);
91        pistenäyttö.BindTo(kansiolaskuri);
92        kansiolaskuri.UpperLimit += Voitto;
93    }
94    void Voitto()
95    {
96       
97    }
98    void LuoZombit()
99    {
100        ColorTileMap zombiruudut = ColorTileMap.FromLevelAsset("kenttä");
101        zombiruudut.SetTileMethod(Color.FromHexCode("FF0000"), Luozombi);
102        zombiruudut.Execute(20, 20);
103    }
104    void Luokansiot()
105    {
106        ColorTileMap kansioruudut = ColorTileMap.FromLevelAsset("kenttä");
107        kansioruudut.SetTileMethod(Color.FromHexCode("FF6A00"), Luokansio);
108        kansioruudut.Execute(20, 20);
109    }
110    void LuoTaso(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        taso.Position = paikka;
114        taso.Image = wallimage;
115        taso.CollisionIgnoreGroup = 1;
116        Add(taso);
117    }
118
119
120    void Luokansio(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject kansio = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        kansio.Position = paikka;
124        kansio.Tag = "kansio";
125        kansio.Image = kansionkuva;
126        Add(kansio);
127        kansiolaskuri.MaxValue++;
128        LuoLattia(paikka, leveys, korkeus);
129
130        Timer nakyvyysAjastin = new Timer();
131        nakyvyysAjastin.Interval = 0.05;
132        nakyvyysAjastin.Timeout += delegate { TarkistaNakyvyys(kansio); };
133        nakyvyysAjastin.Start();
134    }
135
136
137    void Luozombi(Vector paikka, double leveys, double korkeus)
138    {
139        for (int i = 0; i < 4; i++)
140        {
141            zombilaskuri++;
142
143            LuoLattia(paikka, leveys, korkeus);
144            Zombi zombi = new Zombi(40, 20);
145            zombi.Image = zombinkuva;
146            zombi.FlipImage();
147            zombi.AngularDamping = 0.8;
148            zombi.Tag = "zombi";
149            zombi.Position = paikka;
150            Add(zombi);
151
152            AddCollisionHandler(zombi, "ammus", delegate(PhysicsObject z, PhysicsObject ammus)
153            {
154                Zombi zo = z as Zombi;
155                zo.ElamaLaskuri.Value--;
156            });
157
158            FollowerBrain seuraajanAivot = new FollowerBrain("ukkeli");
159            seuraajanAivot.TurnWhileMoving = true;
160            RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
161            seuraajanAivot.Speed = 40;                 // Millä nopeudella kohdetta seurataan
162            seuraajanAivot.DistanceFar = 200;           // Etäisyys jolla aletaan seurata kohdetta
163            seuraajanAivot.TurnWhileMoving = true;
164            seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
165            satunnaisAivot.ChangeMovementSeconds = 3;
166
167            //Aivot käyttöön oliolle
168            zombi.Brain = seuraajanAivot;
169
170            Timer nakyvyysAjastin = new Timer();
171            nakyvyysAjastin.Interval = 0.05;
172            nakyvyysAjastin.Timeout += delegate { TarkistaNakyvyys(zombi); };
173            nakyvyysAjastin.Start();
174
175            zombi.Destroyed += delegate
176            {
177                zombilaskuri--;
178
179                if (zombilaskuri == 0)
180                {
181                    LuoZombit();
182                }
183            };
184
185           
186        }
187    }
188
189
190    void AsetaOhjaimet()
191    {
192        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli2);
193        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase2);
194        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli1);
195        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase);
196        //Keyboard.Listen(Key.Left, ButtonState.Down,
197        //  LiikutaPelaajaa, null, new Vector(-1000, 0));
198        //Keyboard.Listen(Key.Right, ButtonState.Down,
199        //  LiikutaPelaajaa, null, new Vector(1000, 0));
200        //Keyboard.Listen(Key.Up, ButtonState.Down,
201        //  LiikutaPelaajaa, null, new Vector(0, 1000));
202        //Keyboard.Listen(Key.Down, ButtonState.Down,
203        //  LiikutaPelaajaa, null, new Vector(0, -1000));
204        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
205
206
207    }
208
209    void LiikutaPelaajaa(AnalogState tatinTila, PhysicsObject pelaaja)
210    {
211        pelaaja.Angle = tatinTila.StateVector.Angle;
212        pelaaja.Push(tatinTila.StateVector * maxLiikkuminen);
213
214    }
215
216    void AmmuAseella(AssaultRifle ase)
217    {
218        if (ase.Parent.IsDestroyed)
219        {
220            return;
221        }
222        PhysicsObject ammus = ase.Shoot();
223
224        if (ammus != null)
225        {
226            //ammus.Size *= 3;
227            //ammus.Image = ...
228            ammus.MaximumLifetime = TimeSpan.FromSeconds(6.0);
229            ammus.Tag = "ammus";
230        }
231    }
232    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
233    {
234        ammus.Destroy();
235    }
236
237    PhysicsObject LuoPelaaja(Vector paikka, double leveys, double korkeus)
238    {
239        PhysicsObject ukkeli = new PhysicsObject(40, 20);
240        ukkeli.LinearDamping = 0.7;
241        ukkeli.AngularDamping = 0.9;
242        ukkeli.Shape = Shape.Rectangle;
243        ukkeli.Position = paikka;
244        ukkeli.Image = pelaajankuva1;
245        ukkeli.Color = Color.Red;
246        ukkeli.Tag = "ukkeli";
247        Add(ukkeli,3);
248
249
250        AddCollisionHandler(ukkeli, "zombi", PelaajaosuuVihuun);
251        AddCollisionHandler(ukkeli, "kansio", Pelaajaosuukansioon);
252       // AddCollisionHandler(ukkeli, "Kerättäväase", PelaajasuuAseeseen);
253        GameObject valo = new GameObject(250, 250);
254        valo.X = 130;
255        valo.Image = valonkuva;
256        ukkeli.Add(valo);
257
258        LuoLattia(paikka, leveys, korkeus);
259
260        return ukkeli;
261    }
262
263    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
264    {
265        ukkeli1 = LuoPelaaja(paikka, leveys, korkeus);
266
267        ase = new AssaultRifle(30, 10);
268
269        // //Ammusten määrä aluksi:
270        ase.Ammo.Value = 100;
271        ase.IsVisible = false;
272        // //Mitä tapahtuu kun ammus osuu johonkin?
273        ase.ProjectileCollision = AmmusOsui;
274        ukkeli1.Add(ase);
275
276        AddCollisionHandler(ukkeli1, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
277        {
278            b.Destroy();
279            ase.Ammo.Value += AmmuksetLaatikosta;
280        });
281
282    }
283
284    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
285    {
286        ukkeli2 = LuoPelaaja(paikka, leveys, korkeus);
287        ase2 = new AssaultRifle(30, 10);
288
289        // //Ammusten määrä aluksi:
290        ase2.Ammo.Value = 100;
291        ase2.IsVisible = false;
292        // //Mitä tapahtuu kun ammus osuu johonkin?
293        ase2.ProjectileCollision = AmmusOsui;
294        ukkeli2.Add(ase2);
295
296        AddCollisionHandler(ukkeli2, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
297        {
298            b.Destroy();
299            ase2.Ammo.Value += AmmuksetLaatikosta;
300        });
301
302    }
303    void Luolaatikko(Vector paikka, double leveys, double korkeus)
304    {
305        LuoLattia(paikka, leveys, korkeus);
306        PhysicsObject laatikko = new PhysicsObject(leveys,korkeus);
307        laatikko.Image = laatikonkuva;
308        laatikko.Position = paikka;
309        laatikko.Tag = "laatikko";
310        Add(laatikko);
311
312        Timer nakyvyysAjastin = new Timer();
313        nakyvyysAjastin.Interval = 0.05;
314        nakyvyysAjastin.Timeout += delegate { TarkistaNakyvyys(laatikko); };
315        nakyvyysAjastin.Start();
316    }
317
318    void Pelaajaosuukansioon(PhysicsObject ukkeli,PhysicsObject kansio)
319    {
320        kansiolaskuri.Value++;
321        kansio.Destroy();
322}
323
324    void PelaajaosuuVihuun(PhysicsObject ukkeli,PhysicsObject zombi )
325    {
326        ukkeli.Destroy();
327    }
328
329    void TarkistaNakyvyys(GameObject olio)
330    {
331        PhysicsObject[] ukkelit = { ukkeli1, ukkeli2 };
332
333        int valonPituus = 200;
334        int valonKulma = 45;
335
336        bool piilossa = true;
337        foreach (var ukkeli in ukkelit)
338        {
339            if (ukkeli.IsDestroyed)
340                continue;
341
342            bool lamppu = Math.Abs((olio.Position - ukkeli.Position).Angle.Degrees - ukkeli.Angle.Degrees) < valonKulma && Vector.Distance(olio.Position, ukkeli.Position) < valonPituus;
343            bool lahella = Vector.Distance(olio.Position, ukkeli.Position) < 60;
344            if (lamppu || lahella)
345            {
346                piilossa = false;
347                break;
348            }
349        }
350
351        olio.IsVisible = !piilossa;
352   }
353    //void PelaajaosuuKerättäväänaseeseen(PhysicsObject ukkeli, PhysicsObject Kerättäväase)
354    //{
355    //}
356    void LuoKerättäväase(Vector paikka, double leveys, double korkeus)
357    {
358        PhysicsObject ase = new PhysicsObject(leveys, korkeus);
359        ase.Position = paikka;
360        ase.Tag = "ase";
361        Add(ase);
362    }
363}
364class Zombi : PhysicsObject
365{
366    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
367    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
368
369    public Zombi(double leveys, double korkeus)
370        : base(leveys, korkeus)
371    {
372        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
373    }
374}
375
Note: See TracBrowser for help on using the repository browser.