source: 2011/24/LauriK/Call of garden Modern carrotfare 2/Call of garden Modern carrotfare 2/Peli.cs @ 2032

Revision 2032, 10.9 KB checked in by lavevake, 10 years ago (diff)

Call of garden Modern carrotfare 2 pidemmällä jo...

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 1000;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter porkkana;
16    PhysicsObject hautakivi;
17    PhysicsObject kuolluttomaatti;
18    PhysicsObject lipas;
19
20    IntMeter panoslaskuri;
21    IntMeter pistelaskuri;
22
23    Image[] pelaajanKuva = LoadImages("porkkana");
24    Image[] pelaajanKuvaPeilattu;
25
26    Image pelaajanKuvaKuolleena = LoadImage("rip");
27   
28    Image[] vihollisenKuva = LoadImages("tomaatti");
29    Image[] vihollisenKuvaPeilattu;
30   
31    Image vihollisenKuvaKuolleena = LoadImage("tomaattikuolleena");
32
33    Image lippaanKuva = LoadImage("Lipas2");
34
35    ExplosionSystem rajahdys;
36    int pMaxMaara = 50;
37
38    public override void Begin()
39    {
40        ClearAll();
41       
42        pelaajanKuvaPeilattu = Image.Mirror(pelaajanKuva);
43        vihollisenKuvaPeilattu = Image.Mirror(vihollisenKuva);
44
45       
46        Gravity = new Vector(0, -1000);
47
48        luoKentta();
49        lisaaNappaimet();
50
51        Camera.Follow(porkkana);
52       
53        Camera.ZoomFactor = 1.2;
54        Camera.StayInLevel = true;
55       
56        LuoPanosLaskuri();
57        LuoPisteLaskuri();
58    }
59
60    void luoKentta()
61    {
62        TileMap kentta = TileMap.FromFile("kentta1.txt");
63        kentta['#'] = lisaaTaso;
64        kentta['K'] = lisaaTaso2;
65        kentta['N'] = lisaaPelaaja;
66        kentta['E'] = lisaaTomaatti;
67        kentta['L'] = LuoLipas;
68        kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO);
69        Level.CreateBorders();
70
71        rajahdys = new ExplosionSystem(LoadImage("rajahdys"), pMaxMaara);
72        rajahdys.MaxLifetime = 1.0;
73        rajahdys.MaxScale = 0.1;
74        Add(rajahdys);
75    }
76   
77    PhysicsObject lisaaTaso()
78    {
79        PhysicsObject taso = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
80        taso.Color = Color.Green;
81        return taso;
82    }
83
84    PhysicsObject lisaaTaso2()
85    {
86        PhysicsObject taso2 = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO);
87        taso2.Color = Color.Gray;
88        return taso2;
89    }
90
91    PlatformCharacter lisaaPelaaja()
92    {
93        porkkana = new PlatformCharacter(40, 40);
94        porkkana.Mass = 4.0;
95
96        porkkana.Weapon = new AssaultRifle(50, 30);
97        porkkana.Weapon.Ammo.Value = 10;
98        porkkana.Weapon.Y = -10;
99        porkkana.Weapon.X = 0;
100        porkkana.Weapon.ProjectileCollision = AmmusOsui;
101
102        AddCollisionHandler(porkkana, LippaaseenOsuma);
103
104        porkkana.RightWalkingAnimation = new Animation(pelaajanKuva);
105        porkkana.LeftWalkingAnimation = new Animation(pelaajanKuvaPeilattu);
106        return porkkana;
107    }
108
109    PlatformCharacter lisaaTomaatti()
110    {
111        PlatformCharacter tomaatti = new PlatformCharacter(40, 40);
112        tomaatti.Mass = 4.0;
113
114        tomaatti.Tag = "Vihollinen";
115
116        FollowerBrain SeuraajanAivot = new FollowerBrain();
117        tomaatti.Brain = SeuraajanAivot;
118        SeuraajanAivot.Target = porkkana;
119        SeuraajanAivot.Speed = 100;
120        SeuraajanAivot.TargetFollowDistance = 1000;
121        SeuraajanAivot.TargetCloseDistance = 50;
122        SeuraajanAivot.StopWhenTargetClose = false;
123        AddCollisionHandler(tomaatti, TomaattiOsui);
124
125        tomaatti.RightWalkingAnimation = new Animation(vihollisenKuva);
126        tomaatti.LeftWalkingAnimation = new Animation(vihollisenKuvaPeilattu);
127        return tomaatti;
128
129    }
130
131    void lisaaNappaimet()
132    {
133        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
134        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
135
136        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", porkkana, -nopeus);
137        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", porkkana, nopeus);
138        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", porkkana, hyppyNopeus);
139
140        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu rynnäkkökiväärillä");
141        Keyboard.Listen(Key.W, ButtonState.Down, TahtaaYlos, "Tähtää ylös rynnäkkökiväärillä");
142        Keyboard.Listen(Key.S, ButtonState.Down, TahtaaAlas, "Tähtää alas rynnäkkökiväärillä");
143        Keyboard.Listen(Key.Q, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti");
144
145        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Exit, "Poistu pelistä");
146        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
147       
148        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", porkkana, -nopeus);
149        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", porkkana, nopeus);
150        ControllerOne.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", porkkana, hyppyNopeus);
151
152        ControllerOne.Listen(Button.RightTrigger, ButtonState.Down, AmmuAseella, "Ammu rynnäkkökiväärillä");
153        ControllerOne.Listen(Button.DPadUp,ButtonState.Down, TahtaaYlos, "Tähtää ylös rynnäkkökiväärillä");
154        ControllerOne.Listen(Button.DPadDown, ButtonState.Down, TahtaaAlas, "Tähtää alas rynnäkkökiväärillä");
155        ControllerOne.Listen(Button.LeftTrigger, ButtonState.Pressed, HeitaKranaatti, "Heitä kranaatti");   
156    }
157
158    void liikuta(PlatformCharacter hahmo, double nopeus)
159    {
160        hahmo.Walk(nopeus);
161    }
162
163    void hyppaa(PlatformCharacter hahmo, double nopeus)
164    {
165        hahmo.Jump(nopeus);
166    }
167
168    void AmmuAseella()
169    {
170        PhysicsObject ammus = porkkana.Weapon.Shoot();
171
172
173        if (ammus != null)
174        {
175            ammus.Size *= 5;
176            ammus.MaximumLifetime = TimeSpan.FromSeconds(1.5);
177        }
178    }
179   
180    void TahtaaYlos()
181    {
182        if (porkkana.FacingDirection == Direction.Right)
183        {
184            porkkana.Weapon.Angle += Angle.FromDegrees(5);
185        }
186        if (porkkana.FacingDirection == Direction.Left)
187        {
188            porkkana.Weapon.Angle += Angle.FromDegrees(-5);
189        }
190
191
192    }
193   
194    void TahtaaAlas()
195    {
196        if (porkkana.FacingDirection == Direction.Right)
197        {
198            porkkana.Weapon.Angle += Angle.FromDegrees(-5);
199        }
200        if (porkkana.FacingDirection == Direction.Left)
201        {
202            porkkana.Weapon.Angle += Angle.FromDegrees(5);
203        }
204    }
205   
206    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
207    {
208
209        if (kohde.Tag.ToString() == "Vihollinen")
210        {
211            ammus.Destroy();
212            kohde.Brain = null;
213            TomaattiKuoli(kohde);
214            kohde.IgnoresCollisionResponse = true;
215            rajahdys.AddEffect(kohde.Position, 50);
216
217        }
218        if (kohde == porkkana)
219        {
220            LopetaPeli();
221        }
222
223    }
224           
225    void LopetaPeli()
226    {
227        porkkana.Stop();
228
229        porkkana.Destroy();
230
231        LuoHautakivi();
232     
233        Label lopetus = new Label();
234        lopetus.Position = Screen.Center;
235        lopetus.TextColor = Color.Red;
236        lopetus.Font = Font.DefaultLarge;
237        Add(lopetus);
238        lopetus.Text = "                                           Game over.\n" +
239        "Jos haluat aloittaa alusta, paina enter/A. Jos taas haluat lopettaa, paina Esc/start.";
240       
241        ClearControls();
242       
243        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä");
244        Keyboard.Listen(Key.Enter, ButtonState.Pressed, Begin, null);
245
246        ControllerOne.Listen(Button.A, ButtonState.Down, Begin, "Poistu pelistä");
247        ControllerOne.Listen(Button.Start, ButtonState.Down, Exit, null);
248    }
249   
250    void LuoHautakivi()
251    {
252        hautakivi = new PhysicsObject(40, 40);
253        hautakivi.Mass = 100000000000.0;
254
255        hautakivi.Image = pelaajanKuvaKuolleena;
256
257        hautakivi.Position = porkkana.Position;
258        Add(hautakivi);
259
260    }
261
262    void TomaattiKuoli(PhysicsObject tomaatti)
263    {
264        tomaatti.Destroy();
265
266        pistelaskuri.Value += 100; 
267
268        kuolluttomaatti = new PhysicsObject(50, 50);
269        kuolluttomaatti.Mass = 4.0;
270
271        kuolluttomaatti.IgnoresCollisionResponse = true;
272
273        kuolluttomaatti.IgnoresGravity = true;
274
275        kuolluttomaatti.Image = vihollisenKuvaKuolleena;
276
277        kuolluttomaatti.Position = tomaatti.Position;
278        Add(kuolluttomaatti);
279
280        LuoLipas(kuolluttomaatti.X - 50, kuolluttomaatti.Y);
281    }
282
283    void TomaattiOsui(PhysicsObject tomaatti, PhysicsObject kohde)
284    {
285        if (kohde == porkkana)
286        {
287            tomaatti.Stop();
288            tomaatti.Brain.Active = false;
289
290            LopetaPeli();
291        }
292
293    }
294
295    void LuoPanosLaskuri()
296    {
297        panoslaskuri = new IntMeter(0);
298
299        Label panosnaytto = new Label();
300        panosnaytto.X = Screen.Right - 100;
301        panosnaytto.Y = Screen.Top - 100;
302        panosnaytto.TextColor = Color.Red;
303       
304        panosnaytto.BindTo(porkkana.Weapon.Ammo);
305        Add(panosnaytto);
306
307        Label panosteksti = new Label("Panoksia jäljellä: ");
308        panosteksti.X = Screen.Right - 200;
309        panosteksti.Y = Screen.Top - 100;
310        panosteksti.TextColor = Color.Red;
311
312        Add(panosteksti); 
313    }
314   
315    void LuoPisteLaskuri()
316    {
317        pistelaskuri = new IntMeter(0);
318       
319        Label pistenaytto = new Label();
320        pistenaytto.X = Screen.Right - 100;
321        pistenaytto.Y = Screen.Top - 150;
322        pistenaytto.TextColor = Color.Red;
323
324        pistenaytto.BindTo(pistelaskuri);
325        Add(pistenaytto);
326
327        Label pisteteksti = new Label("Pisteitä: ");
328        pisteteksti.X = Screen.Right - 200;
329        pisteteksti.Y = Screen.Top - 150;
330        pisteteksti.TextColor = Color.Red;
331
332        Add(pisteteksti);
333    }
334
335    PhysicsObject LuoLipas()
336    {
337        lipas = new PhysicsObject(20, 20);
338        lipas.Mass = 2.0;
339
340        lipas.Image = lippaanKuva;
341
342        lipas.Tag = "Lipas";
343
344        Add(lipas);
345        return lipas;
346    }
347
348    void LuoLipas(double x, double y)
349    {
350        LuoLipas().Position = new Vector(x,y);
351    }
352
353    void LippaaseenOsuma(PhysicsObject porkkana, PhysicsObject kohde)
354    {
355        if (kohde.Tag.ToString() == "Lipas")
356        {
357            ((PlatformCharacter)porkkana).Weapon.Ammo.Value +=10;
358            kohde.Destroy();
359        }
360    }
361
362    void HeitaKranaatti()
363    {
364        Grenade kranaatti = new Grenade(4.0);
365        kranaatti.X = porkkana.X + 10;
366        kranaatti.Y = porkkana.Y + 10;
367        Add(kranaatti);
368        Vector kranaatinlento = Vector.FromLengthAndAngle(100.0, porkkana.Weapon.Angle);
369        kranaatti.Hit(kranaatinlento);
370    }
371}             
Note: See TracBrowser for help on using the repository browser.