source: 2016/26/RasmusL/ZombiSurvi/ZombiSurvi/ZombiSurvi/ZombiSurvi.cs @ 7603

Revision 7603, 9.6 KB checked in by karkaite, 5 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
9class Hahmo : PlatformCharacter
10{
11    private IntMeter elamaLaskuri;
12    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
13
14    public Hahmo(double leveys, double korkeus, int elama)
15        : base(leveys, korkeus)
16    {
17        elamaLaskuri = new IntMeter(elama, 0, elama);
18        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
19    }
20
21}
22
23public class ZombiSurvi : PhysicsGame
24{
25    const double nopeus = 200;
26    const double hyppyNopeus = 950;
27    const int RUUDUN_KOKO = 40;
28
29    IntMeter round = new IntMeter(1);
30
31    Hahmo pelaaja1;
32    GameObject tahtain;
33
34    Image taustakuva = LoadImage("tausta");
35    Image taskulamppu = LoadImage("lampu");
36    Image pelaajanKuva = LoadImage("oikeajuoksu2_1");
37    Image zombi = LoadImage("zombi");
38    Image asekuva = LoadImage("käsiase");
39    Image panos = LoadImage("panos");
40    Image tahtainkuva = LoadImage("crosshairs_144");
41    GameObject valo;
42    SoundEffect maaliAani = LoadSoundEffect("maali");
43    Image puukuva = LoadImage("dramaattinenmaa");
44    Image ruohokuva = LoadImage("ruoho");
45    Image kivikuva = LoadImage("maakivi");
46    Image awpkuva = LoadImage("kädetönawp");
47    public override void Begin()
48    {
49        Mouse.IsCursorVisible = false;
50        SmoothTextures = false;
51        Gravity = new Vector(0, -1000);
52
53        LuoKentta();
54        LisaaNappaimet();
55        LuoAikaLaskuri();
56        LuoroundLaskuri();
57
58        Camera.Follow(pelaaja1);
59        Camera.ZoomFactor = 1.2;
60        //Camera.StayInLevel = true;
61    }
62
63    void LuoKentta()
64    {
65        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("kenttä1");
66        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LisaaPelaaja);
67        ruudut.SetTileMethod(Color.FromHexCode("4FFF51"), LisaaTaso, puukuva);
68        ruudut.SetTileMethod(Color.FromHexCode("F5FF49"), LisaaTaso, ruohokuva);
69        ruudut.SetTileMethod(Color.FromHexCode("FF388A"), LisaaTaso, kivikuva);
70        ruudut.SetTileMethod(Color.FromHexCode("4CFF00"), Lisaazombi);
71        ruudut.SetTileMethod(Color.FromHexCode("0037FF"), Lisaazombispawn);
72        ruudut.SetTileMethod(Color.FromHexCode("DD8EFF"), Lisaasnipu);
73        ruudut.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
74        Level.CreateBorders();
75        //Level.Background.CreateGradient(Color.White, Color.SkyBlue);
76        //Level.Background.Image = taustakuva;
77        //Level.Background.FitToLevel();
78
79        GameObject taustaPilvet = new GameObject(Screen.Width, Screen.Height);
80        taustaPilvet.Image = taustakuva;
81        Add(taustaPilvet, -3);
82        Layers[-3].RelativeTransition = new Vector(0, 0);
83
84        tahtain = new GameObject(100, 100);
85        tahtain.Image = tahtainkuva;
86        Add(tahtain, 3);
87    }
88    void Lisaasnipu(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject snipu = new PhysicsObject(leveys * 1.3, korkeus / 2);
91        Add(snipu);
92        snipu.Position = paikka;
93        snipu.Image = LoadImage("kädetönawp");
94        snipu.Tag = "snipukuva";
95    }
96
97    void LisaaTaso(Vector paikka, double leveys, double korkeus, Image kuva)
98    {
99        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
100        taso.Position = paikka;
101        taso.Image = kuva;
102        Add(taso);
103    }
104    void Lisaazombispawn(Vector paikka, double leveys, double korkeus)
105    {
106        Timer spawnAjastin = new Timer();
107        spawnAjastin.Interval = 7;
108        spawnAjastin.Timeout += delegate
109        {
110            if (Vector.Distance(pelaaja1.Position, paikka) > 600 && RandomGen.NextInt(0, 100) < round.Value * 10)
111            {
112                Lisaazombi(paikka, leveys, korkeus);
113            }
114        };
115        spawnAjastin.Start();
116    }
117    void Lisaazombi(Vector paikka, double leveys, double korkeus)
118    {
119        Hahmo zombi = new Hahmo(leveys, korkeus, round.Value);
120        zombi.Position = paikka;
121        zombi.Image = this.zombi;
122        zombi.Tag = "zombi";
123        Add(zombi);
124
125        //PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
126        //tasoAivot.Speed = 100;
127        //tasoAivot.TriesToJump = true;
128        //tasoAivot.JumpSpeed = 1000;
129
130        FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja");
131        seuraajanAivot.Speed = 300;
132        //seuraajanAivot.DistanceFar = 800;
133        //seuraajanAivot.FarBrain = tasoAivot;
134
135        Timer hyppyAjastin = new Timer();
136        hyppyAjastin.Interval = 1;
137        hyppyAjastin.Timeout += delegate { zombi.Jump(1000); };
138        hyppyAjastin.Start();
139
140        zombi.Brain = seuraajanAivot;
141    }
142
143    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
144    {
145        pelaaja1 = new Hahmo(leveys * 0.5, korkeus, 3);
146        pelaaja1.Position = paikka;
147        pelaaja1.Mass = 4.0;
148        pelaaja1.Image = pelaajanKuva;
149        pelaaja1.Tag = "pelaaja";
150
151
152        AddCollisionHandler(pelaaja1, "zombi", osuizombiin);
153        AddCollisionHandler(pelaaja1, "snipukuva", osuisnipuun);
154
155        Add(pelaaja1);
156        pelaaja1.Weapon = new AssaultRifle(250 * 0.2, 50 * 1);
157        pelaaja1.Weapon.Image = asekuva;
158        pelaaja1.Weapon.FireRate = 3;
159        pelaaja1.Weapon.Ammo.Value = 1000;
160        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
161        ProgressBar elamaPalkki = new ProgressBar(150, 20);
162        elamaPalkki.X = Screen.Left + 150;
163        elamaPalkki.Y = Screen.Top - 20;
164        elamaPalkki.BindTo(pelaaja1.ElamaLaskuri);
165        Add(elamaPalkki);
166
167        valo = new GameObject(taskulamppu);
168        valo.Position = pelaaja1.Position;
169        valo.IsVisible = true;
170        Add(valo, 3);
171    }
172    void osuisnipuun(PhysicsObject pelaaja, PhysicsObject kädetönawp)
173    {
174        kädetönawp.Destroy();
175        pelaaja1.Weapon = new AssaultRifle(250 * 0.3 ,50 * 0.3);
176        pelaaja1.Weapon.Image = awpkuva;
177        pelaaja1.Weapon.FireRate = 1;
178        pelaaja1.Weapon.Ammo.Value = 9999999;
179        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
180
181    }
182    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
183    {
184        ammus.Destroy();
185
186        if (kohde is Hahmo)
187        {
188            ((Hahmo)kohde).ElamaLaskuri.Value -= 1;
189        }
190    }
191    void LisaaNappaimet()
192    {
193        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
194        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
195
196        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
197        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
198        Keyboard.Listen(Key.Space, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
199
200        Mouse.Listen(MouseButton.Left, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
201
202        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
203
204        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
205        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
206        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
207
208
209        Mouse.ListenMovement(0.0, KuunteleLiiketta, null);
210
211        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
212    }
213
214    void KuunteleLiiketta(AnalogState hiirenTila)
215    {
216        pelaaja1.Weapon.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
217        valo.AbsoluteAngle = (Mouse.PositionOnWorld - pelaaja1.Position).Angle;
218
219        tahtain.Position = Mouse.PositionOnWorld;
220    }
221
222    protected override void Update(Time time)
223    {
224        valo.Position = pelaaja1.Position;
225        base.Update(time);
226    }
227
228    void AmmuAseella(PlatformCharacter pelaaja)
229    {
230        PhysicsObject ammus = pelaaja.Weapon.Shoot();
231
232        if (ammus != null)
233        {
234            ammus.Size = new Vector(5, 3) * 2;
235            ammus.Image = panos;
236            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
237        }
238    }
239    void Liikuta(PlatformCharacter hahmo, double nopeus)
240    {
241        hahmo.Walk(nopeus);
242    }
243
244    void Hyppaa(PlatformCharacter hahmo, double nopeus)
245    {
246        hahmo.Jump(nopeus);
247    }
248
249    void LuoAikaLaskuri()
250    {
251        Timer aikaLaskuri = new Timer();
252        aikaLaskuri.Start();
253
254        Label aikaNaytto = new Label();
255        aikaNaytto.TextColor = Color.White;
256        aikaNaytto.DecimalPlaces = 1;
257        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
258        Add(aikaNaytto);
259        aikaNaytto.Position = new Vector(930, -470);
260    }
261
262    void LuoroundLaskuri()
263    {
264        Timer aikaLaskuri = new Timer();
265        aikaLaskuri.Interval = 30;
266        aikaLaskuri.Timeout += delegate { round.Value += 1; };
267        aikaLaskuri.Start();
268
269        Label roundNaytto = new Label();
270        roundNaytto.TextColor = Color.White;
271        roundNaytto.DecimalPlaces = 1;
272        roundNaytto.BindTo(round);
273        //roundNaytto.Position = new Vector(930, -470);
274        Add(roundNaytto);
275       
276    }
277
278    void LuoVihollinen(Vector paikka, double leveys, double korkeus)
279    {
280        PhysicsObject vihollinen = new PhysicsObject(leveys, korkeus);
281        vihollinen.Position = paikka;
282        vihollinen.Tag = "zombi";
283        Add(vihollinen);
284    }
285    void osuizombiin(PhysicsObject pelaaja, PhysicsObject zombi)
286    {
287        pelaaja1.ElamaLaskuri.Value -= 1;
288    }
289}
Note: See TracBrowser for help on using the repository browser.