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

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