source: 2012/24/AkiR/Fight the Rambo/Fight the Rambo/Fight the Rambo/Peli.cs @ 2959

Revision 2959, 13.9 KB checked in by akosrahi, 9 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9
10public class Peli : PhysicsGame
11{
12    const double nopeus = 300;
13    const double hyppyNopeus = 750;
14    const int RUUDUN_KOKO = 30;
15    PlatformCharacter pelaaja1;
16    GameObject pelaajanpaikka;
17    PlatformCharacter vihollinen;
18    PlatformCharacter Maali;
19    PlatformCharacter Piikkilanka;
20    List<Label> valikonKohdat;
21    IntMeter ammusLaskuri;
22    Image tekstinkuva = LoadImage("TEKSTI");
23    Image piikkilangankuva = LoadImage("spikewire");
24    Image pelaajanKuva = LoadImage("rambo2");
25    Image vihollisenkuva = LoadImage("Nuhasotilas");
26    Image maalinkuva = LoadImage("goal");
27    Image LisaaPelaaajanKentallekuvan = LoadImage("sponer");
28    Image maankuva = LoadImage("ground");
29    Image aidankuva = LoadImage("fence");
30    Image AmmuksenKuva = LoadImage("Ammus");
31   
32
33    Image paikallaanVasemmalle = LoadImage("rambo2");
34    Image paikallaanOikealle;
35    Image[] kavelyVasemmalle = LoadImages("rambo2");
36    Image[] kavelyOikealle;
37
38    Image VihollinenpaikallaanVasemmalle = LoadImage("Nuhasotilas");
39    Image VihollinenpaikallaanOikealle;
40    Image[] VihollinenKavelyVasemmalle = LoadImages("Nuhasotilas");
41    Image[] VihollinenKavelyOikealle;
42
43    int kenttaNro = 1;
44
45    public override void Begin()
46    {
47
48        ClearAll();
49        Valikko();
50
51
52        paikallaanOikealle = Image.Mirror(paikallaanVasemmalle);
53        kavelyOikealle = Image.Mirror(kavelyVasemmalle);
54
55        VihollinenpaikallaanOikealle = Image.Mirror(VihollinenpaikallaanVasemmalle);
56        VihollinenKavelyOikealle = Image.Mirror(VihollinenKavelyVasemmalle);
57       
58    }
59
60    void SeuraavaKentta(int kentanNro)
61    {
62        ClearAll();
63        Gravity = new Vector(0, -1000);
64        MediaPlayer.Play("GameStarts");
65        if (kentanNro == 1) luoKentta1();
66        else if (kentanNro == 2) LuoKentta2();
67        else if (kentanNro == 3) LuoKentta3();
68        else if (kentanNro > 3) LuoKentta4();
69        else if (kentanNro > 4) Valikko();
70        lisaaNappaimet();
71        LuoAmmusLaskuri();
72        Camera.Follow(pelaaja1);
73        Camera.ZoomFactor = 2.0;
74        Camera.StayInLevel = true;
75
76
77    }
78
79    void luoKentta1()
80    {
81        lisaaPelaaja(20);
82   
83        TileMap kentta = TileMap.FromFile("kentta1.txt");
84        kentta['G'] = lisaaMaali;
85        kentta['E'] = lisaaVihollinen;
86        kentta['#'] = lisaaTaso;
87        kentta['N'] = lisaapelaajanPaikka;
88        kentta['S'] = LisaaPiikkilanka;
89        kentta['M'] = Lisaamaa;
90        kentta['F'] = LisaaAita;
91        kentta['A'] = LisaaAmmusPaketti;
92        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
93
94        pelaaja1.Position = pelaajanpaikka.Position;
95
96        Level.CreateBorders();
97        Level.Background.CreateGradient(Color.Brown, Color.Blue);
98    }
99    void LuoKentta2()
100    {
101        lisaaPelaaja(20);
102
103        TileMap kentta = TileMap.FromFile("TextFile2.txt");
104        kentta['G'] = lisaaMaali;
105        kentta['E'] = lisaaVihollinen;
106        kentta['#'] = Lisaamaa;
107        kentta['N'] = lisaapelaajanPaikka;
108        kentta['S'] = LisaaPiikkilanka;
109        kentta['F'] = LisaaAita;
110        kentta['A'] = LisaaAmmusPaketti;
111        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
112
113        pelaaja1.Position = pelaajanpaikka.Position;
114
115        Level.CreateBorders();
116        Level.Background.CreateGradient(Color.Brown, Color.Blue);
117    }
118   
119
120    void LuoKentta3()
121    {
122        lisaaPelaaja(20);
123
124        TileMap kentta = TileMap.FromFile("TextFile3.txt");
125        kentta['G'] = lisaaMaali;
126        kentta['E'] = lisaaVihollinen;
127        kentta['#'] = Lisaamaa;
128        kentta['N'] = lisaapelaajanPaikka;
129        kentta['S'] = LisaaPiikkilanka;
130        kentta['F'] = LisaaAita;
131        kentta['A'] = LisaaAmmusPaketti;
132        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
133
134        pelaaja1.Position = pelaajanpaikka.Position;
135
136        Level.CreateBorders();
137        Level.Background.CreateGradient(Color.Brown, Color.Blue);
138    }
139    void LuoKentta4()
140    {
141        lisaaPelaaja(20);
142
143        TileMap kentta = TileMap.FromFile("TextFile1.txt");
144        kentta['G'] = lisaaMaali;
145        kentta['E'] = lisaaVihollinen;
146        kentta['#'] = Lisaamaa;
147        kentta['N'] = lisaapelaajanPaikka;
148        kentta['S'] = LisaaPiikkilanka;
149        kentta['F'] = LisaaAita;
150        kentta['A'] = LisaaAmmusPaketti;
151        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
152
153        pelaaja1.Position = pelaajanpaikka.Position;
154
155        Level.CreateBorders();
156        Level.Background.CreateGradient(Color.Blue, Color.Black);
157    }
158    GameObject lisaapelaajanPaikka()
159    {
160        pelaajanpaikka = new GameObject(100, 150);
161        pelaajanpaikka.Image = LisaaPelaaajanKentallekuvan;
162        return pelaajanpaikka;
163    }
164
165    PhysicsObject lisaaTaso()
166    {
167        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
168        taso.Color = Color.Black;
169        return taso;
170    }
171
172    PlatformCharacter lisaaPelaaja(int ammukset)
173    {
174        pelaaja1 = new PlatformCharacter(40, 60);
175        pelaaja1.Mass = 4.0;
176        pelaaja1.Image = pelaajanKuva;
177
178        pelaaja1.Weapon = new AssaultRifle(50, 20);
179        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
180        pelaaja1.Weapon.Ammo.Value = ammukset;
181        pelaaja1.Weapon.Y = -5;
182        pelaaja1.Weapon.X = 0.5;
183
184        pelaaja1.RightIdleAnimation = new Animation(paikallaanVasemmalle);
185        pelaaja1.LeftIdleAnimation = new Animation(paikallaanOikealle);
186        pelaaja1.RightWalkingAnimation = new Animation(kavelyVasemmalle);
187        pelaaja1.LeftWalkingAnimation = new Animation(kavelyOikealle);
188        Add(pelaaja1, 1);
189
190        return pelaaja1;
191    }
192
193    void lisaaNappaimet()
194    {
195        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
196        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Poistu pelistä");
197
198        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
199        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, nopeus);
200        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
201        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu");
202        Keyboard.Listen(Key.W, ButtonState.Down, TahtaaYlos, "Tähtää ylös rynnäkkökiväärillä");
203        Keyboard.Listen(Key.S, ButtonState.Down, TahtaaAlas, "Tähtää alas rynnäkkökiväärillä");
204    }
205
206    void liikuta(PlatformCharacter hahmo, double nopeus)
207    {
208        hahmo.Walk(nopeus);
209    }
210
211    void hyppaa(PlatformCharacter hahmo, double nopeus)
212    {
213        hahmo.Jump(nopeus);
214    }
215
216
217
218    void AmmuAseella()
219    {
220            PhysicsObject Ammus = pelaaja1.Weapon.Shoot();
221            if (Ammus != null)
222            {
223                Ammus.Size *= 1;
224                Ammus.IgnoresGravity = true;
225                Ammus.MaximumLifetime = TimeSpan.FromSeconds(3.1);
226                AddCollisionHandler(Ammus, KasitteleVihollinenKuoli);
227            }
228    }
229    void AmmusOsui(PhysicsObject Ammus, PhysicsObject Kohde)
230    {
231        Ammus.Destroy();
232        Explosion rajahdys = new Explosion(50);
233        rajahdys.Position = Ammus.Position;
234
235    }
236
237   
238   
239
240
241    PlatformCharacter lisaaVihollinen()
242    {
243        PlatformCharacter vihollinen = new PlatformCharacter(40, 80);
244        vihollinen.Mass = 0.05;
245        vihollinen.Image = vihollisenkuva;
246        vihollinen.Tag = ("vihollinen");
247        vihollinen.IgnoresGravity = false;
248
249        vihollinen.LeftIdleAnimation = new Animation(VihollinenpaikallaanVasemmalle);
250        vihollinen.RightIdleAnimation = new Animation(VihollinenpaikallaanOikealle);
251        vihollinen.LeftWalkingAnimation = new Animation(VihollinenKavelyVasemmalle);
252        vihollinen.RightWalkingAnimation = new Animation(VihollinenKavelyOikealle);
253        vihollinen.CanMoveOnAir = true;
254
255
256
257        FollowerBrain seuraajanAivot = new FollowerBrain();
258        seuraajanAivot.Target = pelaaja1;
259        seuraajanAivot.Speed = 100;
260        seuraajanAivot.StopWhenTargetClose = false;
261        seuraajanAivot.TargetFollowDistance = 50;
262        seuraajanAivot.FollowAlways = true;
263        seuraajanAivot.Active = true;
264        vihollinen.Brain = seuraajanAivot;
265
266        AddCollisionHandler(vihollinen, VihollinenOsui);
267        return vihollinen;
268    }
269
270    void VihollinenOsui(PhysicsObject vihollinen, PhysicsObject kohde)
271    {
272        if (kohde == pelaaja1)
273        {
274            Explosion rajahdys = new Explosion(100);
275            rajahdys.Position = pelaaja1.Position;
276            Add(rajahdys);
277            rajahdys.Speed = 250.0;
278            rajahdys.Force = 10000;
279            rajahdys.ShockwaveColor = Color.Red;
280            pelaaja1.Destroy();
281            Begin();
282        }
283    }
284    void KasitteleVihollinenKuoli(PhysicsObject Ammus, PhysicsObject kohde)
285    {
286        if (kohde.Tag.ToString() == "vihollinen")
287        {
288            MediaPlayer.Play("kill");
289            kohde.Destroy();
290
291        }
292
293    }
294    PhysicsObject lisaaMaali()
295    {
296        PhysicsObject Maali = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
297        Maali.Image = maalinkuva;
298        AddCollisionHandler(Maali, KasitteleMaaliinTulo);
299        return Maali;
300
301    }
302
303    PhysicsObject LisaaAmmusPaketti()
304    {
305       PhysicsObject AmmusPaketti = new PhysicsObject(20, 20);
306        AmmusPaketti.Image = AmmuksenKuva;
307       AddCollisionHandler(pelaaja1, AmmusPaketti, KeraaAmmus);
308
309        return AmmusPaketti;
310
311    }
312
313    void KeraaAmmus(IPhysicsObject pelaaja1, IPhysicsObject AmmusPaketti)
314    {
315        (pelaaja1 as PlatformCharacter).Weapon.Ammo.Value += 5;
316        AmmusPaketti.Destroy();
317       
318    }
319
320   
321
322    void KasitteleMaaliinTulo(PhysicsObject Maali, PhysicsObject kohde)
323    {
324        if (kohde == pelaaja1)
325        {
326            kenttaNro++;
327            SeuraavaKentta(kenttaNro);
328        }
329    }
330    void Valikko()
331    {
332        ClearAll();
333
334        Level.Background.Image = tekstinkuva;
335        valikonKohdat = new List<Label>();
336
337        Label kohta1 = new Label("Aloita kenttä");
338        kohta1.Position = new Vector(300, -20);
339        valikonKohdat.Add(kohta1);
340
341        Label kohta2 = new Label("Lopeta");
342        kohta2.Position = new Vector(300, -60);
343        valikonKohdat.Add(kohta2);
344        MediaPlayer.Play("the_matrix_-_theme_song_clubbed_to_death-gt3OptaZ20Q_fmt34");
345
346        foreach (Label valikonKohta in valikonKohdat)
347        {
348            Add(valikonKohta);
349        }
350
351        Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, SeuraavaKentta, null, kenttaNro);
352        Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Exit, null);
353
354        Mouse.IsCursorVisible = true;
355        Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null);
356        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "");
357    }
358
359    void ValikossaLiikkuminen(AnalogState hiirenTila)
360    {
361        foreach (Label kohta in valikonKohdat)
362        {
363            if (Mouse.IsCursorOn(kohta))
364            {
365                kohta.TextColor = Color.Yellow;
366            }
367            else
368            {
369                kohta.TextColor = Color.YellowGreen;
370            }
371
372        }
373    }
374    void AloitaPeli()
375    {
376        ClearAll();
377        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Valikko, "Palaa valikkoon");
378
379    }
380    PhysicsObject LisaaPiikkilanka()
381    {
382        PhysicsObject Piikkilanka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
383        Piikkilanka.Image = piikkilangankuva;
384        AddCollisionHandler(Piikkilanka, PiikkilankaanTormays);
385        return Piikkilanka;
386    }
387
388    PhysicsObject Lisaamaa()
389    {
390        PhysicsObject maa = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
391        maa.Image = maankuva;
392        return maa;
393    }
394
395    PhysicsObject LisaaAita()
396    {
397        PhysicsObject Aita = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
398        Aita.Image = aidankuva;
399        Aita.IgnoresCollisionResponse = true;
400        //Add(Aita, -2);
401        return Aita;
402    }
403
404    void PiikkilankaanTormays(PhysicsObject Piikkilanka, PhysicsObject kohde)
405    {
406        if (kohde == pelaaja1)
407        {
408            Explosion rajahdys = new Explosion(100);
409            rajahdys.Position = pelaaja1.Position;
410            Add(rajahdys);
411            rajahdys.Speed = 250.0;
412            rajahdys.Force = 10000;
413            rajahdys.ShockwaveColor = Color.Red;
414            kohde.Destroy();
415            Begin();
416
417        }
418    }
419
420    void TahtaaYlos()
421    {
422        if (pelaaja1.FacingDirection == Direction.Right)
423        {
424            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
425        }
426        if (pelaaja1.FacingDirection == Direction.Left)
427        {
428            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
429        }
430    }
431
432    void TahtaaAlas()
433    {
434        if (pelaaja1.FacingDirection == Direction.Right)
435        {
436            pelaaja1.Weapon.Angle += Angle.FromDegrees(-6);
437        }
438        if (pelaaja1.FacingDirection == Direction.Left)
439        {
440            pelaaja1.Weapon.Angle += Angle.FromDegrees(6);
441        }
442    }
443
444    void LuoAmmusLaskuri()
445    {
446        ammusLaskuri = new IntMeter(0);
447
448        Label ammusNaytto = new Label();
449        ammusNaytto.X = Screen.Right - 100;
450        ammusNaytto.Y = Screen.Top - 100;
451        ammusNaytto.TextColor = Color.Gray;
452        ammusNaytto.BindTo(pelaaja1.Weapon.Ammo);     
453        Add(ammusNaytto);
454
455        Label ammusTeksti = new Label("Ammuksia jäljellä: ");
456        ammusTeksti.X = Screen.Right - 200;
457        ammusTeksti.Y = Screen.Top - 100;
458        ammusTeksti.TextColor = Color.Gray;
459        Add(ammusTeksti);
460
461    }
462}
Note: See TracBrowser for help on using the repository browser.