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

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