source: 2017/27/RasmusL/ZombiSurvi/ZombiSurvi/ZombiSurvi/ZombiSurvi.cs @ 8855

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