source: 2014/27/EmilK/toimintajuttu/toimintajuttu/toimintajuttu/toimintajuttu.cs @ 5301

Revision 5301, 10.2 KB checked in by emkronqv, 6 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 toimintajuttu : PhysicsGame
10{
11    const double nopeus = 400;
12    const double hyppyNopeus = 1800;
13    const int RUUDUN_KOKO = 120;
14
15    PlatformCharacter pelaaja1;
16
17    Image taustaKuva = LoadImage("taustaagodofwariin");
18    Image pelaajanKuva = LoadImage("god of war");
19    Image tahtiKuva = LoadImage("tahti");
20    Image vihollisenkuva = LoadImage("vihu");
21    Image bossinkuva = LoadImage("bossi");
22    Image ammuksenkuva = LoadImage("bossinhyökkäys");
23
24    Image aseenkuva = LoadImage("ase");
25    private Image[] ukkeliHyppaa = LoadImages("hyppy");
26    private Image[] ukkelinKavely = LoadImages("juoksuu 1","juoksuu 2");
27    private Image[] ukkeliHyokkaa = LoadImages("hyökkäys 4");
28    private Image[] ukkeliPaikallaan = LoadImages("god of war");
29    SoundEffect maaliAani = LoadSoundEffect("maali");
30    DoubleMeter elamaLaskuri;
31
32    public override void Begin()
33    {
34        AloitaPeli();
35      }
36
37    void AloitaPeli()
38    {
39        ClearAll();
40        Gravity = new Vector(0, -1300);
41
42        MediaPlayer.Play("musiikki");
43        MediaPlayer.IsRepeating = true;
44
45        LuoKentta();
46        LisaaNappaimet();
47        LuoElamaLaskuri();
48
49        Camera.Follow(pelaaja1);
50        Camera.ZoomFactor = 1.2;
51        Camera.StayInLevel = true;
52    }
53
54    void LuoKentta()
55    {
56        TileMap kentta = TileMap.FromLevelAsset("kentta1");
57        kentta.SetTileMethod('#', LisaaTaso);
58        kentta.SetTileMethod('*', LisaaTahti);
59        kentta.SetTileMethod('N', LisaaPelaaja);
60        kentta.SetTileMethod('H', LisaaVihollinen);
61        kentta.SetTileMethod('P', LisaaAnsa);
62        kentta.SetTileMethod('B', LisaaBossi);
63        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
64        Level.CreateBorders();
65        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
66
67        Level.Background.Image = taustaKuva;
68    }
69
70    void LisaaTaso(Vector paikka, double leveys, double korkeus)
71    {
72        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
73        taso.Position = paikka;
74        taso.Color = Color.Red;
75        Add(taso);
76    }
77
78    void LisaaAnsa(Vector paikka, double leveys, double korkeus)
79    {
80        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        taso.Position = paikka;
82        taso.Color = Color.Black;
83        taso.Tag = "Ansa";
84
85        Add(taso);
86    }
87
88    void LisaaBossi(Vector paikka, double leveys, double korkeus)
89    {
90        PlatformCharacter bossi = new PlatformCharacter(leveys *3, korkeus * 5);
91        bossi.Position = paikka;
92        bossi.Y += korkeus / 5;
93        bossi.Image = bossinkuva;
94        Add(bossi);
95
96        bossi.Weapon = new AssaultRifle(30, 10);
97        bossi.Weapon.ProjectileCollision += AmmusOsui;
98
99        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
100        tasoAivot.Speed = 100;
101        bossi.Brain = tasoAivot;
102
103        AddCollisionHandler(bossi, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { bossi.Destroy(); });
104
105        Timer ajastin = new Timer();
106        ajastin.Interval = 0.05;
107        ajastin.Timeout += delegate
108        {
109            if (bossi.IsDestroyed)
110                ajastin.Stop();
111
112            if (Vector.Distance(pelaaja1.Position, bossi.Position) < 600)
113            {
114                tasoAivot.Active = false;
115                bossi.Weapon.AbsoluteAngle = (pelaaja1.Position - bossi.Position).Angle;
116                PhysicsObject ammus = bossi.Weapon.Shoot();
117
118                if (ammus != null)
119                {
120                    ammus.Size = new Vector(75, 75);
121                   ammus.Image = ammuksenkuva;
122                   ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
123                }
124            }
125            else
126            {
127                tasoAivot.Active = true;
128            }
129        };
130
131        ajastin.Start();
132    }
133
134    void LisaaVihollinen(Vector paikka, double leveys, double korkeus)
135    {
136        PlatformCharacter vihollinen = new PlatformCharacter(leveys, korkeus*2);
137        vihollinen.Position = paikka;
138        vihollinen.Y += korkeus / 2;
139        vihollinen.Image = vihollisenkuva;
140        Add(vihollinen);
141
142        vihollinen.Weapon = new AssaultRifle(30, 10);
143        vihollinen.Weapon.ProjectileCollision += AmmusOsui;
144
145        PlatformWandererBrain tasoAivot = new PlatformWandererBrain();
146        tasoAivot.Speed = 100;
147        vihollinen.Brain = tasoAivot;
148
149        AddCollisionHandler(vihollinen, "Ase", delegate(PhysicsObject ase, PhysicsObject vihu) { vihollinen.Destroy(); });
150
151        Timer ajastin = new Timer();
152        ajastin.Interval = 0.05;
153        ajastin.Timeout += delegate
154        {
155            if (vihollinen.IsDestroyed)
156                ajastin.Stop();
157
158            if (Vector.Distance(pelaaja1.Position, vihollinen.Position) < 600)
159            {
160                tasoAivot.Active = false;
161                vihollinen.Weapon.AbsoluteAngle = (pelaaja1.Position - vihollinen.Position).Angle;
162                PhysicsObject ammus = vihollinen.Weapon.Shoot();
163
164                if (ammus != null)
165                {
166                    ammus.LifetimeLeft = TimeSpan.FromSeconds(5.0);
167                }
168            }
169            else
170            {
171                tasoAivot.Active = true;
172            }
173        };
174
175        ajastin.Start();
176    }
177
178    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
179    {
180        ammus.Destroy();
181        if (kohde == pelaaja1)
182        {
183            elamaLaskuri.Value--;
184        }
185    }
186
187    void LisaaTahti(Vector paikka, double leveys, double korkeus)
188    {
189        PhysicsObject tahti = PhysicsObject.CreateStaticObject(leveys, korkeus);
190        tahti.IgnoresCollisionResponse = true;
191        tahti.Position = paikka;
192        tahti.Image = tahtiKuva;
193        tahti.Tag = "tahti";
194        Add(tahti);
195    }
196
197    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
198    {
199        pelaaja1 = new PlatformCharacter(leveys, korkeus * 1.3);
200        pelaaja1.Position = paikka;
201        pelaaja1.Y += 40;
202        pelaaja1.Mass = 4.0;
203        pelaaja1.Image = pelaajanKuva;
204        AddCollisionHandler(pelaaja1, "Ansa", TormaaAnsaan);
205        pelaaja1.AnimWalk = new Animation(ukkelinKavely);
206        pelaaja1.AnimWalk.FPS = 7;
207        pelaaja1.AnimIdle = new Animation(ukkeliPaikallaan);
208        pelaaja1.AnimJump = new Animation(ukkeliHyppaa);
209        pelaaja1.CollisionIgnoreGroup = 1;
210        Add(pelaaja1);
211    }
212
213    void LisaaNappaimet()
214    {
215        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
216        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
217
218        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus);
219        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus);
220        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
221
222        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
223
224        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
225        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
226
227        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
228        //ControllerOne.Listen(Button.DPadLeft, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
229
230        //ControllerOne.Listen(Button.DPadRight, ButtonState.Pressed, KaynnistaKavelu, "Pelaaja liikkuu vasemmalle");
231        //ControllerOne.Listen(Button.DPadRight, ButtonState.Released, PysautaKavelu, "Pelaaja liikkuu vasemmalle");
232
233        //ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
234        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
235
236        ControllerOne.Listen(Button.X, ButtonState.Pressed, Hyokkaa, "Pelaaja hyokkaa", pelaaja1);
237
238       PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
239    }
240
241    void Liikuta(PlatformCharacter hahmo, double nopeus)
242    {
243        hahmo.Walk(nopeus);
244       
245    }
246
247    void KaynnistaKavelu()
248    {
249       
250        pelaaja1.Animation.Start();
251
252    }
253
254    void PysautaKavelu()
255    {
256
257        pelaaja1.Animation.Stop();
258
259    }
260
261    void Hyppaa(PlatformCharacter hahmo, double nopeus)
262    {
263        hahmo.Jump(nopeus);
264        pelaaja1.Animation.Start();
265
266
267    }
268
269    void Hyokkaa(PlatformCharacter hahmo)
270    {
271        PhysicsObject Ase = new PhysicsObject(150, 30);
272        Ase.Position = hahmo.Position + hahmo.FacingDirection.GetVector() * 120;
273        Ase.LifetimeLeft = TimeSpan.FromSeconds(0.5);
274        Ase.Image = aseenkuva;
275        Ase.CollisionIgnoreGroup = 1;
276        Add(Ase);
277        Animation anim = new Animation(ukkeliHyokkaa);
278        anim.FPS = 2;
279        Ase.Tag = "Ase";
280        Ase.Angle = pelaaja1.FacingDirection.Angle;
281        hahmo.PlayAnimation(anim);
282
283        Timer ajastin = new Timer();
284        ajastin.Interval = 0.01;
285        ajastin.Timeout += delegate
286        {
287            Ase.Position = pelaaja1.Position + pelaaja1.FacingDirection.GetVector() * 120 + new Vector(0, 30);
288        };
289        ajastin.Start();
290    }
291
292    void TormaaAnsaan(PhysicsObject hahmo, PhysicsObject tahti)
293    {
294        AloitaPeli(); 
295       
296       
297    }
298
299    void LuoElamaLaskuri()
300    {
301        elamaLaskuri = new DoubleMeter(10);
302        elamaLaskuri.MaxValue = 10;
303        elamaLaskuri.LowerLimit += ElamaLoppui;
304
305        ProgressBar elamaPalkki = new ProgressBar(150, 20);
306        elamaPalkki.X = Screen.Left + 150;
307        elamaPalkki.Y = Screen.Top - 20;
308        elamaPalkki.BindTo(elamaLaskuri);
309        Add(elamaPalkki);
310    }
311
312    void ElamaLoppui()
313    {
314        MessageDisplay.Add("Elämät loppuivat, voi voi.");
315        AloitaPeli();
316    }
317
318}
Note: See TracBrowser for help on using the repository browser.