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

Revision 6735, 8.5 KB checked in by saveviku, 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
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    PhysicsObject ukkeli2;
19    PhysicsObject ukkeli1;
20   
21
22    //Kuinka nopeasti ukkeli liikkuu maksimissaan
23    double maxLiikkuminen = 1800.0;
24    int AmmuksetLaatikosta = 100;
25
26    AssaultRifle ase;
27    AssaultRifle ase2;
28    public override void Begin()
29    {
30
31        LuoKentta();
32        AsetaOhjaimet();
33
34        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
35        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
36    }
37    void LuoLattia(Vector paikka, double leveys, double korkeus)
38    {
39        GameObject lattia = new GameObject(leveys, korkeus);
40
41        lattia.Position = paikka;
42        Add(lattia, -1);
43        lattia.Image = groundImage;
44
45    }
46
47    void LuoKentta()
48    {
49        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä");
50
51        ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1);
52        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), LuoPelaaja2);
53        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), Luozombi);
54        ruudut.SetTileMethod(Color.FromHexCode("FF006E"), Luolaatikko);
55        ruudut.SetTileMethod(Color.Black, LuoTaso);
56        ruudut.SetTileMethod(Color.Gray, LuoLattia);
57        ruudut.Execute(20, 20);
58        Camera.ZoomToLevel();
59        GameObject pimeys = new GameObject(Level.Width,Level.Height);
60        pimeys.Color = new Color(0, 0, 0, 100);
61        Add(pimeys,2);
62
63    }
64    void LuoTaso(Vector paikka, double leveys, double korkeus)
65    {
66        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
67        taso.Position = paikka;
68        taso.Image = wallimage;
69        taso.CollisionIgnoreGroup = 1;
70        Add(taso);
71
72
73    }
74    void Luozombi(Vector paikka, double leveys, double korkeus)
75    {
76
77        Zombi zombi = new Zombi(40, 20);
78        zombi.Image = zombinkuva;
79        zombi.FlipImage();
80        zombi.AngularDamping = 0.8;
81        zombi.Tag = "zombi";
82        Add(zombi);
83
84        AddCollisionHandler(zombi, "ammus", delegate(PhysicsObject z, PhysicsObject ammus)
85        {
86            Zombi zo = z as Zombi;
87            zo.ElamaLaskuri.Value--;
88        });
89
90        FollowerBrain seuraajanAivot = new FollowerBrain("ukkeli");
91        seuraajanAivot.TurnWhileMoving = true;
92        RandomMoverBrain satunnaisAivot = new RandomMoverBrain();
93        seuraajanAivot.Speed = 50;                 // Millä nopeudella kohdetta seurataan
94        seuraajanAivot.DistanceFar = 150;           // Etäisyys jolla aletaan seurata kohdetta
95        seuraajanAivot.TurnWhileMoving = true;
96        seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
97        satunnaisAivot.ChangeMovementSeconds = 3;
98
99        //Aivot käyttöön oliolle
100        zombi.Brain = seuraajanAivot;
101
102        Timer nakyvyysAjastin = new Timer();
103        nakyvyysAjastin.Interval = 0.05;
104        nakyvyysAjastin.Timeout += delegate { TarkistaNakyvyys(zombi); };
105        nakyvyysAjastin.Start();
106    }
107
108
109
110    void AsetaOhjaimet()
111    {
112        ControllerTwo.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli2);
113        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase2);
114        ControllerOne.ListenAnalog(AnalogControl.LeftStick, 0.1, LiikutaPelaajaa, "Liikuta pelaajaa tattia pyörittämällä.", ukkeli1);
115        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, "ammu", ase);
116        //Keyboard.Listen(Key.Left, ButtonState.Down,
117        //  LiikutaPelaajaa, null, new Vector(-1000, 0));
118        //Keyboard.Listen(Key.Right, ButtonState.Down,
119        //  LiikutaPelaajaa, null, new Vector(1000, 0));
120        //Keyboard.Listen(Key.Up, ButtonState.Down,
121        //  LiikutaPelaajaa, null, new Vector(0, 1000));
122        //Keyboard.Listen(Key.Down, ButtonState.Down,
123        //  LiikutaPelaajaa, null, new Vector(0, -1000));
124        //Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaajan1Ase);
125
126
127    }
128
129    void LiikutaPelaajaa(AnalogState tatinTila, PhysicsObject pelaaja)
130    {
131        pelaaja.Angle = tatinTila.StateVector.Angle;
132        pelaaja.Push(tatinTila.StateVector * maxLiikkuminen);
133
134    }
135
136    void AmmuAseella(AssaultRifle ase)
137    {
138        if (ase.Parent.IsDestroyed)
139        {
140            return;
141        }
142        PhysicsObject ammus = ase.Shoot();
143
144        if (ammus != null)
145        {
146            //ammus.Size *= 3;
147            //ammus.Image = ...
148            ammus.MaximumLifetime = TimeSpan.FromSeconds(6.0);
149            ammus.Tag = "ammus";
150        }
151    }
152    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
153    {
154        ammus.Destroy();
155    }
156
157    PhysicsObject LuoPelaaja(Vector paikka, double leveys, double korkeus)
158    {
159        PhysicsObject ukkeli = new PhysicsObject(40, 20);
160        ukkeli.LinearDamping = 0.7;
161        ukkeli.AngularDamping = 0.9;
162        ukkeli.Shape = Shape.Rectangle;
163        ukkeli.Position = paikka;
164        ukkeli.Image = pelaajankuva1;
165        ukkeli.Color = Color.Red;
166        ukkeli.Tag = "ukkeli";
167        Add(ukkeli,3);
168
169
170        AddCollisionHandler(ukkeli, "zombi", PelaajaosuuVihuun);
171
172        GameObject valo = new GameObject(200, 200);
173        valo.X = 100;
174        valo.Image = valonkuva;
175        ukkeli.Add(valo);
176
177        LuoLattia(paikka, leveys, korkeus);
178
179        return ukkeli;
180    }
181
182    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
183    {
184        ukkeli1 = LuoPelaaja(paikka, leveys, korkeus);
185
186        ase = new AssaultRifle(30, 10);
187
188        // //Ammusten määrä aluksi:
189        ase.Ammo.Value = 1000;
190        ase.IsVisible = false;
191        // //Mitä tapahtuu kun ammus osuu johonkin?
192        ase.ProjectileCollision = AmmusOsui;
193        ukkeli1.Add(ase);
194
195        AddCollisionHandler(ukkeli1, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
196        {
197            b.Destroy();
198            ase.Ammo.Value += AmmuksetLaatikosta;
199        });
200
201    }
202
203    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
204    {
205        ukkeli2 = LuoPelaaja(paikka, leveys, korkeus);
206        ase2 = new AssaultRifle(30, 10);
207
208        // //Ammusten määrä aluksi:
209        ase2.Ammo.Value = 1000;
210        ase2.IsVisible = false;
211        // //Mitä tapahtuu kun ammus osuu johonkin?
212        ase2.ProjectileCollision = AmmusOsui;
213        ukkeli2.Add(ase2);
214
215        AddCollisionHandler(ukkeli2, "laatikko", delegate(PhysicsObject a, PhysicsObject b)
216        {
217            b.Destroy();
218            ase2.Ammo.Value += AmmuksetLaatikosta;
219        });
220
221    }
222    void Luolaatikko(Vector paikka, double leveys, double korkeus)
223    {
224        PhysicsObject laatikko = new PhysicsObject(leveys,korkeus);
225        laatikko.Image = laatikonkuva;
226        laatikko.Position = paikka;
227        laatikko.Tag = "laatikko";
228        Add(laatikko);
229    }
230    void PelaajaosuuVihuun(PhysicsObject ukkeli,PhysicsObject zombi )
231    {
232        ukkeli.Destroy();
233    }
234
235    void TarkistaNakyvyys(GameObject olio)
236    {
237        PhysicsObject[] ukkelit = { ukkeli1, ukkeli2 };
238
239        int valonPituus = 150;
240        int valonKulma = 45;
241
242        bool piilossa = true;
243        foreach (var ukkeli in ukkelit)
244        {
245            if (ukkeli.IsDestroyed)
246                continue;
247
248            if (Math.Abs((olio.Position - ukkeli.Position).Angle.Degrees - ukkeli.Angle.Degrees) < valonKulma && Vector.Distance(olio.Position, ukkeli.Position) < valonPituus)
249            {
250                piilossa = false;
251                break;
252            }
253        }
254
255        olio.IsVisible = !piilossa;
256    }
257}
258class Zombi : PhysicsObject
259{
260    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
261    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
262
263    public Zombi(double leveys, double korkeus)
264        : base(leveys, korkeus)
265    {
266        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
267    }
268}
269
Note: See TracBrowser for help on using the repository browser.