1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | using Jypeli; |
---|
4 | using Jypeli.Assets; |
---|
5 | using Jypeli.Controls; |
---|
6 | using Jypeli.Effects; |
---|
7 | using Jypeli.Widgets; |
---|
8 | |
---|
9 | |
---|
10 | |
---|
11 | class Vihu : PlatformCharacter |
---|
12 | { |
---|
13 | private IntMeter elamaLaskuri; |
---|
14 | public IntMeter ElamaLaskuri { get { return elamaLaskuri; } } |
---|
15 | |
---|
16 | public Vihu(int elama, double leveys, double korkeus) |
---|
17 | : base(leveys, korkeus) |
---|
18 | { |
---|
19 | elamaLaskuri = new IntMeter(elama, 0, elama); |
---|
20 | |
---|
21 | } |
---|
22 | } |
---|
23 | /// <summary> |
---|
24 | /// Esinevalikko. |
---|
25 | /// </summary> |
---|
26 | class Inventory : Widget |
---|
27 | { |
---|
28 | /// <summary> |
---|
29 | /// Tapahtuma, kun esine on valittu. |
---|
30 | /// </summary> |
---|
31 | public event Action<PhysicsObject> ItemSelected; |
---|
32 | |
---|
33 | /// <summary> |
---|
34 | /// Luo uuden esinevalikon. |
---|
35 | /// </summary> |
---|
36 | public Inventory() |
---|
37 | : base(new HorizontalLayout()) |
---|
38 | { |
---|
39 | } |
---|
40 | |
---|
41 | /// <summary> |
---|
42 | /// Lisää esineen. |
---|
43 | /// </summary> |
---|
44 | /// <param name="item">Lisättävä esine.</param> |
---|
45 | /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param> |
---|
46 | public void AddItem(PhysicsObject item, Image kuva) |
---|
47 | { |
---|
48 | PushButton icon = new PushButton(kuva); |
---|
49 | Add(icon); |
---|
50 | icon.Clicked += delegate() { SelectItem(item); }; |
---|
51 | } |
---|
52 | |
---|
53 | void SelectItem(PhysicsObject item) |
---|
54 | { |
---|
55 | if (ItemSelected != null) |
---|
56 | { |
---|
57 | ItemSelected(item); |
---|
58 | } |
---|
59 | } |
---|
60 | } |
---|
61 | |
---|
62 | class Tykki : GameObject |
---|
63 | { |
---|
64 | public int taso = 1; |
---|
65 | public AssaultRifle ase; |
---|
66 | public Tykki(double leveys, double korkeus) |
---|
67 | : base(leveys, korkeus) |
---|
68 | { |
---|
69 | |
---|
70 | |
---|
71 | } |
---|
72 | |
---|
73 | } |
---|
74 | |
---|
75 | public class Avaruuspeli : PhysicsGame |
---|
76 | { |
---|
77 | private Animation OrkinKavely; |
---|
78 | private Animation MonsteriKavely; |
---|
79 | private Animation AlienKavely; |
---|
80 | |
---|
81 | const double nopeus = 200; |
---|
82 | const double hyppyNopeus = 750; |
---|
83 | const int RUUDUN_KOKO = 40; |
---|
84 | |
---|
85 | private int kieorrokset = 10; |
---|
86 | DoubleMeter aaltoPalkki; |
---|
87 | ProgressBar aaltoNaytto; |
---|
88 | DoubleMeter alaspainLaskuri; |
---|
89 | Timer aaltoAikaLaskuri; |
---|
90 | private const int MAX_KIERROSAIKA = 300; |
---|
91 | |
---|
92 | List<Vihu> vihut = new List<Vihu>(); |
---|
93 | |
---|
94 | private Image[] Avaruuskävely = LoadImages("Avaruus saankari", "Avaruus saankari2"); |
---|
95 | private Image[] Monsterinkavelykuvat = LoadImages("Monsteri", "Monsteri2"); |
---|
96 | private Image[] Alienkavelykuvat = LoadImages("Alien", "Alien2"); |
---|
97 | |
---|
98 | PlatformCharacter pelaaja2; |
---|
99 | PlatformCharacter pelaaja1; |
---|
100 | |
---|
101 | Image AlienKuva = LoadImage("Alien"); |
---|
102 | Image Orkkikuva = LoadImage("Orkki"); |
---|
103 | Image monsteri = LoadImage("Monsteri"); |
---|
104 | Image flamerkuva= LoadImage("Flamer"); |
---|
105 | Image Estekuva = LoadImage("Este"); |
---|
106 | Image Automaattikuva = LoadImage("Automaattitykki"); |
---|
107 | |
---|
108 | Image Robo = LoadImage("Robot"); |
---|
109 | Image pelaajanKuva = LoadImage("Avaruus saankari"); |
---|
110 | Image taustakuva = LoadImage("scifi hallway space ship model interior"); |
---|
111 | SoundEffect maaliAani = LoadSoundEffect("maali"); |
---|
112 | DoubleMeter elamaLaskuri; |
---|
113 | DoubleMeter elamaLaskuri2; |
---|
114 | SoundEffect osumisaani = LoadSoundEffect("Hit_Hurt2"); |
---|
115 | Inventory inventory; |
---|
116 | |
---|
117 | List<PushButton> painonapit = new List<PushButton>(); |
---|
118 | Label menuHelperNaytto; |
---|
119 | private GameObject seurattava; |
---|
120 | bool ollaanRakentamassa = false; |
---|
121 | |
---|
122 | PushButton menuNappi; |
---|
123 | |
---|
124 | public override void Begin() |
---|
125 | { |
---|
126 | IsMouseVisible = true; |
---|
127 | MediaPlayer.Play("musiikki"); |
---|
128 | MediaPlayer.IsRepeating = true; |
---|
129 | OrkinKavely = LoadAnimation("Orkki liikkuu"); |
---|
130 | MonsteriKavely = new Animation(Monsterinkavelykuvat); |
---|
131 | AlienKavely = new Animation(Alienkavelykuvat); |
---|
132 | |
---|
133 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "Aloita peli", "Parhaat pisteet", "Lopeta"); |
---|
134 | Add(alkuValikko); |
---|
135 | alkuValikko.AddItemHandler(0, pelaajienvalinta); |
---|
136 | //alkuValikko.AddItemHandler(1, ParhaatPisteet); |
---|
137 | alkuValikko.AddItemHandler(2, Exit); |
---|
138 | } |
---|
139 | |
---|
140 | void HiirenLiikutus(AnalogState tila) |
---|
141 | { |
---|
142 | if (ollaanRakentamassa) |
---|
143 | { |
---|
144 | seurattava.Position = Mouse.PositionOnWorld; |
---|
145 | } |
---|
146 | } |
---|
147 | |
---|
148 | void HiirenKlikkaus() |
---|
149 | { |
---|
150 | if (ollaanRakentamassa) |
---|
151 | { |
---|
152 | AssaultRifle ase = new AssaultRifle(30, 30); |
---|
153 | ase.IsVisible = false; |
---|
154 | ase.FireRate = 2; |
---|
155 | ase.ProjectileCollision = AmmusOsui; |
---|
156 | //seurattava.Add(ase); |
---|
157 | seurattava.IsVisible = false; |
---|
158 | PhysicsObject tykki = PhysicsObject.CreateStaticObject(100, 100); |
---|
159 | tykki.Image = seurattava.Image; |
---|
160 | tykki.Position = seurattava.Position; |
---|
161 | Add(tykki); |
---|
162 | tykki.Add(ase); |
---|
163 | (seurattava as Tykki).ase = ase; |
---|
164 | Timer ajastin = new Timer(); |
---|
165 | ajastin.Interval = 0.01; |
---|
166 | ajastin.Timeout += delegate |
---|
167 | { |
---|
168 | List<GameObject> vihut = GetObjectsWithTag("vihollinen"); |
---|
169 | //var vihut = vihulista; |
---|
170 | if (vihut == null || vihut.Count == 0) return; |
---|
171 | |
---|
172 | double etäisyys = Vector.Distance(ase.AbsolutePosition, vihut[0].Position); |
---|
173 | if (etäisyys > 300) return; |
---|
174 | |
---|
175 | //vihut.Sort((a, b) => Vector.Distance(a.Position, ase.AbsolutePosition) > Vector.Distance(b.Position, ase.AbsolutePosition) ? 1 : -1); |
---|
176 | vihut.Sort((a, b) => JarjestaVihut(ase, a, b)); |
---|
177 | ase.Angle = (vihut[0].Position - ase.AbsolutePosition).Angle; |
---|
178 | PhysicsObject ammus = ase.Shoot(); |
---|
179 | |
---|
180 | if (ammus != null) |
---|
181 | { |
---|
182 | ammus.Size *= 0.5; |
---|
183 | //ammus.Image = cannonballKuva; |
---|
184 | ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0); |
---|
185 | //Tykki.Play(); |
---|
186 | } |
---|
187 | }; |
---|
188 | ajastin.Start(); |
---|
189 | |
---|
190 | ollaanRakentamassa = false; |
---|
191 | seurattava = null; |
---|
192 | } |
---|
193 | /* |
---|
194 | else |
---|
195 | { |
---|
196 | List<Tykki> tornit = GetObjectsWithTag("torni").Cast<Tykki>().ToList(); |
---|
197 | foreach (Tykki torni in tornit) |
---|
198 | { |
---|
199 | int hinta = 40 + 20 * torni.taso; |
---|
200 | if (Mouse.IsCursorOn(torni) && torni.taso < Tornikuvat.Length) |
---|
201 | { |
---|
202 | if (rahalaskuri.Value >= hinta) |
---|
203 | { |
---|
204 | |
---|
205 | |
---|
206 | torni.taso += 1; |
---|
207 | torni.ase.FireRate = 1 + torni.taso; |
---|
208 | rahalaskuri.Value -= hinta; |
---|
209 | torni.Image = Tornikuvat[torni.taso - 1]; |
---|
210 | } |
---|
211 | else |
---|
212 | { |
---|
213 | MessageDisplay.Add("Ei tarpeeksi rahaa. Päivitys maksaa " + hinta); |
---|
214 | |
---|
215 | } |
---|
216 | } |
---|
217 | |
---|
218 | } |
---|
219 | } |
---|
220 | */ |
---|
221 | } |
---|
222 | |
---|
223 | void AnnaRakennus(double leveys, double korkeus, int hinta, Image kuva) |
---|
224 | { |
---|
225 | if (ollaanRakentamassa) return; |
---|
226 | if (hinta > pisteLaskuri.Value) { MessageDisplay.Add("Ei tarpeeksi pisteitä!"); return; } |
---|
227 | pisteLaskuri.Value -= hinta; |
---|
228 | |
---|
229 | Tykki talo = new Tykki(leveys, korkeus); |
---|
230 | talo.Color = Color.Black; |
---|
231 | talo.Image = kuva; |
---|
232 | talo.Position = Mouse.PositionOnScreen; |
---|
233 | talo.Tag = "torni"; |
---|
234 | ollaanRakentamassa = true; |
---|
235 | seurattava = talo; |
---|
236 | Add(talo, 3); |
---|
237 | |
---|
238 | } |
---|
239 | // void LuoRakennus(double leveys, double korkeus, int hinta, Image kuva) |
---|
240 | { |
---|
241 | // if (ollaanRakentamassa) return; |
---|
242 | // if (hinta > pisteLaskuri.Value) { MessageDisplay.Add("Ei tarpeeksi pisteitä!"); return; } |
---|
243 | // pisteLaskuri.Value -= hinta; |
---|
244 | |
---|
245 | // Tykki talo = new Tykki(leveys, korkeus); |
---|
246 | // talo.Color = Color.Black; |
---|
247 | // talo.Image = kuva; |
---|
248 | // talo.Position = Mouse.PositionOnScreen; |
---|
249 | // talo.Tag = "Tykki"; |
---|
250 | // ollaanRakentamassa = true; |
---|
251 | // seurattava = talo; |
---|
252 | // Add(talo, 3); |
---|
253 | |
---|
254 | } |
---|
255 | int JarjestaVihut(AssaultRifle ase, GameObject a, GameObject b) |
---|
256 | { |
---|
257 | if (a == null || b == null) return 0; |
---|
258 | return Vector.Distance(a.Position, ase.AbsolutePosition) > Vector.Distance(b.Position, ase.AbsolutePosition) ? 1 : -1; |
---|
259 | } |
---|
260 | |
---|
261 | void LuoTorniNappula(Vector paikka, double leveys, double korkeus, Image rakennusKuva, int hinta, int rakennusKoko) |
---|
262 | { |
---|
263 | menuNappi = new PushButton(leveys * 2, korkeus * 2, flamerkuva); |
---|
264 | menuNappi.Position = new Vector(0, (Screen.Bottom + 30)); |
---|
265 | menuNappi.Clicked += new Action(() => AnnaRakennus(rakennusKoko, rakennusKoko * 2, hinta, rakennusKuva)); |
---|
266 | Add(menuNappi); |
---|
267 | Mouse.ListenMovement(1.0, delegate |
---|
268 | } |
---|
269 | if (Mouse.IsCursorOn(menuNappi)) |
---|
270 | { |
---|
271 | menuHelperNaytto.IsVisible = true; |
---|
272 | menuHelperNaytto.Text = "Torni, " + hinta + " kultaa"; |
---|
273 | menuHelperNaytto.Position = Mouse.PositionOnScreen + new Vector(menuHelperNaytto.Width / 2 + 10, 0); |
---|
274 | } |
---|
275 | |
---|
276 | }, null |
---|
277 | ); |
---|
278 | } |
---|
279 | |
---|
280 | void pelaajienvalinta() |
---|
281 | { |
---|
282 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Spaceship madness", "yksi pelaaja", "kaksi pelaajaa"); |
---|
283 | Add(alkuValikko); |
---|
284 | alkuValikko.AddItemHandler(0, Aloitapeli, 1); |
---|
285 | alkuValikko.AddItemHandler(1, Aloitapeli, 2); |
---|
286 | } |
---|
287 | |
---|
288 | void Aloitapeli(int pelaajienLkm) |
---|
289 | { |
---|
290 | Gravity = new Vector(0, -1000); |
---|
291 | SmoothTextures = false; |
---|
292 | |
---|
293 | |
---|
294 | if (pelaajienLkm == 1) |
---|
295 | { |
---|
296 | LuoKentta(); |
---|
297 | } |
---|
298 | else |
---|
299 | { |
---|
300 | LuoKentta2(); |
---|
301 | LuoElamaLaskuri2(); |
---|
302 | } |
---|
303 | LisaaNappaimet(); |
---|
304 | LuoElamaLaskuri(); |
---|
305 | LuoPistelaskuri(); |
---|
306 | LuoAaltoPalkki(); |
---|
307 | AaltoLoppui(); |
---|
308 | |
---|
309 | LuoMenu(); |
---|
310 | LuoTorniNappula(Vector.Zero, 50, 50, flamerkuva, 10, 50); |
---|
311 | LuoTykkiNappula(Vector.Zero, 50, 50, Automaattikuva, 10, 50); |
---|
312 | |
---|
313 | Camera.Follow(pelaaja1); |
---|
314 | Camera.ZoomFactor = 1.2; |
---|
315 | Camera.StayInLevel = true; |
---|
316 | |
---|
317 | Mouse.ListenMovement(1.0, HiirenLiikutus, null); |
---|
318 | |
---|
319 | Mouse.Listen(MouseButton.Left, ButtonState.Pressed, HiirenKlikkaus, null); |
---|
320 | Mouse.ListenMovement(1.0, delegate |
---|
321 | { |
---|
322 | if (!Mouse.IsCursorOn(menuNappi)) |
---|
323 | menuHelperNaytto.IsVisible = false; |
---|
324 | |
---|
325 | // List<Torni> tornit = GetObjectsWithTag("torni").Cast<Torni>().ToList(); |
---|
326 | // foreach (Torni torni in tornit) |
---|
327 | // { |
---|
328 | // if (Mouse.IsCursorOn(torni)) |
---|
329 | // { |
---|
330 | // menuHelperNaytto.IsVisible = true; |
---|
331 | // menuHelperNaytto.Text = "Torni, " + torni.taso; |
---|
332 | // menuHelperNaytto.Position = Mouse.PositionOnScreen + new Vector(menuHelperNaytto.Width / 2 + 10, 0); |
---|
333 | // } |
---|
334 | // } |
---|
335 | }, null); |
---|
336 | } |
---|
337 | |
---|
338 | void LuoMenu() |
---|
339 | { |
---|
340 | menuHelperNaytto = new Label(""); |
---|
341 | menuHelperNaytto.XMargin = 7.0; |
---|
342 | menuHelperNaytto.YMargin = 7.0; |
---|
343 | menuHelperNaytto.Color = new Color(0, 0, 0, 100); |
---|
344 | menuHelperNaytto.TextColor = Color.White; |
---|
345 | menuHelperNaytto.IsVisible = false; |
---|
346 | Add(menuHelperNaytto); |
---|
347 | } |
---|
348 | |
---|
349 | void LuoKentta() |
---|
350 | { |
---|
351 | TileMap kentta = TileMap.FromLevelAsset("kentta1"); |
---|
352 | kentta.SetTileMethod('#', LisaaTaso); |
---|
353 | |
---|
354 | |
---|
355 | kentta.SetTileMethod('N', LisaaPelaaja); |
---|
356 | kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
357 | Level.CreateBorders(); |
---|
358 | Level.Background.Image = taustakuva; |
---|
359 | Level.Background.ScaleToLevelByHeight(); |
---|
360 | } |
---|
361 | void LuoKentta2() |
---|
362 | { |
---|
363 | TileMap kentta = TileMap.FromLevelAsset("kentta1"); |
---|
364 | kentta.SetTileMethod('#', LisaaTaso); |
---|
365 | |
---|
366 | kentta.SetTileMethod('M', LisaaPelaaja2); |
---|
367 | kentta.SetTileMethod('N', LisaaPelaaja); |
---|
368 | kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
369 | Level.CreateBorders(); |
---|
370 | Level.Background.Image = taustakuva; |
---|
371 | Level.Background.ScaleToLevelByHeight(); |
---|
372 | } |
---|
373 | void LisaaTaso(Vector paikka, double leveys, double korkeus) |
---|
374 | { |
---|
375 | PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
376 | taso.Position = paikka; |
---|
377 | taso.Color = Color.Transparent; |
---|
378 | Add(taso); |
---|
379 | } |
---|
380 | |
---|
381 | |
---|
382 | |
---|
383 | void LisaaPelaaja(Vector paikka, double leveys, double korkeus) |
---|
384 | { |
---|
385 | pelaaja1 = new PlatformCharacter(leveys * 3, korkeus * 3); |
---|
386 | pelaaja1.Position = paikka; |
---|
387 | pelaaja1.Mass = 4.0; |
---|
388 | pelaaja1.Image = pelaajanKuva; |
---|
389 | Add(pelaaja1); |
---|
390 | AddCollisionHandler(pelaaja1, "vihollinen", Tormaaviholliseen); |
---|
391 | |
---|
392 | pelaaja1.AnimWalk = new Animation(Avaruuskävely); |
---|
393 | pelaaja1.AnimIdle = new Animation(pelaajanKuva); |
---|
394 | pelaaja1.AnimWalk.FPS = 5; |
---|
395 | |
---|
396 | //inventory = new Inventory(); |
---|
397 | //inventory.Y = Screen.Bottom+50; |
---|
398 | //Add(inventory); |
---|
399 | |
---|
400 | //inventory.AddItem(null, ); |
---|
401 | //inventory.AddItem(null, flamerkuva); |
---|
402 | |
---|
403 | pelaaja1.Weapon = new AssaultRifle(30, 10); |
---|
404 | pelaaja1.Weapon.Ammo.Value = 100000; |
---|
405 | pelaaja1.Weapon.ProjectileCollision = AmmusOsui; |
---|
406 | |
---|
407 | //inventory.AddItem(, flamerkuva); |
---|
408 | |
---|
409 | } |
---|
410 | void LisaaPelaaja2(Vector paikka, double leveys, double korkeus) |
---|
411 | { |
---|
412 | pelaaja2 = new PlatformCharacter(leveys * 3, korkeus * 3); |
---|
413 | pelaaja2.Position = paikka; |
---|
414 | pelaaja2.Mass = 4.0; |
---|
415 | pelaaja2.Image = pelaajanKuva; |
---|
416 | Add(pelaaja2); |
---|
417 | AddCollisionHandler(pelaaja2, "vihollinen", Tormaaviholliseen); |
---|
418 | |
---|
419 | pelaaja2.AnimWalk = new Animation(Avaruuskävely); |
---|
420 | pelaaja2.AnimIdle = new Animation(pelaajanKuva); |
---|
421 | pelaaja2.AnimWalk.FPS = 5; |
---|
422 | |
---|
423 | pelaaja2.Weapon = new AssaultRifle(30, 10); |
---|
424 | pelaaja2.Weapon.Ammo.Value = 1000; |
---|
425 | pelaaja2.Weapon.ProjectileCollision = AmmusOsui; |
---|
426 | } |
---|
427 | |
---|
428 | void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde) |
---|
429 | { |
---|
430 | ammus.Destroy(); |
---|
431 | if (kohde.Tag.Equals("vihollinen")) |
---|
432 | { |
---|
433 | (kohde as Vihu).ElamaLaskuri.Value--; |
---|
434 | osumisaani.Play(); |
---|
435 | |
---|
436 | } |
---|
437 | } |
---|
438 | |
---|
439 | void AmmuAseella(PlatformCharacter pelaaja) |
---|
440 | { |
---|
441 | if (!pelaaja.IsDestroyed) |
---|
442 | { |
---|
443 | PhysicsObject ammus = pelaaja.Weapon.Shoot(); |
---|
444 | |
---|
445 | if (ammus != null) |
---|
446 | { |
---|
447 | //ammus.Size *= 3; |
---|
448 | //ammus.Image = ... |
---|
449 | ammus.MaximumLifetime = TimeSpan.FromSeconds(2.0); |
---|
450 | } |
---|
451 | } |
---|
452 | } |
---|
453 | |
---|
454 | |
---|
455 | void LisaaNappaimet() |
---|
456 | { |
---|
457 | Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); |
---|
458 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
459 | |
---|
460 | Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus); |
---|
461 | Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus); |
---|
462 | |
---|
463 | Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus); |
---|
464 | Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "Ammu", pelaaja1); |
---|
465 | |
---|
466 | if (pelaaja2 != null) |
---|
467 | { |
---|
468 | Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, -nopeus); |
---|
469 | Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja2, nopeus); |
---|
470 | |
---|
471 | Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja2, hyppyNopeus); |
---|
472 | Keyboard.Listen(Key.LeftShift, ButtonState.Down, AmmuAseella, "Ammu", pelaaja2); |
---|
473 | } |
---|
474 | |
---|
475 | ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä"); |
---|
476 | |
---|
477 | ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus); |
---|
478 | ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus); |
---|
479 | ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus); |
---|
480 | |
---|
481 | PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); |
---|
482 | } |
---|
483 | |
---|
484 | void Liikuta(PlatformCharacter hahmo, double nopeus) |
---|
485 | { |
---|
486 | hahmo.Walk(nopeus); |
---|
487 | } |
---|
488 | |
---|
489 | |
---|
490 | |
---|
491 | void Hyppaa(PlatformCharacter hahmo, double nopeus) |
---|
492 | { |
---|
493 | hahmo.Jump(nopeus); |
---|
494 | } |
---|
495 | |
---|
496 | |
---|
497 | void Tormaaviholliseen(PhysicsObject hahmo, PhysicsObject vihollinen) |
---|
498 | { |
---|
499 | if (hahmo == pelaaja1) |
---|
500 | { |
---|
501 | elamaLaskuri.Value--; |
---|
502 | } |
---|
503 | else |
---|
504 | { |
---|
505 | elamaLaskuri2.Value--; |
---|
506 | } |
---|
507 | |
---|
508 | osumisaani.Play(); |
---|
509 | } |
---|
510 | |
---|
511 | |
---|
512 | void LuoAlien() |
---|
513 | { |
---|
514 | Vihu vihollinen = new Vihu(20, 100, 150); |
---|
515 | vihollinen.ElamaLaskuri.LowerLimit += delegate |
---|
516 | { |
---|
517 | vihollinen.Destroy(); |
---|
518 | vihut.Remove(vihollinen as Vihu); |
---|
519 | pisteLaskuri.Value += 20; |
---|
520 | }; |
---|
521 | vihollinen.Image = AlienKuva; |
---|
522 | vihollinen.CollisionIgnoreGroup = 1; |
---|
523 | vihollinen.X = Level.Right - 100; |
---|
524 | vihollinen.Tag = "vihollinen"; |
---|
525 | Add(vihollinen); |
---|
526 | |
---|
527 | vihut.Add(vihollinen); |
---|
528 | |
---|
529 | vihollinen.Animation = AlienKavely; |
---|
530 | vihollinen.Animation.FPS = 5; |
---|
531 | vihollinen.Animation.Start(); |
---|
532 | //vihollinen.AnimWalk = OrkinKavely; |
---|
533 | //vihollinen.PlayAnimation(OrkinKavely); |
---|
534 | |
---|
535 | PlatformWandererBrain tasoAivot = new PlatformWandererBrain(); |
---|
536 | tasoAivot.Speed = 100; |
---|
537 | tasoAivot.FallsOffPlatforms = true; |
---|
538 | tasoAivot.TriesToJump = true; |
---|
539 | |
---|
540 | vihollinen.Brain = tasoAivot; |
---|
541 | } |
---|
542 | |
---|
543 | |
---|
544 | void LuoOrkki() |
---|
545 | { |
---|
546 | Vihu vihollinen = new Vihu(10, 200, 200); |
---|
547 | vihollinen.ElamaLaskuri.LowerLimit += delegate |
---|
548 | { |
---|
549 | vihollinen.Destroy(); |
---|
550 | vihut.Remove(vihollinen as Vihu); |
---|
551 | pisteLaskuri.Value += 10; |
---|
552 | }; |
---|
553 | vihollinen.Image = Orkkikuva; |
---|
554 | vihollinen.CollisionIgnoreGroup = 1; |
---|
555 | vihollinen.X = Level.Right - 100; |
---|
556 | vihollinen.Tag = "vihollinen"; |
---|
557 | Add(vihollinen); |
---|
558 | |
---|
559 | vihut.Add(vihollinen); |
---|
560 | |
---|
561 | vihollinen.Animation = OrkinKavely; |
---|
562 | vihollinen.Animation.FPS = 5; |
---|
563 | vihollinen.Animation.Start(); |
---|
564 | //vihollinen.AnimWalk = OrkinKavely; |
---|
565 | //vihollinen.PlayAnimation(OrkinKavely); |
---|
566 | |
---|
567 | PlatformWandererBrain tasoAivot = new PlatformWandererBrain(); |
---|
568 | tasoAivot.Speed = 100; |
---|
569 | tasoAivot.FallsOffPlatforms = true; |
---|
570 | tasoAivot.TriesToJump = true; |
---|
571 | |
---|
572 | vihollinen.Brain = tasoAivot; |
---|
573 | } |
---|
574 | void Luovihollinen() |
---|
575 | { |
---|
576 | Vihu vihollinen = new Vihu(3, 100, 100); |
---|
577 | vihollinen.ElamaLaskuri.LowerLimit += delegate { |
---|
578 | vihollinen.Destroy(); |
---|
579 | vihut.Remove(vihollinen as Vihu); |
---|
580 | pisteLaskuri.Value += 5; |
---|
581 | }; |
---|
582 | vihollinen.Image = monsteri; |
---|
583 | vihollinen.CollisionIgnoreGroup = 1; |
---|
584 | vihollinen.X = Level.Right - 40; |
---|
585 | vihollinen.Tag = "vihollinen"; |
---|
586 | Add(vihollinen); |
---|
587 | |
---|
588 | vihut.Add(vihollinen); |
---|
589 | |
---|
590 | vihollinen.Animation = MonsteriKavely; |
---|
591 | vihollinen.Animation.FPS = 5; |
---|
592 | vihollinen.Animation.Start(); |
---|
593 | |
---|
594 | PlatformWandererBrain tasoAivot = new PlatformWandererBrain(); |
---|
595 | tasoAivot.Speed = 100; |
---|
596 | tasoAivot.FallsOffPlatforms = true; |
---|
597 | tasoAivot.TriesToJump = true; |
---|
598 | |
---|
599 | vihollinen.Brain = tasoAivot; |
---|
600 | } |
---|
601 | void LuoElamaLaskuri() |
---|
602 | { |
---|
603 | elamaLaskuri = new DoubleMeter(20); |
---|
604 | elamaLaskuri.MaxValue = 20; |
---|
605 | elamaLaskuri.LowerLimit += ElamaLoppui; |
---|
606 | |
---|
607 | ProgressBar elamaPalkki = new ProgressBar(150, 20); |
---|
608 | elamaPalkki.X = Screen.Left + 150; |
---|
609 | elamaPalkki.Y = Screen.Top - 20; |
---|
610 | elamaPalkki.BindTo(elamaLaskuri); |
---|
611 | Add(elamaPalkki); |
---|
612 | } |
---|
613 | void LuoElamaLaskuri2() |
---|
614 | { |
---|
615 | elamaLaskuri2 = new DoubleMeter(20); |
---|
616 | elamaLaskuri2.MaxValue = 20; |
---|
617 | elamaLaskuri2.LowerLimit += ElamaLoppui2; |
---|
618 | |
---|
619 | ProgressBar elamaPalkki = new ProgressBar(150, 20); |
---|
620 | elamaPalkki.X = Screen.Right - 150; |
---|
621 | elamaPalkki.Y = Screen.Top - 20; |
---|
622 | elamaPalkki.BindTo(elamaLaskuri2); |
---|
623 | Add(elamaPalkki); |
---|
624 | } |
---|
625 | |
---|
626 | |
---|
627 | void ElamaLoppui() |
---|
628 | { |
---|
629 | MessageDisplay.Add("Elämät loppuivat."); |
---|
630 | pelaaja1.Destroy(); |
---|
631 | } |
---|
632 | |
---|
633 | void ElamaLoppui2() |
---|
634 | { |
---|
635 | MessageDisplay.Add("Elämät loppuivat."); |
---|
636 | pelaaja2.Destroy(); |
---|
637 | } |
---|
638 | |
---|
639 | IntMeter pisteLaskuri; |
---|
640 | |
---|
641 | void LuoPistelaskuri() |
---|
642 | { |
---|
643 | pisteLaskuri = new IntMeter(100); |
---|
644 | |
---|
645 | Label pisteNaytto = new Label(); |
---|
646 | pisteNaytto.X = Screen.Left + 100; |
---|
647 | pisteNaytto.Y = Screen.Top - 100; |
---|
648 | pisteNaytto.TextColor = Color.Black; |
---|
649 | pisteNaytto.Color = Color.White; |
---|
650 | |
---|
651 | pisteNaytto.BindTo(pisteLaskuri); |
---|
652 | Add(pisteNaytto); |
---|
653 | } |
---|
654 | |
---|
655 | void AloitaAalto() |
---|
656 | { |
---|
657 | int kier = 20 / kieorrokset; |
---|
658 | |
---|
659 | Timer ajastin = new Timer(); |
---|
660 | ajastin.Interval = RandomGen.NextDouble(3.0, 5.0); |
---|
661 | ajastin.Timeout += Luovihollinen; |
---|
662 | ajastin.Start(); |
---|
663 | |
---|
664 | Timer ajastin2 = new Timer(); |
---|
665 | ajastin2.Interval = RandomGen.NextDouble(6.0, 8.0); |
---|
666 | ajastin2.Timeout += LuoOrkki; |
---|
667 | ajastin2.Start(); |
---|
668 | |
---|
669 | Timer ajastin3 = new Timer(); |
---|
670 | ajastin3.Interval = RandomGen.NextDouble(9.0, 12.0); |
---|
671 | ajastin3.Timeout += LuoAlien; |
---|
672 | ajastin3.Start(); |
---|
673 | |
---|
674 | if (alaspainLaskuri==null) LuoAaltoAikaLaskuri(); |
---|
675 | else |
---|
676 | { |
---|
677 | alaspainLaskuri.Value = MAX_KIERROSAIKA / kieorrokset; |
---|
678 | aaltoAikaLaskuri.Start(); |
---|
679 | } |
---|
680 | Timer.SingleShot(MAX_KIERROSAIKA / kieorrokset, delegate { ajastin.Stop(); ajastin2.Stop(); ajastin3.Stop(); TarkistaLoppu(); }); |
---|
681 | } |
---|
682 | |
---|
683 | |
---|
684 | void LuoAaltoPalkki() |
---|
685 | { |
---|
686 | aaltoPalkki = new DoubleMeter(20); |
---|
687 | aaltoPalkki.MaxValue = 20; |
---|
688 | aaltoPalkki.LowerLimit += AloitaAalto; |
---|
689 | |
---|
690 | aaltoNaytto = new ProgressBar(150, 20); |
---|
691 | aaltoNaytto.X = 0; |
---|
692 | aaltoNaytto.Y = Screen.Top - 20; |
---|
693 | aaltoNaytto.BindTo(aaltoPalkki); |
---|
694 | Add(aaltoNaytto); |
---|
695 | } |
---|
696 | |
---|
697 | void LuoAaltoAikaLaskuri() |
---|
698 | { |
---|
699 | alaspainLaskuri = new DoubleMeter(MAX_KIERROSAIKA / kieorrokset); |
---|
700 | |
---|
701 | aaltoAikaLaskuri = new Timer(); |
---|
702 | aaltoAikaLaskuri.Interval = 0.1; |
---|
703 | aaltoAikaLaskuri.Timeout += LaskeAlaspain; |
---|
704 | aaltoAikaLaskuri.Start(); |
---|
705 | |
---|
706 | Label aikaNaytto = new Label(); |
---|
707 | aikaNaytto.TextColor = Color.White; |
---|
708 | aikaNaytto.DecimalPlaces = 1; |
---|
709 | aikaNaytto.X = 0; |
---|
710 | aikaNaytto.Y = Screen.Top - 50; |
---|
711 | aikaNaytto.BindTo(alaspainLaskuri); |
---|
712 | Add(aikaNaytto); |
---|
713 | } |
---|
714 | |
---|
715 | void LaskeAlaspain() |
---|
716 | { |
---|
717 | alaspainLaskuri.Value -= 0.1; |
---|
718 | |
---|
719 | if (alaspainLaskuri.Value <= 0) |
---|
720 | { |
---|
721 | MessageDisplay.Add("Aika loppui..."); |
---|
722 | aaltoAikaLaskuri.Stop(); |
---|
723 | |
---|
724 | // täydennä mitä tapahtuu, kun aika loppuu |
---|
725 | } |
---|
726 | } |
---|
727 | |
---|
728 | |
---|
729 | void TarkistaLoppu() |
---|
730 | { |
---|
731 | Timer tarkistaja = new Timer(); |
---|
732 | tarkistaja.Interval = 0.5; |
---|
733 | tarkistaja.Timeout += delegate { if (vihut.Count <= 0) { tarkistaja.Stop(); AaltoLoppui(); } }; |
---|
734 | tarkistaja.Start(); |
---|
735 | } |
---|
736 | |
---|
737 | |
---|
738 | void AaltoLoppui() |
---|
739 | { |
---|
740 | kieorrokset--; |
---|
741 | aaltoPalkki.Value = 20; |
---|
742 | Timer aaltoLaskuri = new Timer(); |
---|
743 | aaltoLaskuri.Interval = 0.1; |
---|
744 | aaltoLaskuri.Timeout += delegate { aaltoPalkki.Value--; MessageDisplay.Add("Moi"); }; |
---|
745 | aaltoLaskuri.Start(20); |
---|
746 | } |
---|
747 | |
---|
748 | |
---|
749 | |
---|
750 | |
---|
751 | |
---|
752 | |
---|
753 | |
---|
754 | |
---|
755 | |
---|
756 | |
---|
757 | |
---|
758 | |
---|
759 | |
---|
760 | |
---|
761 | |
---|
762 | |
---|
763 | |
---|
764 | |
---|
765 | |
---|
766 | |
---|
767 | |
---|
768 | |
---|
769 | |
---|
770 | } |
---|