source: 2013/24/TommiA/FysiikkaPeli3/FysiikkaPeli3/FysiikkaPeli3/Zombi Killer v1.cs @ 4170

Revision 4170, 9.0 KB checked in by anlakane, 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
9
10public class FysiikkaPeli3 : PhysicsGame
11{
12    PhysicsObject Tommi;
13    Weapon ase;
14    Image TomminKuva = LoadImage("Untitled");
15    Image TommiJuoksee = LoadImage("juoksu");
16
17    Image Zombikuva = LoadImage("Zombie");
18    Image Zombimaski = LoadImage("Zombiemask");
19    Image Zombiseuraa = LoadImage("Zombie2");
20    Image tausta = LoadImage("tausta");
21    Image tahtainkuva = LoadImage("tahtain");
22    Image ak = LoadImage("ak47_3");
23    Image M4Kuva = LoadImage("M4");
24    Image galil = LoadImage("galil_1");
25    Image luoti = LoadImage("kuti");
26    Image Elamamittari = LoadImage("hp metter");
27    Image Tyhjaelamamittari = LoadImage("hp metter2");
28    EasyHighScore topLista = new EasyHighScore();
29
30    DoubleMeter elamaLaskuri;
31    IntMeter pisteLaskuri;
32    bool kaannetty =false;
33    int kenttaNro = 1;
34    Timer ajastin;
35
36    public override void Begin()
37    {
38        topLista.HighScoreWindow.Closed += delegate(Window sender) { AlkuValikko(); };
39        IsMouseVisible = false;
40        AlkuValikko();
41    }
42
43    void SoitaSattumanVarainenKappale()
44    {
45        MediaPlayer.Play( RandomGen.SelectOne<string>("l4d", "left", "left_4_dead", "left4dead"));
46
47        MediaPlayer.IsRepeating = true;
48    }
49
50
51    void AlkuValikko()
52    {
53        ClearAll();
54
55        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valitsekentta, "Lopeta peli");
56        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", "Aloita peli", "Parhaat pisteet", "Lopeta");
57            alkuValikko.ItemSelected += ValikkoValinta;
58            alkuValikko.IsModal = false;
59        Add(alkuValikko);
60
61        // TODO: Kirjoita ohjelmakoodisi tähän
62    }
63
64    void ValikkoValinta(int valinta)
65    {
66        switch (valinta)
67        {
68            case 0:
69                //AloitaPeli();
70                Valitsekentta();
71                break;
72            case 1:
73                //topLista.
74                topLista.Show();
75                break;
76            default:
77                Exit();
78                break;
79        }
80    }
81
82    void Valitsekentta()
83    {
84        MultiSelectWindow Valikko = new MultiSelectWindow("Valitse Kentta",  "Yö Piha ei", "leiri toimi", "kuolemaa pelissä", "Jatka", "Exit");
85        Valikko.ItemSelected += KenttaValittu;
86        Add(Valikko);
87    }
88
89    void KenttaValittu(int valinta)
90    {
91        if (valinta == 3) return;
92        if (valinta == 4)
93        {
94            Exit();
95            return;
96        }
97        kenttaNro = valinta + 1;
98        AloitaPeli();
99    }
100
101
102    void AloitaPeli()
103    {
104        ClearAll();
105
106         Tommi = new PhysicsObject(80, 140);
107        Tommi.Shape = Shape.FromImage(Zombimaski);
108        Tommi.LinearDamping = 0.95;
109        Tommi.Animation = new Animation(TomminKuva, TommiJuoksee);
110        Tommi.Animation.Stop();
111        Tommi.Animation.StopOnLastFrame = false;
112        AddCollisionHandler(Tommi, "zombie", TormaaZombiin);
113        ase = new AssaultRifle(100, 35);
114        ase.Ammo.Value = 1000;
115        Tommi.Add(ase);
116        ase.Image = ak;
117        ase.FireRate = 100;
118        ase.Position += new Vector(0, -30);
119        Tommi.CanRotate = false;
120        Add(Tommi);
121
122        SoitaSattumanVarainenKappale();
123
124        LuoZombie(120, 120);
125
126        Level.BackgroundColor = Color.BrightGreen;
127        Level.Background.Image = LoadImage("kentta"+kenttaNro);
128        Level.Background.FitToLevel();
129        Level.CreateBorders(false);
130        ajastin = new Timer();
131        ajastin.Interval = 1.0;
132        ajastin.Timeout += delegate { LuoZombie(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, 0)); };
133        ajastin.Start();
134        LuoElamaLaskuri();
135        LuoPistelaskuri();
136        PhysicsObject Ylaraja = PhysicsObject.CreateStaticObject(Level.Width, 300);
137        Ylaraja.Position = new Vector(0, 300);
138        Ylaraja.Color = Color.Transparent;
139        Add(Ylaraja);
140
141        Camera.Follow(Tommi);
142        Camera.ZoomFactor = 2;
143        Camera.StayInLevel = true;
144       
145        GameObject tahtain = new GameObject(tahtainkuva);
146        Add(tahtain);
147
148        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
149        Keyboard.Listen(Key.A, ButtonState.Released, PysaytaPelaaja, null);
150        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
151        Keyboard.Listen(Key.D, ButtonState.Released,PysaytaPelaaja, null);
152        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
153        Keyboard.Listen(Key.W, ButtonState.Released,PysaytaPelaaja , null);
154        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector( 0, -1000 ));
155        Keyboard.Listen(Key.S, ButtonState.Released, PysaytaPelaaja, null);
156        Keyboard.Listen(Key.P, ButtonState.Pressed, Pause, "Pysäyttää pelin");
157
158        Keyboard.Listen(Key.X, ButtonState.Down, delegate
159        {
160            foreach (PhysicsObject z in GetObjectsWithTag("zombie"))
161            {
162                Explosion rajahdys = new Explosion(100);
163                rajahdys.Position = z.Position;
164                Add(rajahdys);
165                OsuuZombiin(z, null);
166            }
167        }, null);
168
169        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", Tommi);
170       
171        Mouse.ListenMovement(0.1, SeuraaHiirta, null, tahtain);
172        Mouse.Listen(MouseButton.Left, ButtonState.Released, AmmuHiiresta, null);
173        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
174        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valitsekentta, "Lopeta peli");
175   
176 
177    }
178
179
180    void TormaaZombiin(PhysicsObject pelaaja, PhysicsObject zombie)
181    {
182        elamaLaskuri.Value += -0.1;
183    }
184   
185    void SeuraaHiirta(AnalogState hiiri, GameObject tahtain)
186    {
187        tahtain.Position = Mouse.PositionOnWorld;
188
189        Vector suunta = (Mouse.PositionOnWorld - ase.AbsolutePosition).Normalize();
190        ase.Angle = suunta.Angle;
191        if (((suunta.Angle.Degrees > 90 && suunta.Angle.Degrees <= 180) || (suunta.Angle.Degrees <= -90 && suunta.Angle.Degrees >= -180)) && !kaannetty)
192        {
193            kaannetty = true;
194            ase.FlipImage();
195            return;
196        }
197        if (kaannetty && (suunta.Angle.Degrees >= -90 && suunta.Angle.Degrees <= 90) )
198        {
199            kaannetty = false;
200            ase.FlipImage();
201        }
202    }
203
204
205    void AmmuHiiresta()
206    {
207        PhysicsObject ammus =  ase.Shoot();
208        if (ammus == null) return;
209        ammus.Tag = "ammus";
210        ammus.Image = luoti;
211        ammus.LifetimeLeft = TimeSpan.FromMilliseconds(1000);
212    }
213
214
215    void AmmuAseella(PhysicsObject pelaaja)
216    {
217        PhysicsObject ammus = ase.Shoot();
218
219        if (ammus != null)
220        {
221            //ammus.Size *= 3;
222            //ammus.Image = ...
223            //ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
224        }
225
226    }
227
228    void LuoElamaLaskuri()
229    {
230        elamaLaskuri = new DoubleMeter(10, 0, 10);
231        elamaLaskuri.LowerLimit += ElamaLoppui;
232
233        ProgressBar elamaPalkki = new ProgressBar(150, 20);
234        elamaPalkki.X = Screen.Left + 150;
235        elamaPalkki.Y = Screen.Top - 20;
236        elamaPalkki.Image = Tyhjaelamamittari;
237        elamaPalkki.BarImage = Elamamittari;
238        elamaPalkki.BindTo(elamaLaskuri);
239        Add(elamaPalkki);
240    }
241
242
243    void ElamaLoppui()
244    {
245        Tommi.Destroy();
246
247        topLista.EnterAndShow(pisteLaskuri.Value);
248       
249    }
250
251 
252
253
254    void LuoZombie(double x, double y)
255    {
256        PhysicsObject Zombi = new PhysicsObject(90, 150);
257        Zombi.Shape = Shape.Circle;
258        Zombi.Animation = new Animation(Zombikuva, Zombiseuraa);
259        Zombi.Animation.Start();
260        Zombi.Position = new Vector(x, y);       
261        Zombi.LinearDamping = 0.95;
262        Zombi.Tag = "zombie";
263        Zombi.CanRotate = false;
264        AddCollisionHandler(Zombi, "ammus", OsuuZombiin);
265        FollowerBrain seuraajanAivot = new FollowerBrain(Tommi);
266        Zombi.Brain = seuraajanAivot;
267        Add(Zombi);
268
269    }
270
271
272    void OsuuZombiin(PhysicsObject zombi, PhysicsObject ammus)
273    {
274        zombi.Destroy();
275        if(ammus != null)
276            ammus.Destroy();
277        pisteLaskuri.Value += 1;
278    }
279
280    void PysaytaPelaaja()
281    {
282        Tommi.Animation.Stop();
283    }
284
285    void LiikutaPelaajaa(Vector vektori)
286    {
287        Tommi.Push(vektori);
288        Tommi.Animation.Resume();
289    }
290
291    void LuoPistelaskuri()
292    {
293        pisteLaskuri = new IntMeter(0);
294
295        Label pisteNaytto = new Label();
296        pisteNaytto.X = Screen.Left + 100;
297        pisteNaytto.Y = Screen.Top - 100;
298        pisteNaytto.TextColor = Color.Black;
299        pisteNaytto.Color = Color.White;
300
301        pisteNaytto.BindTo(pisteLaskuri);
302        Add(pisteNaytto);
303    }
304
305   
306}
Note: See TracBrowser for help on using the repository browser.