source: 2010/27/jomiilri/Duel/Peli.cs @ 10337

Revision 1237, 10.7 KB checked in by jomiilri, 11 years ago (diff)
Line 
1using System;
2using Jypeli;
3using Jypeli.Widgets;
4using Jypeli.Assets;
5
6public class Peli : PhysicsGame
7{
8    PhysicsObject p1;
9    PhysicsObject p2;
10
11    Timer ammusAjastin;
12
13    IntMeter elamaLaskuri1;
14    IntMeter elamaLaskuri2;
15
16    AssaultRifle konekivaari1;
17    AssaultRifle konekivaari2;
18
19    double tyontovoima = 400;
20    const int ruudunLeveys = 32;
21    const int ruudunKorkeus = 32;
22
23    SoundEffect ampumaAani;
24   
25
26    protected override void Begin()
27    {
28        MediaPlayer.Play("Go on (You can)");
29        ampumaAani = LoadSoundEffect("rifle_single_shot1");   
30
31        konekivaari1 = new AssaultRifle(20, 5);
32        konekivaari2 = new AssaultRifle(20, 5);
33        konekivaari1.Ammo.Value = 100;
34        konekivaari2.Ammo.Value = 100;
35        konekivaari1.Ammo.MaxValue = 250;
36        konekivaari2.Ammo.MaxValue = 250;
37        konekivaari1.BulletCollision = LuotiOsuu;
38        konekivaari2.BulletCollision = LuotiOsuu;
39
40
41        LuoKentta();
42        LuoElamaLaskuri1();
43        LuoElamaLaskuri2();
44        LuoAmmusLaskuri1();
45        LuoAmmusLaskuri2();
46        LuoAmmusLaatikkoAjastin();
47
48        Camera.ZoomToLevel();
49
50        AloitaPeli();
51
52        SetWindowSize(1024, 768, false);
53
54        p1 = LuoHahmo1();
55        p1.LinearDamping = 0.95;
56        p1.Restitution = 0.05;
57        p1.X = Level.Right - 115;
58        p1.Y = Level.Top - 600;
59        Add(p1);
60
61        p2 = LuoHahmo2();
62        p2.LinearDamping = 0.95;
63        p2.Restitution = 0.05;
64        p2.X = Level.Left + 115;
65        p2.Y = Level.Top - 105;
66        Add(p2);
67
68        LuoOhjaimet();
69    }
70
71    void AloitaPeli()
72    {
73        GameObject alareuna = Level.CreateBottomBorder();
74        GameObject ylareuna = Level.CreateTopBorder();
75        GameObject vasenreuna = Level.CreateLeftBorder();
76        GameObject oikeareuna = Level.CreateRightBorder();
77        alareuna.Image = LoadImage("tausta1");
78        ylareuna.Image = LoadImage("tausta1");
79        vasenreuna.Image = LoadImage("tausta1");
80        oikeareuna.Image = LoadImage("tausta1");
81
82        Level.Background.Image = LoadImage("taustakuva1");
83        Level.Background.FitToLevel();
84    }
85
86    void LuoKentta()
87    {
88        TileMap ruudut = TileMap.FromFile("TextFile1.txt");
89        ruudut['I'] = LuoSeina;
90        ruudut['*'] = LuoAmmusLaatikko;
91        ruudut.Insert(ruudunLeveys, ruudunKorkeus);
92    }
93
94    PhysicsObject LuoSeina()
95    {
96        PhysicsObject seina = PhysicsObject.CreateStaticObject(32.0, 32.0);
97        seina.Shape = Shapes.Rectangle;
98        seina.Image = LoadImage("tausta1");
99
100        return seina;
101    }
102
103    PhysicsObject LuoHahmo1()
104    {
105        PhysicsObject ukko = new PhysicsObject(32, 32);
106        ukko.Image = LoadImage("pelaaja1");
107        ukko.Add(konekivaari1);
108        ukko.Tag = "p1";
109
110        return ukko;
111    }
112
113    PhysicsObject LuoHahmo2()
114    {
115        PhysicsObject ukko = new PhysicsObject(32, 32);
116        ukko.Image = LoadImage("pelaaja2");
117        ukko.Add(konekivaari2);
118        ukko.Tag = "p2";
119
120        return ukko;
121    }
122
123    void LiikutaPelaajaa(PhysicsObject pelaaja)
124    {
125        Vector tyonto = Vector.FromLengthAndAngle(tyontovoima, pelaaja.Angle);
126        pelaaja.Push(tyonto);
127    }
128
129    void LiikutaPelaajaaTaakse(PhysicsObject pelaaja)
130    {
131        Vector taakse = Vector.FromLengthAndAngle(-tyontovoima, pelaaja.Angle);
132        pelaaja.Push(taakse);
133    }
134
135    void LuoOhjaimet()
136    {
137        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
138        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
139
140
141        Keyboard.Listen(Key.Left, ButtonState.Down, KaannaPelaajaa, null, 3, p1);
142        Keyboard.Listen(Key.Right, ButtonState.Down, KaannaPelaajaa, null, -3, p1);
143        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, p1);
144        Keyboard.Listen(Key.Up, ButtonState.Released, PysaytaPelaaja, null, p1);
145        Keyboard.Listen(Key.Down, ButtonState.Down, LiikutaPelaajaaTaakse, null, p1);
146        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu", p1, konekivaari1);
147
148        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, KaannaPelaajaa, null, 3, p1);
149        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, KaannaPelaajaa, null, -3, p1);
150        ControllerOne.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, p1);
151        ControllerOne.Listen(Button.DPadUp, ButtonState.Released, PysaytaPelaaja, null, p1);
152        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaaTaakse, null, p1);
153        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", p1, konekivaari1);
154
155        Keyboard.Listen(Key.A, ButtonState.Down, KaannaPelaajaa, null, 3, p2);
156        Keyboard.Listen(Key.D, ButtonState.Down, KaannaPelaajaa, null, -3, p2);
157        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, p2);
158        Keyboard.Listen(Key.W, ButtonState.Released, PysaytaPelaaja, null, p2);
159        Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaaTaakse, null, p2);
160        Keyboard.Listen(Key.LeftControl, ButtonState.Down, Ammu, "Ammu", p2, konekivaari2);
161
162        ControllerTwo.Listen(Button.DPadLeft, ButtonState.Down, KaannaPelaajaa, null, 3, p2);
163        ControllerTwo.Listen(Button.DPadRight, ButtonState.Down, KaannaPelaajaa, null, -3, p2);
164        ControllerTwo.Listen(Button.DPadUp, ButtonState.Down, LiikutaPelaajaa, null, p2);
165        ControllerTwo.Listen(Button.DPadUp, ButtonState.Released, PysaytaPelaaja, null, p2);
166        ControllerTwo.Listen(Button.DPadDown, ButtonState.Down, LiikutaPelaajaaTaakse, null, p2);
167        ControllerTwo.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", p2, konekivaari2);
168    }
169
170    void Ammu(PhysicsObject ampuja, Weapon ase)
171    {
172        PhysicsObject ammus = ase.Shoot();
173        if (ammus != null)
174        {
175            ammus.Tag = ampuja;
176        }
177        //MediaPlayer.Play("rifle_single_shot");       
178        ampumaAani.Play();
179    }
180
181    void KaannaPelaajaa(int kulma, PhysicsObject pelaaja)
182    {
183        pelaaja.Angle += Angle.Degrees(kulma);
184    }
185
186    void PysaytaPelaaja(PhysicsObject pelaaja)
187    {
188        pelaaja.Stop();
189    }
190
191    void LuotiOsuu(PhysicsObject luoti, PhysicsObject seina)
192    {
193        if (luoti.Tag != seina)
194        {
195            if (seina.Tag.ToString() == "p2")
196            {
197                elamaLaskuri1.Value = elamaLaskuri1.Value - 4;
198            }
199            if (seina.Tag.ToString() == "p1")
200            {
201                elamaLaskuri2.Value = elamaLaskuri2.Value - 4;
202            }
203            luoti.Destroy();
204
205            if (elamaLaskuri1.Value <= 0)
206            {
207                PelaajaKuolee(1);
208            }
209
210            if (elamaLaskuri2.Value <= 0)
211            {
212                PelaajaKuolee(2);
213            }
214        }
215
216    }
217
218    void LuoElamaLaskuri1()
219    {
220        elamaLaskuri1 = new IntMeter(100);
221
222        Label elamaNaytto1 = new Label();
223        elamaNaytto1.X = Level.Left + 100;
224        elamaNaytto1.Y = Level.Bottom - 5;
225        elamaNaytto1.TextColor = Color.Red;
226
227        elamaNaytto1.BindTo(elamaLaskuri1);
228        Add(elamaNaytto1);
229    }
230
231    void LuoElamaLaskuri2()
232    {
233        elamaLaskuri2 = new IntMeter(100);
234
235        Label elamaNaytto2 = new Label();
236        elamaNaytto2.X = Level.Right - 100;
237        elamaNaytto2.Y = Level.Bottom - 5;
238        elamaNaytto2.TextColor = Color.Red;
239
240        elamaNaytto2.BindTo(elamaLaskuri2);
241        Add(elamaNaytto2);
242    }
243
244    void LuoAmmusLaskuri1()
245    {
246        Label ammusNaytto1 = new Label();
247        ammusNaytto1.X = Level.Left + 200;
248        ammusNaytto1.Y = Level.Bottom - 5;
249        ammusNaytto1.TextColor = Color.Black;
250
251        ammusNaytto1.BindTo(konekivaari2.Ammo);
252        Add(ammusNaytto1);
253    }
254
255    void LuoAmmusLaskuri2()
256    {
257        Label ammusNaytto2 = new Label();
258        ammusNaytto2.X = Level.Right - 200;
259        ammusNaytto2.Y = Level.Bottom - 5;
260        ammusNaytto2.TextColor = Color.Black;
261
262        ammusNaytto2.BindTo(konekivaari1.Ammo);
263        Add(ammusNaytto2);
264    }
265
266    PhysicsObject LuoAmmusLaatikko()
267    {
268        PhysicsObject ammusLaatikko = new PhysicsObject(18, 12);
269        ammusLaatikko.Image = LoadImage("ammuslaatikko1");
270        //Add(ammusLaatikko);
271        AddCollisionHandler(ammusLaatikko, LisaaAmmuksia);
272        ammusLaatikko.IgnoresCollisionResponse = true;
273        return ammusLaatikko;
274    }
275
276    void LisaaAmmuksia(PhysicsObject ammusLaatikko, PhysicsObject kohde)
277    {
278        if (kohde == p1 && konekivaari1.Ammo.Value < 250)
279        {
280            konekivaari1.Ammo.Value += 50;
281            ammusLaatikko.Destroy();
282        }
283        if (kohde == p2 && konekivaari2.Ammo.Value < 250)
284        {
285            konekivaari2.Ammo.Value += 50;
286            ammusLaatikko.Destroy();
287        }
288    }
289
290    void LuoAmmusLaatikkoAjastin()
291    {
292        ammusAjastin = new Timer();
293        ammusAjastin.Interval = 10;
294        ammusAjastin.Trigger += LisaaAmmusLaatikoita;
295        Add(ammusAjastin);
296        ammusAjastin.Start();
297
298    }
299
300    void LisaaAmmusLaatikoita(Timer sender)
301    {
302        PhysicsObject laatikko = LuoAmmusLaatikko();
303        laatikko.X = RandomGen.NextDouble(Level.Left + 50, Level.Right - 50);
304        laatikko.Y = RandomGen.NextDouble(Level.Top - 50, Level.Bottom + 50);
305        Add(laatikko);
306    }
307
308    void PelaajaKuolee(int kumpiPelaaja)
309    {
310        if (kumpiPelaaja == 1)
311        {
312            PlaySound("scream_hyva");
313            Timer kuolemaAj = KuolemaAjastin();
314            kuolemaAj.Trigger += SiirraPelaaja1Alkuun;
315            //p2.Destroy();
316            p1.IsVisible = false;
317            NollaaLaskurit();
318        }
319        else
320        {
321            PlaySound("scream_hyva");
322            Remove(p1);
323        }
324
325        NollaaLaskurit();
326    }
327
328    void SiirraPelaaja1Alkuun(Timer sender)
329    {
330        p1.IsVisible = true;
331        p1.X = Level.Left + 115;
332        p1.Y = Level.Top - 105;
333        sender.Stop();
334
335    }
336
337    void SiirraPelaaja2Alkuun(Timer sender)
338    {
339        p2.IsVisible = true;
340        p2.X = Level.Left + 115;
341        p2.Y = Level.Top - 105;
342        //Add(p2);
343    }
344
345    void NollaaLaskurit()
346    {
347        elamaLaskuri1.Value = 100;
348        elamaLaskuri2.Value = 100;
349        // Aseitten Ammo myös täyteen...
350
351    }
352
353    Timer KuolemaAjastin()
354    {
355        Timer kuolemaAjastin = new Timer();
356        kuolemaAjastin.Interval = 3;
357        //kuolemaAjastin.Trigger += SiirraPelaajaAlkuun;
358        Add(kuolemaAjastin);
359        kuolemaAjastin.Start();
360        return kuolemaAjastin;
361    }
362}
Note: See TracBrowser for help on using the repository browser.