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

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