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

Revision 6763, 10.1 KB checked in by saveviku, 4 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
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("FF6A00"), Luokansio);
59        ruudut.SetTileMethod(Color.Black, LuoTaso);
60        ruudut.SetTileMethod(Color.Gray, LuoLattia);
61        ruudut.Execute(20, 20);
62        Camera.ZoomToLevel();
63        GameObject pimeys = new GameObject(Level.Width,Level.Height);
64        pimeys.Color = new Color(0, 0, 0, 100);
65        Add(pimeys,2);
66
67        LuoZombit();
68
69        Luolaskuri();
70
71
72    }
73    void Luolaskuri()
74    {
75        Label pistenäyttö = new Label();
76        pistenäyttö.X = Level.Left + 100;
77        pistenäyttö.Y = Level.Top - 100;
78        Add(pistenäyttö);
79        pistenäyttö.BindTo(kansiolaskuri);
80    }
81    void LuoZombit()
82    {
83        ColorTileMap zombiruudut = ColorTileMap.FromLevelAsset("kenttä");
84        zombiruudut.SetTileMethod(Color.FromHexCode("FF0000"), Luozombi);
85        zombiruudut.Execute(20, 20);
86    }
87
88    void LuoTaso(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
91        taso.Position = paikka;
92        taso.Image = wallimage;
93        taso.CollisionIgnoreGroup = 1;
94        Add(taso);
95    }
96
97
98    void Luokansio(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject kansio = PhysicsObject.CreateStaticObject(leveys, korkeus);
101        kansio.Position = paikka;
102        kansio.Image = kansionkuva;
103        Add(kansio);
104        kansiolaskuri.MaxValue++;
105    }
106
107
108    void Luozombi(Vector paikka, double leveys, double korkeus)
109    {
110        for (int i = 0; i < 4; i++)
111        {
112            zombilaskuri++;
113
114            LuoLattia(paikka, leveys, korkeus);
115            Zombi zombi = new Zombi(40, 20);
116            zombi.Image = zombinkuva;
117            zombi.FlipImage();
118            zombi.AngularDamping = 0.8;
119            zombi.Tag = "zombi";
120            zombi.Position = paikka;
121            Add(zombi);
122
123            AddCollisionHandler(zombi, "ammus", delegate(PhysicsObject z, PhysicsObject ammus)
124            {
125                Zombi zo = z as Zombi;
126                zo.ElamaLaskuri.Value--;
127            });
128
129            FollowerBrain seuraajanAivot = new FollowerBrain("ukkeli");
130            seuraajanAivot.TurnWhileMoving = true;
131            RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
132            seuraajanAivot.Speed = 40;                 // Millä nopeudella kohdetta seurataan
133            seuraajanAivot.DistanceFar = 150;           // Etäisyys jolla aletaan seurata kohdetta
134            seuraajanAivot.TurnWhileMoving = true;
135            seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
136            satunnaisAivot.ChangeMovementSeconds = 3;
137
138            //Aivot käyttöön oliolle
139            zombi.Brain = seuraajanAivot;
140
141            Timer nakyvyysAjastin = new Timer();
142            nakyvyysAjastin.Interval = 0.05;
143            nakyvyysAjastin.Timeout += delegate { TarkistaNakyvyys(zombi); };
144            nakyvyysAjastin.Start();
145
146            zombi.Destroyed += delegate
147            {
148                zombilaskuri--;
149
150                if (zombilaskuri == 0)
151                {
152                    LuoZombit();
153                }
154            };
155        }
156    }
157
158
159    void AsetaOhjaimet()
160    {
161        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli2);
162        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase2);
163        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli1);
164        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase);
165        //Keyboard.Listen(Key.Left, ButtonState.Down,
166        //  LiikutaPelaajaa, null, new Vector(-1000, 0));
167        //Keyboard.Listen(Key.Right, ButtonState.Down,
168        //  LiikutaPelaajaa, null, new Vector(1000, 0));
169        //Keyboard.Listen(Key.Up, ButtonState.Down,
170        //  LiikutaPelaajaa, null, new Vector(0, 1000));
171        //Keyboard.Listen(Key.Down, ButtonState.Down,
172        //  LiikutaPelaajaa, null, new Vector(0, -1000));
173        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
174
175
176    }
177
178    void LiikutaPelaajaa(AnalogState tatinTila, PhysicsObject pelaaja)
179    {
180        pelaaja.Angle = tatinTila.StateVector.Angle;
181        pelaaja.Push(tatinTila.StateVector * maxLiikkuminen);
182
183    }
184
185    void AmmuAseella(AssaultRifle ase)
186    {
187        if (ase.Parent.IsDestroyed)
188        {
189            return;
190        }
191        PhysicsObject ammus = ase.Shoot();
192
193        if (ammus != null)
194        {
195            //ammus.Size *= 3;
196            //ammus.Image = ...
197            ammus.MaximumLifetime = TimeSpan.FromSeconds(6.0);
198            ammus.Tag = "ammus";
199        }
200    }
201    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
202    {
203        ammus.Destroy();
204    }
205
206    PhysicsObject LuoPelaaja(Vector paikka, double leveys, double korkeus)
207    {
208        PhysicsObject ukkeli = new PhysicsObject(40, 20);
209        ukkeli.LinearDamping = 0.7;
210        ukkeli.AngularDamping = 0.9;
211        ukkeli.Shape = Shape.Rectangle;
212        ukkeli.Position = paikka;
213        ukkeli.Image = pelaajankuva1;
214        ukkeli.Color = Color.Red;
215        ukkeli.Tag = "ukkeli";
216        Add(ukkeli,3);
217
218
219        AddCollisionHandler(ukkeli, "zombi", PelaajaosuuVihuun);
220
221        GameObject valo = new GameObject(250, 250);
222        valo.X = 130;
223        valo.Image = valonkuva;
224        ukkeli.Add(valo);
225
226        LuoLattia(paikka, leveys, korkeus);
227
228        return ukkeli;
229    }
230
231    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
232    {
233        ukkeli1 = LuoPelaaja(paikka, leveys, korkeus);
234
235        ase = new AssaultRifle(30, 10);
236
237        // //Ammusten määrä aluksi:
238        ase.Ammo.Value = 100;
239        ase.IsVisible = false;
240        // //Mitä tapahtuu kun ammus osuu johonkin?
241        ase.ProjectileCollision = AmmusOsui;
242        ukkeli1.Add(ase);
243
244        AddCollisionHandler(ukkeli1, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
245        {
246            b.Destroy();
247            ase.Ammo.Value += AmmuksetLaatikosta;
248        });
249
250    }
251
252    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
253    {
254        ukkeli2 = LuoPelaaja(paikka, leveys, korkeus);
255        ase2 = new AssaultRifle(30, 10);
256
257        // //Ammusten määrä aluksi:
258        ase2.Ammo.Value = 100;
259        ase2.IsVisible = false;
260        // //Mitä tapahtuu kun ammus osuu johonkin?
261        ase2.ProjectileCollision = AmmusOsui;
262        ukkeli2.Add(ase2);
263
264        AddCollisionHandler(ukkeli2, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
265        {
266            b.Destroy();
267            ase2.Ammo.Value += AmmuksetLaatikosta;
268        });
269
270    }
271    void Luolaatikko(Vector paikka, double leveys, double korkeus)
272    {
273        LuoLattia(paikka, leveys, korkeus);
274        PhysicsObject laatikko = new PhysicsObject(leveys,korkeus);
275        laatikko.Image = laatikonkuva;
276        laatikko.Position = paikka;
277        laatikko.Tag = "laatikko";
278        Add(laatikko);
279    }
280    void PelaajaosuuVihuun(PhysicsObject ukkeli,PhysicsObject zombi )
281    {
282        ukkeli.Destroy();
283    }
284
285    void TarkistaNakyvyys(GameObject olio)
286    {
287        PhysicsObject[] ukkelit = { ukkeli1, ukkeli2 };
288
289        int valonPituus = 200;
290        int valonKulma = 45;
291
292        bool piilossa = true;
293        foreach (var ukkeli in ukkelit)
294        {
295            if (ukkeli.IsDestroyed)
296                continue;
297
298            bool lamppu = Math.Abs((olio.Position - ukkeli.Position).Angle.Degrees - ukkeli.Angle.Degrees) < valonKulma && Vector.Distance(olio.Position, ukkeli.Position) < valonPituus;
299            bool lahella = Vector.Distance(olio.Position, ukkeli.Position) < 60;
300            if (lamppu || lahella)
301            {
302                piilossa = false;
303                break;
304            }
305        }
306
307        olio.IsVisible = !piilossa;
308    }
309}
310class Zombi : PhysicsObject
311{
312    private IntMeter elamaLaskuri = new IntMeter(5, 0, 5);
313    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
314
315    public Zombi(double leveys, double korkeus)
316        : base(leveys, korkeus)
317    {
318        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
319    }
320}
321
Note: See TracBrowser for help on using the repository browser.