source: 2015/27/EemilI/infected - Copy/infected/infected/infected.cs @ 6756

Revision 6756, 9.8 KB checked in by eemikone, 4 years ago (diff)

peli lähes valmis

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class infected : PhysicsGame
10{
11    PhysicsObject mies;
12    Image mieskuva = LoadImage("mieskuva");
13    Image seinakuva = LoadImage("seina");
14    Image zombikuva = LoadImage("zombi");
15    Image valikkokuva = LoadImage("valikkokuva");
16    Image asekuva = LoadImage("ak47");
17    Image pistoolikuva = LoadImage("JuanDeag");
18   
19    AssaultRifle ase;
20   
21    List<Vector> spawnipaikat = new List<Vector>();
22    List<Label> valikonKohdat;
23
24    public override void Begin()
25    {
26     
27        Valikko();
28        //IsFullScreen = true;
29        SmoothTextures = true;
30        MediaPlayer.Play("Volatile Reaction");
31    }
32    void LuoHahmo(Vector paikka, double leveys, double korkeus)
33    {
34        mies = new PhysicsObject(mieskuva);
35        mies.Size = new Vector(50, 50);
36        mies.Position = paikka;
37        mies.LinearDamping = 0.1;
38        Add(mies);
39        AddCollisionHandler(mies, "zombi", PelaajaKuolee);
40        mies.CollisionIgnoreGroup = 3;
41
42        ase = new AssaultRifle(50,6);
43        ase.Image = asekuva;
44        ase.Position= new Vector(25, 15);
45        ase.InfiniteAmmo = true;
46        mies.Add(ase);
47        VaihdaAse("ak47");
48    }
49
50
51    void LuoKentta()
52    {
53        ColorTileMap mappi = ColorTileMap.FromLevelAsset("mappi");
54        mappi.SetTileMethod(Color.FromHexCode("4CFF00"), LuoSpawn);
55        mappi.SetTileMethod(Color.Black, LuoTaso);
56        mappi.SetTileMethod(Color.Red, LuoHahmo);
57        mappi.SetTileMethod(Color.FromHexCode("7F0000"), LuoTurvaSeina);
58        mappi.Execute(40, 40);
59        LuoPisteLaskuri();
60
61        for (int i = 0; i < 15; i++)
62        {
63            LuoUusiZombi();
64
65        }
66
67
68        Level.CreateBorders();
69        Camera.Follow(mies);
70        Camera.StayInLevel = true;
71        Camera.Zoom(1.0);
72    }
73
74    void LuoTaso(Vector paikka, double leveys, double korkeus)
75    {
76        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
77        taso.Position = paikka;
78        taso.Color = Color.Black;
79        taso.Image = seinakuva;
80        taso.CollisionIgnoreGroup = 1;
81        Level.Background.Color = Color.Black;
82        Add(taso);
83    }
84    void kontrollit()
85    {
86        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 3000.0, 1);
87        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, 3000.0, 2);
88        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, 3000.0, 3);
89        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, 3000.0, 4);
90        Keyboard.Listen(Key.D1, ButtonState.Pressed, VaihdaAse, "Ota pistooli esille", "pistooli");
91        Keyboard.Listen(Key.E, ButtonState.Pressed, kauppa, "Avaa kaupan");
92        Mouse.ListenMovement(0.0, Tahtays, null);
93        Mouse.IsCursorVisible = true;
94        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ampuminen, null);
95
96        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "InfoIkkuna");
97        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
98    }
99    void LiikutaPelaajaa(double nopeus, int liikkuminen)
100    {
101        switch (liikkuminen)
102        {
103            case 1:
104                mies.Move(Vector.FromLengthAndAngle(nopeus, mies.Angle));
105                break;
106            case 2:
107                mies.Move(-Vector.FromLengthAndAngle(nopeus, mies.Angle));
108                break;
109            case 3:
110                mies.Move(Vector.FromLengthAndAngle(nopeus, mies.Angle - Angle.FromDegrees(90)));
111                break;
112            case 4:
113                mies.Move(Vector.FromLengthAndAngle(nopeus, mies.Angle - Angle.FromDegrees(-90)));
114                break;
115            default:
116                break;
117        }
118    }
119    void Tahtays(AnalogState hiirenTila)
120    {
121        Vector suunta = Mouse.PositionOnWorld - mies.Position;
122        mies.Angle = suunta.Angle;
123    }
124    void LuoAikaLaskuri()
125    {
126        Timer aikaLaskuri = new Timer();
127
128
129        aikaLaskuri.Interval = 4;
130        aikaLaskuri.Timeout += LuoUusiZombi;
131        aikaLaskuri.Start();
132
133        Label aikaNaytto = new Label();
134        aikaNaytto.X = Screen.Left + 100;
135        aikaNaytto.Y = Screen.Top - 100;
136        aikaNaytto.TextColor = Color.White;
137        aikaNaytto.DecimalPlaces = 1;
138        aikaNaytto.BindTo(aikaLaskuri.SecondCounter);
139        Add(aikaNaytto);
140    }
141    void LuoZombi(Vector paikka)
142    {
143        PhysicsObject zombi = new PhysicsObject(40, 40);
144        zombi.Tag = "zombi";
145        zombi.Position = paikka;
146        zombi.Image = zombikuva;
147        Add(zombi);
148
149        FollowerBrain seuraajanAivot = new FollowerBrain(mies);
150        seuraajanAivot.Speed = 100;
151        seuraajanAivot.DistanceFar = 5000000;
152        zombi.Brain = seuraajanAivot;
153        seuraajanAivot.TurnWhileMoving = true;
154    }
155    void LuoUusiZombi()
156    {
157        int indeksi = RandomGen.NextInt(0, spawnipaikat.Count - 1);
158        Vector paikka = spawnipaikat[indeksi];
159        LuoZombi(paikka);
160
161    }
162    void LuoSpawn(Vector paikka, double leveys, double korkeus)
163    {
164        spawnipaikat.Add(paikka);
165
166    }
167   
168    void Valikko()
169    {
170        ClearAll();
171        Mouse.IsCursorVisible = true;
172       
173
174        valikonKohdat = new List<Label>();
175
176        Label kohta1 = new Label("Aloita uusi peli");
177        kohta1.Position = new Vector(0, 40);
178        kohta1.Color = Color.White;
179        valikonKohdat.Add(kohta1);
180
181       
182
183        Label kohta2 = new Label("Poistu");
184        kohta2.Position = new Vector(0, -40);
185        kohta2.Color = Color.White;
186        valikonKohdat.Add(kohta2);
187
188        Level.Background.Color = Color.Black;
189        Level.Background.Image = valikkokuva;
190        Camera.Zoom (1.65);
191
192        foreach (Label valikonKohta in valikonKohdat)
193        {
194            Add(valikonKohta);
195        }
196
197
198        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, AloitaPeli, null);
199       
200        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
201
202        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
203
204    }
205    void AloitaPeli()
206    {
207        ClearAll();
208        LuoKentta();
209       
210        kontrollit();
211        LuoAikaLaskuri();
212       
213        MessageDisplay.MessageTime = new TimeSpan(0, 0, 10);
214        MessageDisplay.TextColor = Color.White;
215       
216       
217    }
218   
219
220    void ValikossaLiikkuminen(AnalogState hiirenTila)
221    {
222        foreach (Label kohta in valikonKohdat)
223        {
224            if (Mouse.IsCursorOn(kohta))
225            {
226                kohta.TextColor = Color.Red;
227            }
228            else
229            {
230                kohta.TextColor = Color.Blue;
231            }
232
233        }
234    }
235    void PelaajaKuolee(PhysicsObject mies, PhysicsObject zombi)
236    {
237        ase.InfiniteAmmo = false;
238        ase.Ammo.Value = 0;
239        ase.Destroy();
240        mies.Destroy();
241        Timer.SingleShot(1, Valikko);
242    }
243    IntMeter pistelaskuri;
244    void LuoPisteLaskuri()
245    {
246        pistelaskuri = new IntMeter(0);
247
248        Label pisteNaytto = new Label();
249        pisteNaytto.X = Screen.Left + 75;
250        pisteNaytto.Y = Screen.Top - 75;
251        pisteNaytto.TextColor = Color.White;
252        pisteNaytto.Color = Color.Black;
253
254        pisteNaytto.BindTo(pistelaskuri);
255        Add(pisteNaytto);
256
257        pisteNaytto.IntFormatString = "Rahaa: {0:D4}$";
258    }
259    void Ampuminen()
260    {
261        PhysicsObject ammus = ase.Shoot();
262        if (ammus != null)
263
264        {
265            AddCollisionHandler(ammus, AmmusOsuu);
266            ammus.CollisionIgnoreGroup = 3;
267            MediaPlayer.Play("ak aani");
268
269        }
270       
271
272    }
273    void VaihdaAse(String aseenNimi)
274    {
275        switch (aseenNimi)
276        {
277            case "ak47":
278                ase.Image = asekuva;
279                ase.FireRate = 5;
280               
281                break;
282            case "pistooli":
283                ase.Image = pistoolikuva;
284                ase.FireRate = 2;
285                break;
286            case "haulikko":
287               
288                break;
289            default:
290                break;
291        }
292        ase.Tag = aseenNimi;
293
294    }
295    void AmmusOsuu(PhysicsObject a, PhysicsObject b)
296    {
297        if (b.Tag == "zombi")
298        {
299            switch (ase.Tag.ToString())
300            {
301                case "ak47":
302                    if (RandomGen.NextInt(0, 100) > 70)
303                    {
304                        pistelaskuri.Value += RandomGen.NextInt(1, 10);
305                        b.Destroy();
306                    }
307                   
308                    break;
309                default:
310                    break;
311            }
312           
313           
314        }
315        a.Destroy();
316    }
317    void LuoTurvaSeina(Vector paikka, double leveys, double korkeus)
318    {
319        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
320        taso.Position = paikka;
321        taso.IsVisible = false;
322       
323        taso.CollisionIgnoreGroup = 3;
324        Level.Background.Color = Color.Black;
325        Add(taso);
326    }
327    void kauppa()
328    {
329        IsPaused = true;
330        MultiSelectWindow kauppa = new MultiSelectWindow("Kauppa", "haulikko 250$", "Exit");
331        kauppa.AddItemHandler(0, delegate
332        {
333            if (pistelaskuri.Value >= 1)
334            {
335                pistelaskuri.Value -= 1;
336                Keyboard.Listen(Key.D2, ButtonState.Pressed, VaihdaAse, "Ota haulikko esille", "haulikko");
337            }
338            IsPaused = false;
339        });
340       
341        kauppa.AddItemHandler(1, delegate
342        {
343            IsPaused = false;
344        });
345        Add(kauppa);
346    }
347}
Note: See TracBrowser for help on using the repository browser.