source: 2016/30/RoniM/savethebase/savethebase/savethebase/savethebase.cs @ 9294

Revision 9294, 12.8 KB checked in by npo17_71, 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
9
10class Pelaaja : PhysicsObject
11{
12    private IntMeter pisteLaskuri = new IntMeter(0);
13    public IntMeter PisteLaskuri { get { return pisteLaskuri; } }
14
15    public AssaultRifle Ase;
16
17    public Pelaaja(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20    }
21}
22
23public class savethebase : PhysicsGame
24{
25
26    Image kpelaaja1 = LoadImage("kpelaaja1");
27    Image kpelaaja2 = LoadImage("kpelaaja2");
28    Image kpelaaja3 = LoadImage("kpelaaja3");
29    Image kpelaaja4 = LoadImage("kpelaaja4");
30    Image Points = LoadImage("Points");
31    Image vihu5 = LoadImage("vihu");
32    Image zzombi = LoadImage("zzombi");
33
34    Pelaaja pelaaja1;
35    Pelaaja pelaaja2;
36    Pelaaja pelaaja3;
37    Pelaaja pelaaja4;
38    //IntMeter pisteLaskuri;
39    const int RUUDUN_KOKO = 30;
40    public int Elamat { get; set; }
41    public bool OnHidas { get; set; }
42    public int KenganNumero { get; set; }
43    public int Rahat { get; set; }
44    public Vector RespausKoordinaatit { get; set; }
45    const double NOPEUS = 800;
46    const double pyoriminenNopeus = 4.0;
47
48
49
50    public override void Begin()
51    {
52        LuoKentta();
53
54        Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(-1000, 0));
55        Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(1000, 0));
56        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, 1000));
57        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaa, null, pelaaja1, new Vector(0, -1000));
58        Keyboard.Listen(Key.RightControl, ButtonState.Down, AmmuAseella, null, pelaaja1);
59
60
61
62        Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(-1000, 0));
63        Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(1000, 0));
64        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, 1000));
65        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, -1000));
66        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaaja2);
67
68        ControllerThree.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(-1000, 0));
69        ControllerThree.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(1000, 0));
70        ControllerThree.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, 1000));
71        ControllerThree.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, pelaaja2, new Vector(0, -1000));
72        ControllerThree.Listen(Button.A, ButtonState.Down, AmmuAseella, null, pelaaja2);
73
74        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
75        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
76
77        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, null, pelaaja3, new Vector(-1000, 0));
78        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, pelaaja3, new Vector(1000, 0));
79        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, pelaaja3, new Vector(0, 1000));
80        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, pelaaja3, new Vector(0, -1000));
81        ControllerOne.Listen(Button.A, ButtonState.Down, AmmuAseella, null, pelaaja3);
82
83        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, LiikutaPelaajaa, null, pelaaja4, new Vector(-1000, 0));
84        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, LiikutaPelaajaa, null, pelaaja4, new Vector(1000, 0));
85        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, pelaaja4, new Vector(0, 1000));
86        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaa, null, pelaaja4, new Vector(0, -1000));
87        ControllerTwo.Listen(Button.A, ButtonState.Down, AmmuAseella, null, pelaaja4);
88    }
89    class Rakennus : PhysicsObject
90    {
91        private IntMeter elamaLaskuri = new IntMeter(50, 0, 50);
92        public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
93
94        public Rakennus(double leveys, double korkeus)
95            : base(leveys, korkeus)
96        {
97            elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
98        }
99
100    }
101    Pelaaja Luopelaaja(Vector paikka, double leveys, double korkeus, Vector paikka2)
102    {
103        Pelaaja pelaaja = new Pelaaja(27, 27);
104        pelaaja.Position = paikka;
105        pelaaja.LinearDamping = 0.9;
106        Elamat = 3;
107        OnHidas = false;
108        KenganNumero = 42;
109        Rahat = 1000;
110        RespausKoordinaatit = Vector.Zero;
111        Vector pelaajanSuunta = Vector.FromLengthAndAngle(pyoriminenNopeus, pelaaja.Angle);
112        pelaaja.Push(pelaajanSuunta);
113        pelaaja.CanRotate = false;
114        pelaaja.Tag = "pelaaja";
115        AddCollisionHandler(pelaaja, "vihollinen", pelaajaosui);
116
117        LuoPistelaskuri(pelaaja, paikka2);
118
119        pelaaja.Ase = new AssaultRifle(0, 0);
120        pelaaja.Ase.ProjectileCollision = AmmusOsui;
121        pelaaja.Ase.CanHitOwner = false;
122        pelaaja.Ase.Power.DefaultValue = 150;
123        pelaaja.Ase.FireRate = 10;
124        pelaaja.Add(pelaaja.Ase);
125
126        Add(pelaaja);
127        return pelaaja;
128
129
130    }
131
132    void AmmuAseella(Pelaaja pelaaja)
133    {
134        if (pelaaja.IsDestroyed) return;
135
136        pelaaja.Ase.AbsoluteAngle = pelaaja.Velocity.Angle;
137        PhysicsObject ammus = pelaaja.Ase.Shoot();
138
139        if (ammus != null)
140        {
141            ammus.Size *= 1.3;
142            //ammus.Image = ...
143            ammus.MaximumLifetime = TimeSpan.FromSeconds(3.0);
144        }
145    }
146
147    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
148    {
149        ammus.Destroy();
150
151        if (kohde.Tag.Equals("zombi") || kohde.Tag.Equals("monster"))
152        {
153            kohde.Destroy();
154            ((Pelaaja)pelaaja1).PisteLaskuri.Value += 5;
155
156        }
157    }
158
159    void LiikutaPelaajaa(PhysicsObject pelaaja, Vector vektori)
160    {
161        pelaaja.Push(vektori);
162    }
163
164
165    void LuoKentta()
166    {
167        ColorTileMap ruudut = ColorTileMap.FromLevelAsset("map");
168        ruudut.SetTileMethod(Color.FromHexCode("0019FF"), LuoPelaaja1);
169        ruudut.SetTileMethod(Color.FromHexCode("0019FF"), LuoPelaaja2);
170        // ruudut.SetTileMethod(Color.Yellow, LuoTahti);
171        ruudut.SetTileMethod(Color.FromHexCode("00FF4C"), LuoPelaaja3);
172        ruudut.SetTileMethod(Color.FromHexCode("D86800"), LuoPelaaja4);
173        ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoSeina);
174        ruudut.SetTileMethod(Color.FromHexCode("FA00FF"), LuoSyotava);
175        ruudut.SetTileMethod(Color.FromHexCode("AD77FF"), luomonster);
176        ruudut.SetTileMethod(Color.FromHexCode("3AFFC0"), luozombi);
177        ruudut.SetTileMethod(Color.FromHexCode("FFA191"), alempirakennus);
178        ruudut.SetTileMethod(Color.FromHexCode("FFF60C"), Paarakennus);
179        ruudut.Execute(30, 30);
180        Camera.ZoomFactor = 0.59;
181    }
182    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
183    {
184        pelaaja1 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Left + 400, Screen.Top - 500));
185        pelaaja1.Image = kpelaaja1;
186    }
187
188    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
189    {
190        pelaaja2 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Right - 400, Screen.Top - 500));
191        pelaaja2.Image = kpelaaja2;
192
193    }
194    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
195    {
196        pelaaja3 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Left + 400, Screen.Bottom + 500));
197        pelaaja3.Image = kpelaaja3;
198    }
199    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
200    {
201        pelaaja4 = Luopelaaja(paikka, leveys, korkeus, new Vector(Screen.Right - 400, Screen.Bottom + 500));
202        pelaaja4.Image = kpelaaja4;
203    }
204    void LuoSeina(Vector paikka, double leveys, double korkeus)
205    {
206        PhysicsObject seina = new PhysicsObject(30, 30);
207
208        seina.Position = paikka;
209        seina.MakeStatic();
210        seina.Color = Color.Black;
211        seina.Tag = "seina";
212
213
214        Add(seina);
215    }
216    void LuoSyotava(Vector paikka, double leveys, double korkeus)
217    {
218        Timer aikaLaskuri = new Timer();
219        aikaLaskuri.Interval = 10;
220        aikaLaskuri.Timeout += delegate
221        {
222            const int RUUDUN_KOKO = 40;
223
224            PhysicsObject syotava = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
225
226            syotava.Position = paikka;
227            syotava.Tag = "vihollinen";
228            syotava.Image = Points;
229
230
231            syotava.Color = Color.Blue;
232            LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
233            labyrinttiAivot.Speed = 200.0;
234            labyrinttiAivot.LabyrinthWallTag = "seina";
235            syotava.LifetimeLeft = TimeSpan.FromSeconds(100.0);
236
237            syotava.Brain = labyrinttiAivot;
238            Add(syotava);
239        };
240        aikaLaskuri.Start();
241    }
242
243
244    void pelaajaosui(PhysicsObject pelaaja1, PhysicsObject kohde)
245    {
246        if (kohde.Tag.Equals("vihollinen"))
247        {
248            kohde.Destroy();
249
250            ((Pelaaja)pelaaja1).PisteLaskuri.Value += 10;
251
252        }
253    }
254    Label LuoPistelaskuri(Pelaaja pelaaja, Vector paikka)
255    {
256        Label pisteNaytto = new Label(pelaaja.PisteLaskuri);
257        pisteNaytto.TextColor = Color.Yellow;
258        pisteNaytto.Color = Color.Black;
259        pisteNaytto.Title = "Pisteet";
260        pisteNaytto.Position = paikka;
261        Add(pisteNaytto);
262        return pisteNaytto;
263    }
264
265
266    //MessageDisplay.Add("Pelaaja 1 hävisi pelin.");
267
268    void luomonster(Vector paikka, double leveys, double korkeus)
269    {
270        Timer aikaLaskuri = new Timer();
271        aikaLaskuri.Interval = 7;
272        aikaLaskuri.Timeout += delegate
273        {
274            PhysicsObject monster = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
275
276            monster.Position = paikka;
277            monster.Tag = "monster";
278            monster.Image = vihu5;
279            monster.Color = Color.Red;
280            LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
281            labyrinttiAivot.Speed = 150.0;
282            monster.LifetimeLeft = TimeSpan.FromSeconds(20.0);
283            AddCollisionHandler(monster, "pelaaja", pelaajaosui2);
284            labyrinttiAivot.LabyrinthWallTag = "seina";
285            monster.Brain = labyrinttiAivot;
286            Add(monster);
287        };
288        aikaLaskuri.Start();
289        //const int RUUDUN_KOKO = 40;
290    }
291    void pelaajaosui2(PhysicsObject monster, PhysicsObject kohde)
292    {
293        if (kohde.Tag.Equals("pelaaja"))
294        {
295            kohde.Destroy();
296         
297
298            ((Pelaaja)kohde).PisteLaskuri.Value -= 1/100;
299
300        }
301    }
302    void luozombi(Vector paikka, double leveys, double korkeus)
303    {
304        Timer aikaLaskuri = new Timer();
305        aikaLaskuri.Interval = 40;
306        aikaLaskuri.Timeout += delegate
307        {
308            PhysicsObject zombi = new PhysicsObject(17,17);
309
310            zombi.Position = paikka;
311            zombi.Tag = "zombi";
312
313
314           
315            LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(RUUDUN_KOKO);
316            labyrinttiAivot.Speed = 70.0;
317            zombi.Image = zzombi;
318            zombi.LifetimeLeft = TimeSpan.FromSeconds(80.0);
319            AddCollisionHandler(zombi, "pelaaja", pelaajaosui2);
320            labyrinttiAivot.LabyrinthWallTag = "seina";
321            zombi.Brain = labyrinttiAivot;
322            Add(zombi);
323        };
324        aikaLaskuri.Start();
325
326
327    }
328
329
330    void alempirakennus(Vector paikka, double leveys, double korkeus)
331    {
332        Rakennus rakennus = new Rakennus(leveys, korkeus);
333        rakennus.Position = paikka;
334        rakennus.MakeStatic();
335        rakennus.Color = Color.Brown;
336        rakennus.Tag = "rakennus";
337        Add(rakennus);
338
339
340
341    }
342
343    void luovihu(Vector paikka, double leveys, double korkeus)
344    {
345        PhysicsObject vihu = new PhysicsObject(RUUDUN_KOKO / 3, RUUDUN_KOKO / 3);
346
347        vihu.Position = paikka;
348        vihu.Tag = "vihu";
349    }
350
351    void Paarakennus(Vector paikka, double leveys, double korkeus)
352    {
353        PhysicsObject rakennus1 = new PhysicsObject(leveys, korkeus);
354        rakennus1.Position = paikka;
355        rakennus1.MakeStatic();
356        rakennus1.Color = Color.Yellow;
357        rakennus1.Tag = "rakennus1";
358        Add(rakennus1);
359
360    }
361}
362
363
364
365
366
367
Note: See TracBrowser for help on using the repository browser.