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

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