source: 2016/27/PekkaP/FinnishTroops/FinnishTroops/FinnishTroops/FinnishTroops.cs @ 7949

Revision 7949, 9.3 KB checked in by pepihlaj, 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
9public class FinnishTroops : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14
15    PlatformCharacter pelaaja1;
16    Image pelaajanKuva = LoadImage("SOTILAS");
17    Image cash = LoadImage("Cash");
18    Image pahisKuva = LoadImage("Sotilas1Vihollinen");
19    SoundEffect maaliAani = LoadSoundEffect("maali");
20    IntMeter pelaajan1Pisteet;
21    Image ammus = LoadImage("Ammus2");
22    Image Palikka = LoadImage("Palikka");
23    IntMeter PelaajanElamat;
24    Image Tankki = LoadImage("Tankki");
25    public override void Begin()
26    {
27        Gravity = new Vector(0, -1000);
28
29        LuoKentta();
30        LuoPisteLaskuri(Screen.Left + 20.0, Screen.Top - 20.0);
31        LisaaNappaimet();
32
33        Camera.Follow(pelaaja1);
34        Camera.ZoomFactor = 2.5;
35        Camera.StayInLevel = true;
36
37       
38    }
39
40    void LuoKentta()
41    {
42        TileMap kentta = TileMap.FromLevelAsset("kentta1");
43        kentta.SetTileMethod('#', LisaaTaso);
44        kentta.SetTileMethod('*', LisaaTahti);
45        kentta.SetTileMethod('N', LisaaPelaaja);
46        kentta.SetTileMethod('M', LisaaPahis);
47        kentta.SetTileMethod('T', LisaaTyyppi);
48        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
49        Level.CreateBorders();
50        Level.Background.CreateGradient(Color.OrangeRed, Color.Black);
51    }
52
53   
54
55    void LisaaPahis(Vector paikka, double leveys, double korkeus)
56    {
57        Vihu pahis = new Vihu(leveys * 0.8, korkeus * 0.9);
58        pahis.X = -100;
59        pahis.Y = -100;
60        // ...
61        pahis.ElamaLaskuri.Value--;
62        pahis.Image = pahisKuva;
63        pahis.Position = paikka;
64        Add(pahis);
65        pahis.Tag = "PahisSotilas";
66
67        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
68        tasoAivot.JumpSpeed = 700;
69        tasoAivot.TriesToJump = true;
70        tasoAivot.Speed = 100;
71        tasoAivot.FallsOffPlatforms = true;
72        pahis.Brain = tasoAivot;
73
74        pahis.Weapon = new AssaultRifle(30, 10);
75        pahis.Weapon.ProjectileCollision = AmmusOsui;
76        Timer ajastin = new Timer();
77        ajastin.Interval = 2.0;
78        ajastin.Timeout += delegate { PahisAmmuAseella(pahis); };
79            ajastin.Start();
80
81
82    }
83    void LisaaTyyppi(Vector paikka, double leveys, double korkeus)
84    {
85        PlatformCharacter tyyppi = new PlatformCharacter(leveys, korkeus);
86        tyyppi.X = -100;
87        tyyppi.Y = -100;
88        tyyppi.Image = Tankki;
89        tyyppi.Position = paikka;
90        Add(tyyppi);
91        tyyppi.Tag = "Tankki";
92
93        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
94        tasoAivot.JumpSpeed = 700;
95        tasoAivot.TriesToJump = true;
96        tasoAivot.Speed = 100;
97        tasoAivot.FallsOffPlatforms = true;
98        tyyppi.Brain = tasoAivot;
99
100        tyyppi.Weapon = new AssaultRifle(30, 10);
101        tyyppi.Weapon.IsVisible = false;
102        tyyppi.Weapon.AmmoIgnoresGravity = false;
103        tyyppi.Weapon.Power.Value = 2000;
104        tyyppi.Weapon.ProjectileCollision = AmmusOsui;
105        Timer ajastin = new Timer();
106        ajastin.Interval = 1.0;
107        ajastin.Timeout += delegate { PahisAmmuAseella(tyyppi); };
108        ajastin.Start();
109
110    }
111
112    void LisaaTaso(Vector paikka, double leveys, double korkeus)
113    {
114        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
115        taso.Position = paikka;
116        taso.Image = Palikka;
117        Add(taso);
118    }
119
120    void LisaaTahti(Vector paikka, double leveys, double korkeus)
121    {
122        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
123        tahti.IgnoresCollisionResponse = true;
124        tahti.Position = paikka;
125        tahti.Image = cash;
126        tahti.Tag = "Cash";
127        Add(tahti);
128    }
129
130
131        void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
132    {
133        pelaaja1 = new PlatformCharacter(leveys * 0.6, korkeus * 0.9);
134        pelaaja1.Position = paikka;
135        pelaaja1.Mass = 4.0;
136        pelaaja1.Image = pelaajanKuva;
137        AddCollisionHandler(pelaaja1, "Cash", TormaaTahteen);
138        Add(pelaaja1);
139        pelaaja1.Tag = "pelaaja1";
140
141        pelaaja1.Weapon = new AssaultRifle(30, 10);
142
143        pelaaja1.Weapon.Ammo.Value = 1000;
144
145        pelaaja1.Weapon.ProjectileCollision = AmmusOsui;
146
147        Grenade kranaatti = new Grenade(4.0);
148
149        PelaajanElamat = new IntMeter(5);
150
151        Label pelaajanElama = new Label();
152        pelaajanElama.X = pelaaja1.X + 600;
153        pelaajanElama.Y = pelaaja1.Y + 600;
154        pelaajanElama.TextColor = Color.LightPink;
155        pelaajanElama.Color = Color.Transparent;
156        pelaajanElama.BindTo(PelaajanElamat);
157        Add(pelaajanElama);
158
159    }
160    void HeitaKranaatti(PlatformCharacter pelaaja)
161    {
162        Grenade kranu = new Grenade(4.0);
163        Add(kranu);
164        pelaaja.Throw(kranu, Angle.FromDegrees(30), 10000);
165        kranu.Explosion.ShockwaveReachesObject += KranaattiOsui;
166    }
167    void KranaattiOsui(IPhysicsObject rajahdyksenKohde, Vector v)
168    {
169        if (rajahdyksenKohde.Tag.Equals("PahisSotilas") || rajahdyksenKohde.Tag.Equals("pelaaja1") || rajahdyksenKohde.Tag.Equals("Tankki")) rajahdyksenKohde.Destroy();
170    }
171
172
173    void LisaaNappaimet()
174    {
175        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
176        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
177        Keyboard.Listen(Key.Z, ButtonState.Pressed, HeitaKranaatti, "Heitä kranu", pelaaja1);
178        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
179        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
180        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
181
182        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
183
184        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
185        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
186        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
187
188        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1);
189
190        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
191    }
192
193    void Liikuta(PlatformCharacter pelaaja1, double nopeus)
194    {
195        pelaaja1.Walk(nopeus);
196    }
197
198    void Hyppaa(PlatformCharacter hahmo, double nopeus)
199    {
200        pelaaja1.Jump(nopeus);
201    }
202
203    void TormaaTahteen(PhysicsObject pelaaja1, PhysicsObject tahti)
204    {
205        maaliAani.Play();
206        MessageDisplay.Add("Cash");
207        tahti.Destroy();
208        pelaajan1Pisteet.Value += 100;
209
210    }
211
212
213    IntMeter LuoPisteLaskuri(double x, double y)
214    {
215        pelaajan1Pisteet = new IntMeter(0);
216        pelaajan1Pisteet.MaxValue = 1900;
217
218        Label naytto = new Label();
219        naytto.BindTo(pelaajan1Pisteet);
220        naytto.X = x;
221        naytto.Y = y;
222        naytto.TextColor = Color.Black;
223        naytto.BorderColor = Level.Background.Color;
224        naytto.Color = Level.Background.Color;
225        Add(naytto);
226
227
228        return pelaajan1Pisteet;
229    }
230    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
231    {
232        if (kohde == pelaaja1)
233        {
234            if (PelaajanElamat > 0)
235            {
236                PelaajanElamat.Value -= 1;
237                if (PelaajanElamat == 0)
238                {
239                    pelaaja1.Destroy();
240                }
241            }
242
243        }
244        if (kohde == pelaaja1)
245        {
246            if (PelaajanElamat > 0)
247            {
248                PelaajanElamat.Value -= 1;
249                if (PelaajanElamat == 0)
250                {
251                    pelaaja1.Destroy();
252                }
253            }
254
255        }
256       if (kohde.Tag.Equals("PahisSotilas"))
257        {
258            (kohde as Vihu).ElamaLaskuri.Value -= 1;
259        }
260
261
262        ammus.Destroy();
263    }
264    void PahisAmmuAseella(PlatformCharacter pahis)
265    {
266        PhysicsObject ammus = pahis.Weapon.Shoot();
267        if (ammus != null)
268        {
269            ammus.Size *= 1.0;
270            ammus.Image = LoadImage("Ammus2");
271            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
272
273        }
274
275    }
276    void AmmuAseella(PlatformCharacter pelaaja)
277    {
278        PhysicsObject ammus = pelaaja.Weapon.Shoot();
279        if (ammus != null)
280        {
281            ammus.Size *= 1.0;
282            ammus.Image = LoadImage("Ammus2");
283            ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0);
284
285        }
286   
287    }
288   
289}
290
291class Vihu : PlatformCharacter
292{
293    private IntMeter elamaLaskuri = new IntMeter(3, 0, 3);
294    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
295   
296    public Vihu(double leveys, double korkeus)
297        : base(leveys, korkeus)
298    {
299        elamaLaskuri.LowerLimit += delegate { Destroy(); };
300    } 
301   
302   
303   
304       
305}
Note: See TracBrowser for help on using the repository browser.