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 | public class tasohyppelypeli : PhysicsGame |
---|
10 | { |
---|
11 | string CurrentLevelFile = String.Empty; |
---|
12 | |
---|
13 | DoubleMeter elamaMittari; |
---|
14 | Image Ampujankuva = LoadImage("Ampuja"); |
---|
15 | Image DemoninKuva = LoadImage("Dem1.anm"); |
---|
16 | Image olionKuva = LoadImage("cafgar.anm"); |
---|
17 | Image magenKuva = LoadImage("Mage"); |
---|
18 | Image[] pelaajanAnim = LoadImages("pelaaja", "Pelaaja2", "Pelaaja3"); |
---|
19 | Image[] pelaajanAnimPeilattu; |
---|
20 | |
---|
21 | double nopeusYlos = 1250; |
---|
22 | Vector nopeusOikea = new Vector(250, 0); |
---|
23 | Vector nopeusVasen = new Vector(-250, 0); |
---|
24 | Image pelaajanKuva = LoadImage("pelaaja"); |
---|
25 | |
---|
26 | PlatformCharacter pelaaja; |
---|
27 | |
---|
28 | public override void Begin() |
---|
29 | { |
---|
30 | ClearAll(); |
---|
31 | MultiSelectWindow valikko = new MultiSelectWindow("Welcome to game", |
---|
32 | "tutorial", "Start level 1", "Start level 2", "End"); |
---|
33 | valikko.ItemSelected += PainettiinValikonNappia; |
---|
34 | Add(valikko); |
---|
35 | |
---|
36 | |
---|
37 | |
---|
38 | |
---|
39 | } |
---|
40 | void |
---|
41 | |
---|
42 | lataaKenttä() |
---|
43 | { |
---|
44 | } |
---|
45 | |
---|
46 | void LuoKenttä(string levelFile) |
---|
47 | { |
---|
48 | TileMap ruudut = TileMap.FromLevelAsset(levelFile); |
---|
49 | ruudut.SetTileMethod('_', LuoPalikka); |
---|
50 | ruudut.SetTileMethod('.', LuoSeina); |
---|
51 | ruudut.SetTileMethod('"', LuoPiikki); |
---|
52 | ruudut.SetTileMethod('!', LuoPelaaja); |
---|
53 | ruudut.SetTileMethod('+', LuoCafgar); |
---|
54 | ruudut.SetTileMethod('#', LuoDemoni); |
---|
55 | ruudut.SetTileMethod('-', LuoAmpuja); |
---|
56 | ruudut.SetTileMethod('=', LuoMaali); |
---|
57 | ruudut.SetTileMethod(';', LuoMage); |
---|
58 | ruudut.Execute(20, 20); |
---|
59 | Level.Background.Color = Color.ForestGreen; |
---|
60 | Camera.Follow(pelaaja); |
---|
61 | Gravity = new Vector(0, -5000); |
---|
62 | |
---|
63 | CurrentLevelFile = levelFile; |
---|
64 | } |
---|
65 | |
---|
66 | void LuoPalikka(Vector paikka, double leveys, double korkeus) |
---|
67 | { |
---|
68 | PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
69 | palikka.Position = paikka; |
---|
70 | palikka.Shape = Shape.Rectangle; |
---|
71 | palikka.Color = Color.DarkBrown; |
---|
72 | Add(palikka); |
---|
73 | } |
---|
74 | |
---|
75 | void LuoSeina(Vector paikka, double leveys, double korkeus) |
---|
76 | { |
---|
77 | PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
78 | seina.Position = paikka; |
---|
79 | seina.Shape = Shape.Rectangle; |
---|
80 | seina.Color = Color.DarkBrown; |
---|
81 | Add(seina); |
---|
82 | } |
---|
83 | |
---|
84 | void LuoPiikki(Vector paikka, double leveys, double korkeus) |
---|
85 | { |
---|
86 | PhysicsObject piikki = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
87 | piikki.Position = paikka; |
---|
88 | piikki.Shape = Shape.Triangle; |
---|
89 | piikki.Color = Color.Black; |
---|
90 | piikki.Tag = "piikki"; |
---|
91 | Add(piikki); |
---|
92 | } |
---|
93 | |
---|
94 | void AsetaOhjaimet() |
---|
95 | { |
---|
96 | Keyboard.Listen(Key.Escape, ButtonState.Down, ConfirmExit, "Poistu pelistä"); |
---|
97 | Keyboard.Listen(Key.A, ButtonState.Down, AsetaNopeus, "Pelaaja liikkuu vasemmalle", pelaaja, nopeusVasen); |
---|
98 | Keyboard.Listen(Key.A, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero); |
---|
99 | Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppy, "Pelaaja 1: Pelaaaja hyppää ylös", pelaaja, nopeusYlos); |
---|
100 | Keyboard.Listen(Key.D, ButtonState.Down, AsetaNopeus, "Pelaaja 1: Pelaaja Liikkuu Oikealle", pelaaja, nopeusOikea); |
---|
101 | Keyboard.Listen(Key.D, ButtonState.Released, AsetaNopeus, null, pelaaja, Vector.Zero); |
---|
102 | Keyboard.Listen(Key.E, ButtonState.Pressed, PelaajaLyo, null); |
---|
103 | Keyboard.Listen(Key.Q, ButtonState.Pressed, PelaajaLyo2, null); |
---|
104 | } |
---|
105 | |
---|
106 | void LuoPelaaja(Vector paikka, double leveys, double korkeus) |
---|
107 | { |
---|
108 | pelaaja = new PlatformCharacter(20, 40); |
---|
109 | pelaaja.Position = paikka; |
---|
110 | |
---|
111 | pelaaja.Color = Color.Aquamarine; |
---|
112 | pelaaja.Image = pelaajanKuva; |
---|
113 | pelaaja.CanRotate = false; |
---|
114 | AddCollisionHandler(pelaaja, "piikki", PelaajaKuolee); |
---|
115 | AddCollisionHandler(pelaaja, "vihu", PelaajaMenettaa); |
---|
116 | AddCollisionHandler(pelaaja, "Ampuja", PelaajaMenettaa2); |
---|
117 | AddCollisionHandler(pelaaja, "cafgar", PelaajaMenettaa2); |
---|
118 | AddCollisionHandler(pelaaja, "maali", SaavutitMaalin); |
---|
119 | PelaajanElamat(); |
---|
120 | pelaaja.Mass = 5000; |
---|
121 | pelaaja.Weapon = new PlasmaCannon(20, 5); |
---|
122 | pelaaja.Weapon.IsVisible = false; |
---|
123 | |
---|
124 | Add(pelaaja); |
---|
125 | } |
---|
126 | |
---|
127 | void AsetaNopeus(PhysicsObject Pelaaja, Vector nopeus) |
---|
128 | { |
---|
129 | Pelaaja.Velocity = nopeus; |
---|
130 | } |
---|
131 | |
---|
132 | |
---|
133 | |
---|
134 | void PelaajaKuolee(PhysicsObject pelaaja, PhysicsObject kohde) |
---|
135 | { |
---|
136 | pelaaja.Destroy(); |
---|
137 | Replay(); |
---|
138 | |
---|
139 | } |
---|
140 | void LuoCafgar(Vector paikka, double leveys, double korkeus) |
---|
141 | { |
---|
142 | PhysicsObject Cafgar = PhysicsObject.CreateStaticObject(20, 40); |
---|
143 | Cafgar.Position = paikka; |
---|
144 | Cafgar.Image = olionKuva; |
---|
145 | Cafgar.Color = Color.Black; |
---|
146 | Cafgar.Tag = "cafgar"; |
---|
147 | Cafgar.Brain = Aivot(); |
---|
148 | Add(Cafgar); |
---|
149 | } |
---|
150 | void LuoDemoni(Vector paikka, double leveys, double korkeus) |
---|
151 | { |
---|
152 | PhysicsObject Demoni = PhysicsObject.CreateStaticObject(20, 40); |
---|
153 | Demoni.Position = paikka; |
---|
154 | Demoni.Image = DemoninKuva; |
---|
155 | Demoni.Color = Color.Black; |
---|
156 | Demoni.Tag = "vihu"; |
---|
157 | Demoni.Brain = Aivot(); |
---|
158 | AddCollisionHandler(Demoni, "piikki", DemoniKuolee); |
---|
159 | AddCollisionHandler(Demoni, "Ampuja", DemoniKuolee); |
---|
160 | AddCollisionHandler(Demoni, "ammus", DemoniKuolee); |
---|
161 | Demoni.Mass = 500; |
---|
162 | Add(Demoni); |
---|
163 | } |
---|
164 | void Hyppy(PlatformCharacter pelaaja, double hypynVoima) |
---|
165 | { |
---|
166 | pelaaja.Jump(hypynVoima); |
---|
167 | } |
---|
168 | Brain Aivot() |
---|
169 | { |
---|
170 | FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja); |
---|
171 | seuraajanAivot.Speed = 150; |
---|
172 | seuraajanAivot.TargetFollowDistance = 200; |
---|
173 | seuraajanAivot.FollowAlways = true; |
---|
174 | seuraajanAivot.TargetCloseDistance = 20; |
---|
175 | |
---|
176 | |
---|
177 | |
---|
178 | seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella; |
---|
179 | return seuraajanAivot; |
---|
180 | } |
---|
181 | |
---|
182 | |
---|
183 | void mitaTapahtuuKunOllaanLahella(object lahettajaAivot, EventArgs e) |
---|
184 | { |
---|
185 | } |
---|
186 | void DemoniKuolee(PhysicsObject Demoni, PhysicsObject kohde) |
---|
187 | { |
---|
188 | Demoni.Destroy(); |
---|
189 | } |
---|
190 | Brain AivotAmpuja() |
---|
191 | { |
---|
192 | FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja); |
---|
193 | seuraajanAivot.Speed = 0; |
---|
194 | seuraajanAivot.TargetFollowDistance = 200; |
---|
195 | seuraajanAivot.FollowAlways = true; |
---|
196 | seuraajanAivot.TargetCloseDistance = 200; |
---|
197 | |
---|
198 | |
---|
199 | |
---|
200 | seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella2; |
---|
201 | return seuraajanAivot; |
---|
202 | } |
---|
203 | |
---|
204 | |
---|
205 | void mitaTapahtuuKunOllaanLahella2(object lahettajaAivot, EventArgs e) |
---|
206 | { |
---|
207 | ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Angle = (pelaaja.Position - (lahettajaAivot as Brain).Owner.Position).Angle; |
---|
208 | PhysicsObject ammus = ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Shoot(); |
---|
209 | if (ammus != null) |
---|
210 | { |
---|
211 | AddCollisionHandler(ammus, pelaaja, PelaajaMenettaa2); |
---|
212 | ammus.Tag = "ammus"; |
---|
213 | } |
---|
214 | } |
---|
215 | void LuoAmpuja(Vector paikka, double leveys, double korkeus) |
---|
216 | { |
---|
217 | |
---|
218 | PlatformCharacter Ampuja = new PlatformCharacter(20, 20); |
---|
219 | Ampuja.IgnoresGravity = true; |
---|
220 | Ampuja.IgnoresPhysicsLogics = true; |
---|
221 | Ampuja.MaxVelocity = 0.0; |
---|
222 | Ampuja.Position = paikka; |
---|
223 | Ampuja.Image = Ampujankuva; |
---|
224 | Ampuja.Color = Color.Black; |
---|
225 | Ampuja.Tag = "Ampuja"; |
---|
226 | Ampuja.Brain = AivotAmpuja(); |
---|
227 | Ampuja.Weapon = new PlasmaCannon(5, 3); |
---|
228 | Ampuja.Weapon.TimeBetweenUse = TimeSpan.FromSeconds(1); |
---|
229 | Add(Ampuja); |
---|
230 | } |
---|
231 | void PelaajaMenettaa() |
---|
232 | { |
---|
233 | } |
---|
234 | void PelaajanElamat() |
---|
235 | { |
---|
236 | elamaMittari = new DoubleMeter(50); |
---|
237 | elamaMittari.MaxValue = 25; |
---|
238 | ProgressBar elamaPalkki = new ProgressBar(150, 10); |
---|
239 | elamaPalkki.BindTo(elamaMittari); |
---|
240 | Add(elamaPalkki); |
---|
241 | |
---|
242 | elamaPalkki.X = Screen.Right - 150; |
---|
243 | elamaPalkki.Y = Screen.Top - 10; |
---|
244 | elamaPalkki.Angle = Angle.RightAngle; |
---|
245 | elamaPalkki.BarColor = Color.Green; |
---|
246 | elamaPalkki.BorderColor = Color.White; |
---|
247 | elamaPalkki.Angle = Angle.FromDegrees(90); |
---|
248 | elamaMittari.Value = 50; |
---|
249 | |
---|
250 | elamaMittari.LowerLimit += PelaajaTuhoutuu; |
---|
251 | |
---|
252 | |
---|
253 | } |
---|
254 | void PelaajaMenettaa(PhysicsObject pelaaja, PhysicsObject kohde) |
---|
255 | { |
---|
256 | elamaMittari.Value -= 3; |
---|
257 | } |
---|
258 | |
---|
259 | void PelaajaTuhoutuu(double mittarinArvo) |
---|
260 | { |
---|
261 | pelaaja.Destroy(); |
---|
262 | MessageDisplay.Add("Dead"); |
---|
263 | Replay(); |
---|
264 | } |
---|
265 | void PelaajaMenettaa2(PhysicsObject pelaaja, PhysicsObject kohde) |
---|
266 | { |
---|
267 | elamaMittari.Value -= 5; |
---|
268 | } |
---|
269 | void PelaajaLyo() |
---|
270 | { |
---|
271 | pelaaja.Animation = new Animation(pelaajanAnim); |
---|
272 | pelaaja.Animation.Start(); |
---|
273 | pelaaja.Animation.Played += new Action(AnimValm); |
---|
274 | pelaaja.Animation.FPS = 5; |
---|
275 | } |
---|
276 | void AnimValm() |
---|
277 | { |
---|
278 | pelaaja.Animation.Stop(); |
---|
279 | } |
---|
280 | void PelaajaLyo2() |
---|
281 | { |
---|
282 | pelaaja.Animation = new Animation(pelaajanAnimPeilattu); |
---|
283 | pelaaja.Animation.Start(); |
---|
284 | pelaaja.Animation.Played += new Action(AnimValm2); |
---|
285 | pelaaja.Animation.FPS = 5; |
---|
286 | } |
---|
287 | void AnimValm2() |
---|
288 | { |
---|
289 | pelaaja.Animation.Stop(); |
---|
290 | } |
---|
291 | void PainettiinValikonNappia(int valinta) |
---|
292 | { |
---|
293 | switch (valinta) |
---|
294 | { |
---|
295 | case 0: |
---|
296 | Aloitus("Tutorial map"); |
---|
297 | break; |
---|
298 | |
---|
299 | case 1: |
---|
300 | Aloitus("kartta"); |
---|
301 | break; |
---|
302 | |
---|
303 | case 2: |
---|
304 | Aloitus("Kentta2"); |
---|
305 | break; |
---|
306 | |
---|
307 | case 3: |
---|
308 | Exit(); |
---|
309 | break; |
---|
310 | } |
---|
311 | } |
---|
312 | void Aloitus(string levelFile) |
---|
313 | { |
---|
314 | |
---|
315 | pelaajanAnimPeilattu = Image.Mirror(pelaajanAnim); |
---|
316 | |
---|
317 | LuoKenttä(levelFile); |
---|
318 | lataaKenttä(); |
---|
319 | AsetaOhjaimet(); |
---|
320 | } |
---|
321 | |
---|
322 | |
---|
323 | void LuoMaali(Vector paikka, double leveys, double korkeus) |
---|
324 | { |
---|
325 | PhysicsObject maali = PhysicsObject.CreateStaticObject(40, 40); |
---|
326 | maali.Position = paikka; |
---|
327 | maali.Shape = Shape.Pentagon ; |
---|
328 | maali.Tag = "maali"; |
---|
329 | maali.Color = Color.Blue; |
---|
330 | |
---|
331 | Add(maali); |
---|
332 | } |
---|
333 | void SaavutitMaalin(PhysicsObject pelaaja, PhysicsObject kohde) |
---|
334 | { |
---|
335 | YouWin(); |
---|
336 | } |
---|
337 | void Replay() |
---|
338 | { |
---|
339 | ClearAll(); |
---|
340 | MultiSelectWindow valikko2 = new MultiSelectWindow("You Died", |
---|
341 | "Replay", "Menu", "End"); |
---|
342 | valikko2.ItemSelected += PainettiinValikonNappia2; |
---|
343 | Add(valikko2); |
---|
344 | } |
---|
345 | void PainettiinValikonNappia2(int valinta) |
---|
346 | { |
---|
347 | switch (valinta) |
---|
348 | { |
---|
349 | |
---|
350 | case 0: |
---|
351 | AloitaUudelleen(); |
---|
352 | break; |
---|
353 | |
---|
354 | case 1: |
---|
355 | Begin(); |
---|
356 | break; |
---|
357 | |
---|
358 | case 2: |
---|
359 | Exit(); |
---|
360 | break; |
---|
361 | } |
---|
362 | } |
---|
363 | void YouWin() |
---|
364 | { |
---|
365 | ClearAll(); |
---|
366 | MultiSelectWindow valikko3 = new MultiSelectWindow("You Win", |
---|
367 | "Replay", "Menu", "End"); |
---|
368 | valikko3.ItemSelected += PainettiinValikonNappia3; |
---|
369 | Add(valikko3); |
---|
370 | } |
---|
371 | void PainettiinValikonNappia3(int valinta) |
---|
372 | { |
---|
373 | switch (valinta) |
---|
374 | { |
---|
375 | case 0: |
---|
376 | AloitaUudelleen(); |
---|
377 | break; |
---|
378 | |
---|
379 | case 1: |
---|
380 | Begin(); |
---|
381 | break; |
---|
382 | |
---|
383 | case 2: |
---|
384 | Exit(); |
---|
385 | break; |
---|
386 | } |
---|
387 | } |
---|
388 | |
---|
389 | void AloitaUudelleen() |
---|
390 | { |
---|
391 | ClearAll(); |
---|
392 | pelaajanAnimPeilattu = Image.Mirror(pelaajanAnim); |
---|
393 | |
---|
394 | LuoKenttä(CurrentLevelFile); |
---|
395 | lataaKenttä(); |
---|
396 | AsetaOhjaimet(); |
---|
397 | } |
---|
398 | Brain AivotMage() |
---|
399 | { |
---|
400 | FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja); |
---|
401 | seuraajanAivot.Speed = 20; |
---|
402 | seuraajanAivot.TargetFollowDistance = 200; |
---|
403 | seuraajanAivot.FollowAlways = true; |
---|
404 | seuraajanAivot.TargetCloseDistance = 300; |
---|
405 | |
---|
406 | |
---|
407 | |
---|
408 | seuraajanAivot.TargetClose += mitaTapahtuuKunOllaanLahella3; |
---|
409 | return seuraajanAivot; |
---|
410 | } |
---|
411 | |
---|
412 | |
---|
413 | void mitaTapahtuuKunOllaanLahella3(object lahettajaAivot, EventArgs e) |
---|
414 | { |
---|
415 | ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Angle = (pelaaja.Position - (lahettajaAivot as Brain).Owner.Position).Angle; |
---|
416 | PhysicsObject ammus = ((lahettajaAivot as Brain).Owner as PlatformCharacter).Weapon.Shoot(); |
---|
417 | if (ammus != null) |
---|
418 | { |
---|
419 | AddCollisionHandler(ammus, pelaaja, PelaajaMenettaa2); |
---|
420 | ammus.Tag = "ammus"; |
---|
421 | } |
---|
422 | } |
---|
423 | void LuoMage(Vector paikka, double leveys, double korkeus) |
---|
424 | { |
---|
425 | PhysicsObject Mage = PhysicsObject.CreateStaticObject(20, 40); |
---|
426 | Mage.Position = paikka; |
---|
427 | Mage.Image = magenKuva; |
---|
428 | Mage.Color = Color.Black; |
---|
429 | Mage.Tag = "mage"; |
---|
430 | Mage.Brain = AivotMage(); |
---|
431 | Add(Mage); |
---|
432 | } |
---|
433 | |
---|
434 | } |
---|
435 | |
---|