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 | // apuva lista: |
---|
10 | |
---|
11 | |
---|
12 | public class Portti : PhysicsObject |
---|
13 | { |
---|
14 | public int MistaVie { get; set; } |
---|
15 | public int MihinVie { get; set; } |
---|
16 | public string Vari { get; set; } |
---|
17 | |
---|
18 | public Portti(double leveys, double korkeus) |
---|
19 | : base(leveys, korkeus) |
---|
20 | { |
---|
21 | |
---|
22 | } |
---|
23 | |
---|
24 | } |
---|
25 | |
---|
26 | public class Protokolla236 : PhysicsGame |
---|
27 | { |
---|
28 | |
---|
29 | Image tausta = LoadImage("taustakuvastarfield"); |
---|
30 | |
---|
31 | Image pelaajankuva = LoadImage("pelaaja1.0"); |
---|
32 | |
---|
33 | Image taso2 = LoadImage("taso2"); |
---|
34 | Image taso3 = LoadImage("taso3"); |
---|
35 | Image taso4 = LoadImage("taso4"); |
---|
36 | private Image[] tasoanim = LoadImages("taso1", "taso1.1", "taso1.2", "taso1.3", "taso1", "taso1", "taso1.3", "taso1", "taso1.1"); |
---|
37 | private Image[] liekkianim = LoadImages("liekki1.1", "liekki1.2"); |
---|
38 | private Image[] taso5anim = LoadImages("taso5.1", "taso5.2", "taso5.3", "taso5.4", "taso5.5", "taso5.6", "taso5.7"); |
---|
39 | private Image[] porttianim = LoadImages("portti01", "portti02", "portti03", "portti04", "portti03", "portti02"); |
---|
40 | |
---|
41 | Image Block021 = LoadImage("Block2.1"); |
---|
42 | Image BlockMusta = LoadImage("Blockmusta"); |
---|
43 | Image Blocklasi = LoadImage("Blocklasi"); |
---|
44 | Image Block121 = LoadImage("Block121"); |
---|
45 | Image Lasitausta = LoadImage("lasitausta"); |
---|
46 | Image isolasi1 = LoadImage("isolasi1"); |
---|
47 | Image isolasi2 = LoadImage("isolasi2"); |
---|
48 | Image isolasi3 = LoadImage("isolasi3"); |
---|
49 | Image isolasi4 = LoadImage("isolasi4"); |
---|
50 | Image isolasi5 = LoadImage("isolasi5"); |
---|
51 | Image isolasi6 = LoadImage("isolasi6"); |
---|
52 | Image isolasi7 = LoadImage("isolasi7"); |
---|
53 | Image isolasi8 = LoadImage("isolasi8"); |
---|
54 | private Image[] LabRat = LoadImages("Block1.1", "Block1.2", "Block1.3", "Block1.2"); |
---|
55 | private Image[] Block06anim = LoadImages("Block06", "Block061", "Block062", "Block063", "Block064", "Block063", "Block062", "Block063", "Block061"); |
---|
56 | |
---|
57 | private Image[] vihu1 = LoadImages("vihu01", "vihu02"); |
---|
58 | private Image[] vihu2 = LoadImages("vihu05", "vihu051", "vihu052", "vihu053", "vihu054"); |
---|
59 | private Image[] vihu3 = LoadImages("vihu031", "vihu032", "vihu033"); |
---|
60 | private Image[] vihu4 = LoadImages("vihu041", "vihu042", "vihu043", "vihu042"); |
---|
61 | Image sikioanim = LoadImage("sikio03"); |
---|
62 | |
---|
63 | |
---|
64 | |
---|
65 | private Image[] tasoliekkianim = LoadImages("taso23.1", "taso23.2", "taso23.3"); |
---|
66 | |
---|
67 | SoundEffect raketti = LoadSoundEffect("raketti"); |
---|
68 | List<Pelaaja> pelaajat = new List<Pelaaja>(); |
---|
69 | Timer MessageDisplaynAjastin; |
---|
70 | |
---|
71 | SoundEffect laser = LoadSoundEffect("lasershot"); |
---|
72 | private Image[] ammusanim = LoadImages("ammus", "ammus"); |
---|
73 | |
---|
74 | private string[] soitin = { "nitrome - N.M.D", "nitrome - enemy 585 3", "nitrome - bullethead" }; |
---|
75 | |
---|
76 | SoundEffect rajahdysAani = LoadSoundEffect("the"); |
---|
77 | bool joMaalissa = false; |
---|
78 | |
---|
79 | int K = RandomGen.NextInt(0, 2); |
---|
80 | int nopeus = RandomGen.NextInt(3, 5); |
---|
81 | int kenttaNro = 1; |
---|
82 | private string mihinSpawnaaSeuraavaksi = "00FF00"; // ihan ekassa kentässä spawnaa tähän |
---|
83 | |
---|
84 | public override void Begin() |
---|
85 | { |
---|
86 | MessageDisplay.Position += new Vector(Screen.Width / 2, 0); |
---|
87 | |
---|
88 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", |
---|
89 | "yksinpeli tarina (1P)", "selviytyminen (2P):ei toimi", "Lopeta"); |
---|
90 | Add(alkuValikko); |
---|
91 | |
---|
92 | alkuValikko.AddItemHandler(0, AloitaPeli); |
---|
93 | alkuValikko.AddItemHandler(1, selviytyminen); |
---|
94 | alkuValikko.AddItemHandler(2, Exit); |
---|
95 | MediaPlayer.Play(soitin[K]); |
---|
96 | |
---|
97 | } |
---|
98 | void AloitaPeli() |
---|
99 | { |
---|
100 | ClearAll(); |
---|
101 | seuraavakentta(); |
---|
102 | |
---|
103 | MediaPlayer.IsRepeating = true; |
---|
104 | MessageDisplay.Add("Protokolla:236"); |
---|
105 | MessageDisplay.Add("Tehtäväsi on päästä ulos piiritetyn avaruustukikohdan sisältä."); |
---|
106 | MessageDisplay.Add("Kulje vihollis linjojen läpi äläkä jää turhaan odottamaan omaa tuhoasi!!!"); |
---|
107 | Keyboard.Listen(Key.F1, ButtonState.Pressed, Begin, null); |
---|
108 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null); |
---|
109 | } |
---|
110 | |
---|
111 | void selviytyminen() |
---|
112 | { |
---|
113 | MediaPlayer.Play(soitin[2]); |
---|
114 | kenttaNro = 5; |
---|
115 | AloitaPeli(); |
---|
116 | } |
---|
117 | |
---|
118 | void luokentta(string kenttakuva) |
---|
119 | { |
---|
120 | ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttakuva); |
---|
121 | |
---|
122 | Pelaaja pelaaja1 = luoPelaaja(50, 50); |
---|
123 | LuoElamaLaskuri(pelaaja1, Screen.Left + 150, Screen.Top - 20, Color.Red); |
---|
124 | pelaaja1.Image = LoadImage("pelaaja1.0"); |
---|
125 | |
---|
126 | //Pelaaja pelaaja2 = luoPelaaja(50, 50); |
---|
127 | //LuoElamaLaskuri(pelaaja2, Screen.Right - 150, Screen.Top - 20, Color.Blue); |
---|
128 | //pelaaja2.Image = LoadImage("pelaaja2.0"); |
---|
129 | |
---|
130 | |
---|
131 | ruudut.SetTileMethod(Color.FromHexCode("00FF00"), AsetaPelaajanPaikka, "00FF00", pelaaja1); |
---|
132 | //ruudut.SetTileMethod(Color.FromHexCode("00FFC5"), LuoPelaaja2); 6DFF54 |
---|
133 | ruudut.SetTileMethod(Color.FromHexCode("6DFF54"), Luomaali); |
---|
134 | ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoTaso, new Animation(tasoanim)); |
---|
135 | ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), LuoTaso, (Animation)taso3); |
---|
136 | ruudut.SetTileMethod(Color.FromHexCode("54FFEB"), LuoTaso, (Animation)taso4); |
---|
137 | ruudut.SetTileMethod(Color.FromHexCode("FF0087"), LuoTaso, new Animation(taso5anim)); |
---|
138 | ruudut.SetTileMethod(Color.FromHexCode("0000FF"), LuoTaso, new Animation(tasoliekkianim)); |
---|
139 | ruudut.SetTileMethod(Color.FromHexCode("D9FF93"), LuoTaso, (Animation)Blocklasi); |
---|
140 | ruudut.SetTileMethod(Color.FromHexCode("FF42C0"), LuoTausta, new Animation(LabRat)); |
---|
141 | ruudut.SetTileMethod(Color.FromHexCode("B7FF9E"), LuoTausta, new Animation(Block06anim)); |
---|
142 | ruudut.SetTileMethod(Color.FromHexCode("42B9FF"), LuoTausta, (Animation)BlockMusta); |
---|
143 | ruudut.SetTileMethod(Color.FromHexCode("00FF90"), LuoTausta, (Animation)Block021); |
---|
144 | ruudut.SetTileMethod(Color.FromHexCode("478DFF"), LuoTausta, (Animation)Block121); |
---|
145 | ruudut.SetTileMethod(Color.FromHexCode("FFDB4C"), LuoTausta, (Animation)Lasitausta); |
---|
146 | ruudut.SetTileMethod(Color.FromHexCode("A72BFF"), LuoTausta, (Animation)isolasi1); |
---|
147 | ruudut.SetTileMethod(Color.FromHexCode("A73AFF"), LuoTausta, (Animation)isolasi2); |
---|
148 | ruudut.SetTileMethod(Color.FromHexCode("A75BFF"), LuoTausta, (Animation)isolasi3); |
---|
149 | ruudut.SetTileMethod(Color.FromHexCode("A746FF"), LuoTausta, (Animation)isolasi4); |
---|
150 | ruudut.SetTileMethod(Color.FromHexCode("A778FF"), LuoTausta, (Animation)isolasi5); |
---|
151 | ruudut.SetTileMethod(Color.FromHexCode("A797FF"), LuoTausta, (Animation)isolasi6); |
---|
152 | ruudut.SetTileMethod(Color.FromHexCode("A788FF"), LuoTausta, (Animation)isolasi7); |
---|
153 | ruudut.SetTileMethod(Color.FromHexCode("A7BAFF"), LuoTausta, (Animation)isolasi8); |
---|
154 | ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LuoVihu, new Animation(vihu2)); |
---|
155 | ruudut.SetTileMethod(Color.FromHexCode("FF5700"), LuoVihu, new Animation(vihu3)); |
---|
156 | ruudut.SetTileMethod(Color.FromHexCode("FF5711"), LuoVihu, new Animation(vihu4)); |
---|
157 | |
---|
158 | ruudut.SetTileMethod(Color.FromHexCode("A860FF"), LuoPortti, 1, 2, "000102"); // kentta1 --> kentta2 |
---|
159 | ruudut.SetTileMethod(Color.FromHexCode("BD87FF"), LuoPortti, 2, 1, "000201"); // kentta2 --> kentta1 |
---|
160 | ruudut.SetTileMethod(Color.FromHexCode("FFA8AC"), LuoPortti, 2, 3, "000203"); // kentta2 --> kentta3 |
---|
161 | ruudut.SetTileMethod(Color.FromHexCode("6DFF81"), LuoPortti, 3, 2, "000302"); // kentta3 --> kentta2 |
---|
162 | ruudut.SetTileMethod(Color.FromHexCode("35FFA7"), LuoPortti, 3, 4, "000304"); // kentta3 --> kentta4 |
---|
163 | ruudut.SetTileMethod(Color.FromHexCode("548DFF"), LuoPortti, 4, 3, "000403"); // kentta4 --> kentta3 |
---|
164 | ruudut.SetTileMethod(Color.FromHexCode("4C70FF"), LuoPortti, 4, 5, "000405"); // kentta4 --> kentta5 |
---|
165 | ruudut.SetTileMethod(Color.FromHexCode("AF87FF"), LuoPortti, 4, 5, "B00405"); // kentta4 --> kentta5 |
---|
166 | ruudut.SetTileMethod(Color.FromHexCode("FF9BAC"), LuoPortti, 5, 4, "B00504"); // kentta5 --> kentta4 |
---|
167 | ruudut.SetTileMethod(Color.FromHexCode("9A02FF"), LuoPortti, 5, 4, "000504"); // kentta5 --> kentta4 |
---|
168 | ruudut.SetTileMethod(Color.FromHexCode("FFCE93"), LuoPortti, 5, 6, "000506"); // kentta5 --> kentta6 |
---|
169 | ruudut.SetTileMethod(Color.FromHexCode("FF4989"), LuoPortti, 6, 5, "000605"); // kentta6 --> kentta5 |
---|
170 | ruudut.SetTileMethod(Color.FromHexCode("79FF3F"), LuoPortti, 6, 1, "000601"); // kentta6 --> kentta1 |
---|
171 | ruudut.SetTileMethod(Color.FromHexCode("35FFDA"), LuoPortti, 1, 6, "000106"); // kentta1 --> kentta6 |
---|
172 | ruudut.SetTileMethod(Color.FromHexCode("FF8797"), LuoPortti, 4, 7, "000407"); // kentta4 --> kentta7 |
---|
173 | ruudut.SetTileMethod(Color.FromHexCode("FF8793"), LuoPortti, 7, 4, "000704"); // kentta7 --> kentta4 |
---|
174 | |
---|
175 | ruudut.SetTileMethod(Color.FromHexCode("000102"), AsetaPelaajanPaikka, "000102", pelaaja1); |
---|
176 | ruudut.SetTileMethod(Color.FromHexCode("000201"), AsetaPelaajanPaikka, "000201", pelaaja1); |
---|
177 | ruudut.SetTileMethod(Color.FromHexCode("000203"), AsetaPelaajanPaikka, "000203", pelaaja1); |
---|
178 | ruudut.SetTileMethod(Color.FromHexCode("000302"), AsetaPelaajanPaikka, "000302", pelaaja1); |
---|
179 | ruudut.SetTileMethod(Color.FromHexCode("000304"), AsetaPelaajanPaikka, "000304", pelaaja1); |
---|
180 | ruudut.SetTileMethod(Color.FromHexCode("000403"), AsetaPelaajanPaikka, "000403", pelaaja1); |
---|
181 | ruudut.SetTileMethod(Color.FromHexCode("000405"), AsetaPelaajanPaikka, "000405", pelaaja1); |
---|
182 | ruudut.SetTileMethod(Color.FromHexCode("000504"), AsetaPelaajanPaikka, "000504", pelaaja1); |
---|
183 | ruudut.SetTileMethod(Color.FromHexCode("000506"), AsetaPelaajanPaikka, "000506", pelaaja1); |
---|
184 | ruudut.SetTileMethod(Color.FromHexCode("000605"), AsetaPelaajanPaikka, "000605", pelaaja1); |
---|
185 | ruudut.SetTileMethod(Color.FromHexCode("000601"), AsetaPelaajanPaikka, "000601", pelaaja1); |
---|
186 | ruudut.SetTileMethod(Color.FromHexCode("000106"), AsetaPelaajanPaikka, "000106", pelaaja1); |
---|
187 | ruudut.SetTileMethod(Color.FromHexCode("000407"), AsetaPelaajanPaikka, "000407", pelaaja1); |
---|
188 | ruudut.SetTileMethod(Color.FromHexCode("000704"), AsetaPelaajanPaikka, "000704", pelaaja1); |
---|
189 | ruudut.SetTileMethod(Color.FromHexCode("B00405"), AsetaPelaajanPaikka, "B00405", pelaaja1); |
---|
190 | ruudut.SetTileMethod(Color.FromHexCode("B00504"), AsetaPelaajanPaikka, "B00504", pelaaja1); |
---|
191 | |
---|
192 | ruudut.Execute(50, 50); |
---|
193 | |
---|
194 | /* taustakuva */ |
---|
195 | GameObject tausta1 = new GameObject(Level.Width, Level.Height); |
---|
196 | tausta1.Image = tausta; |
---|
197 | Add(tausta1, -3); |
---|
198 | Layers[-3].RelativeTransition = new Vector(0.2, 0.2); |
---|
199 | |
---|
200 | |
---|
201 | Gravity = new Vector(0.0, -150.0); |
---|
202 | Level.CreateBorders(0.5, true); |
---|
203 | LisaaNappaimet(pelaajat); |
---|
204 | Camera.Follow(pelaajat.ToArray()); |
---|
205 | } |
---|
206 | |
---|
207 | void AsetaPelaajanPaikka(Vector paikka, double leveys, double korkeus, String mihinSpawnaa, Pelaaja pelaaja) |
---|
208 | { |
---|
209 | if (mihinSpawnaa == this.mihinSpawnaaSeuraavaksi) pelaaja.Position = paikka; |
---|
210 | } |
---|
211 | |
---|
212 | void Luomaali(Vector paikka, double leveys, double korkeus) |
---|
213 | { |
---|
214 | PhysicsObject maali = new PhysicsObject(leveys, korkeus); |
---|
215 | maali.MakeStatic(); |
---|
216 | maali.Position = paikka; |
---|
217 | maali.IsVisible = false; |
---|
218 | |
---|
219 | AddCollisionHandler(maali, "pelaaja", maaliintultiin); |
---|
220 | |
---|
221 | Add(maali); |
---|
222 | |
---|
223 | } |
---|
224 | |
---|
225 | void maaliintultiin(PhysicsObject obj, PhysicsObject toinen) |
---|
226 | { |
---|
227 | if (joMaalissa) { return; } |
---|
228 | joMaalissa = true; |
---|
229 | MessageDisplay.Add("Hyvä!"); |
---|
230 | MessageDisplay.Add("Pääsit pois aluksesta. Ehjänä... Ja..."); |
---|
231 | MessageDisplay.Add("valmiina kostoon!"); |
---|
232 | |
---|
233 | } |
---|
234 | |
---|
235 | void LuoPortti(Vector paikka, double leveys, double korkeus, int mistaVie, int mihinVie, String variHexJohonPelaajaSpawnaa) |
---|
236 | { |
---|
237 | Portti portti = new Portti(leveys, korkeus); |
---|
238 | portti.MakeStatic(); |
---|
239 | portti.Position = paikka; |
---|
240 | //portti.Tag = "portti"; |
---|
241 | portti.MistaVie = mistaVie; |
---|
242 | portti.MihinVie = mihinVie; |
---|
243 | portti.Vari = variHexJohonPelaajaSpawnaa; |
---|
244 | Add(portti); |
---|
245 | portti.Animation = new Animation(porttianim); |
---|
246 | portti.Animation.Start(); |
---|
247 | portti.Animation.FPS = RandomGen.NextDouble(3.0, 7.0); |
---|
248 | } |
---|
249 | |
---|
250 | void seuraavakentta() |
---|
251 | { |
---|
252 | ClearAll(); |
---|
253 | pelaajat.Clear(); |
---|
254 | |
---|
255 | if (kenttaNro == 1) luokentta("Kentta1"); |
---|
256 | else if (kenttaNro == 2) luokentta("Kentta2"); |
---|
257 | else if (kenttaNro == 3) luokentta("Kentta3"); |
---|
258 | else if (kenttaNro == 4) luokentta("Kentta4"); |
---|
259 | else if (kenttaNro == 5) luokentta("Kentta5"); |
---|
260 | else if (kenttaNro == 6) luokentta("Kentta6"); |
---|
261 | else if (kenttaNro == 7) luokentta("Kentta7"); |
---|
262 | |
---|
263 | } |
---|
264 | |
---|
265 | |
---|
266 | |
---|
267 | void TormattiinPorttiin(Pelaaja pelaaja, Portti portti) |
---|
268 | { |
---|
269 | kenttaNro = portti.MihinVie; |
---|
270 | this.mihinSpawnaaSeuraavaksi = portti.Vari; |
---|
271 | seuraavakentta(); |
---|
272 | } |
---|
273 | |
---|
274 | void LuoTaso(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
275 | { |
---|
276 | PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
277 | taso.Position = paikka; |
---|
278 | taso.Tag = "taso"; |
---|
279 | Add(taso); |
---|
280 | taso.Animation = kuva; |
---|
281 | taso.Animation.Start(); |
---|
282 | taso.Animation.FPS = nopeus; |
---|
283 | } |
---|
284 | |
---|
285 | void LuoTausta(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
286 | { |
---|
287 | GameObject Block = new GameObject(50, 50); |
---|
288 | Block.Position = paikka; |
---|
289 | Add(Block, -2); |
---|
290 | Block.Animation = kuva; |
---|
291 | Block.Animation.Start(); |
---|
292 | Block.Animation.FPS = nopeus; |
---|
293 | } |
---|
294 | |
---|
295 | |
---|
296 | void LuoElamaLaskuri(Pelaaja pelaaja, double x, double y, Color vari) |
---|
297 | { |
---|
298 | ProgressBar elamaPalkki = new ProgressBar(200, 10); |
---|
299 | elamaPalkki.X = 0; |
---|
300 | elamaPalkki.BarColor = vari; |
---|
301 | elamaPalkki.Y = y; |
---|
302 | elamaPalkki.BindTo(pelaaja.ElamaLaskuri); |
---|
303 | elamaPalkki.BorderColor = Color.White; |
---|
304 | Add(elamaPalkki); |
---|
305 | } |
---|
306 | |
---|
307 | void PelaajaOsuu(PhysicsObject pel, PhysicsObject kohde, string tyyppi) |
---|
308 | { |
---|
309 | if (!(pel is Pelaaja)) return; |
---|
310 | Pelaaja pelaaja = (Pelaaja)pel; |
---|
311 | |
---|
312 | switch (tyyppi) |
---|
313 | { |
---|
314 | case "sikio": |
---|
315 | pelaaja.ElamaLaskuri.Value -= 1; |
---|
316 | break; |
---|
317 | case "vihu": |
---|
318 | pelaaja.ElamaLaskuri.Value -= 2; |
---|
319 | break; |
---|
320 | case "taso": |
---|
321 | double maxvel = 0; |
---|
322 | if (Math.Abs(pelaaja.Velocity.X) > Math.Abs(pelaaja.Velocity.Y)) { maxvel = Math.Round(pelaaja.Velocity.X); } else { maxvel = Math.Round(pelaaja.Velocity.Y); } |
---|
323 | int arvo = (int)Math.Abs(Math.Round(maxvel / 90)) - 4; |
---|
324 | |
---|
325 | if (arvo > 0) |
---|
326 | { |
---|
327 | pelaaja.ElamaLaskuri.Value -= arvo; |
---|
328 | } |
---|
329 | break; |
---|
330 | } |
---|
331 | |
---|
332 | |
---|
333 | } |
---|
334 | |
---|
335 | |
---|
336 | void ElamaLoppui() |
---|
337 | { |
---|
338 | kenttaNro = 1; |
---|
339 | mihinSpawnaaSeuraavaksi = "00FF00"; |
---|
340 | |
---|
341 | Kuolit(); |
---|
342 | pelaajat.Clear(); |
---|
343 | |
---|
344 | Timer.SingleShot(5.0, seuraavakentta); |
---|
345 | } |
---|
346 | |
---|
347 | void Kuolit() |
---|
348 | { |
---|
349 | Explosion rajahdys = new Explosion(100); |
---|
350 | rajahdys.Position = pelaajat[0].Position; |
---|
351 | rajahdys.Sound = rajahdysAani; |
---|
352 | Add(rajahdys); |
---|
353 | pelaajat[0].Destroy(); |
---|
354 | |
---|
355 | |
---|
356 | } |
---|
357 | |
---|
358 | |
---|
359 | void ElamaLoppuiSurvivalissa() |
---|
360 | { |
---|
361 | foreach (var item in pelaajat) |
---|
362 | { |
---|
363 | if (!item.IsDestroyed) |
---|
364 | item.Destroy(); |
---|
365 | } |
---|
366 | pelaajat.Clear(); |
---|
367 | seuraavakentta(); |
---|
368 | |
---|
369 | |
---|
370 | } |
---|
371 | |
---|
372 | |
---|
373 | Pelaaja alustaPelaaja() |
---|
374 | { |
---|
375 | Pelaaja pelaaja = new Pelaaja(50, 50); |
---|
376 | if (kenttaNro == 5) |
---|
377 | pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppuiSurvivalissa(); }; |
---|
378 | else pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppui(); }; |
---|
379 | pelaaja.CanRotate = false; |
---|
380 | Camera.StayInLevel = true; |
---|
381 | pelaaja.Shape = Shape.FromImage(pelaajankuva); |
---|
382 | pelaaja.Tag = "pelaaja"; |
---|
383 | pelaaja.Restitution = 0.1; |
---|
384 | return pelaaja; |
---|
385 | } |
---|
386 | |
---|
387 | Pelaaja luoPelaaja(double leveys, double korkeus) |
---|
388 | { |
---|
389 | Pelaaja pelaaja = alustaPelaaja(); |
---|
390 | Add(pelaaja); |
---|
391 | |
---|
392 | AddCollisionHandler<Pelaaja, Portti>(pelaaja, TormattiinPorttiin); |
---|
393 | AddCollisionHandler(pelaaja, "vihu", delegate(Pelaaja p, PhysicsObject vihu) { PelaajaOsuu(p, vihu, "vihu"); }); |
---|
394 | AddCollisionHandler(pelaaja, "sikio", delegate(Pelaaja p, PhysicsObject sikio) { PelaajaOsuu(p, sikio, "sikio"); }); |
---|
395 | AddCollisionHandler(pelaaja, "taso", delegate(Pelaaja p, PhysicsObject taso) { PelaajaOsuu(p, taso, "taso"); }); |
---|
396 | |
---|
397 | AssaultRifle pelaajanAse = new AssaultRifle(30, 10); |
---|
398 | pelaajanAse.IsVisible = false; |
---|
399 | pelaajanAse.Angle = Angle.RightAngle; |
---|
400 | pelaajanAse.AttackSound = laser; |
---|
401 | pelaajanAse.InfiniteAmmo = true; |
---|
402 | pelaajanAse.Power.DefaultValue = 200; |
---|
403 | pelaajanAse.FireRate = 8; |
---|
404 | pelaajanAse.ProjectileCollision = AmmusOsui; |
---|
405 | pelaaja.Add(pelaajanAse); |
---|
406 | pelaaja.Ase = pelaajanAse; |
---|
407 | |
---|
408 | GameObject liekki = new GameObject(50, 50); |
---|
409 | liekki.Animation = new Animation(liekkianim); |
---|
410 | liekki.IsVisible = false; |
---|
411 | liekki.Animation.Start(); |
---|
412 | pelaaja.Add(liekki); |
---|
413 | liekki.Y = -25; |
---|
414 | pelaaja.Liekki = liekki; |
---|
415 | |
---|
416 | pelaajat.Add(pelaaja); |
---|
417 | return pelaaja; |
---|
418 | } |
---|
419 | |
---|
420 | |
---|
421 | |
---|
422 | private void LisaaNappaimet(List<Pelaaja> pelaajat) |
---|
423 | { |
---|
424 | Keyboard.Listen(Key.Left, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[0]); |
---|
425 | Keyboard.Listen(Key.Right, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[0]); |
---|
426 | Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, 800.0, pelaajat[0]); |
---|
427 | Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[0].Ase); |
---|
428 | |
---|
429 | //----------------------------------------------------------------- |
---|
430 | |
---|
431 | Keyboard.Listen(Key.Up, ButtonState.Down, liekkianimaatio, null, pelaajat[0].Liekki, true); |
---|
432 | Keyboard.Listen(Key.Up, ButtonState.Released, liekkianimaatio, null, pelaajat[0].Liekki, false); |
---|
433 | |
---|
434 | /* Ei vielä toimi kaksinpeli |
---|
435 | //-2-2-2-2-2-2-2--22-2-2-2-2-22-2-22-2-22-22-2-22-22--22-22-2-2-2-2-2-2-22-22-2---------- |
---|
436 | Keyboard.Listen(Key.A, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[1]); |
---|
437 | Keyboard.Listen(Key.D, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[1]); |
---|
438 | Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaajat[1]); |
---|
439 | Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[1].Ase); |
---|
440 | |
---|
441 | //----------------------------------------------------------------- |
---|
442 | Keyboard.Listen(Key.W, ButtonState.Down, liekkianimaatio, null, pelaajat[1].Liekki, true); |
---|
443 | Keyboard.Listen(Key.W, ButtonState.Released, liekkianimaatio, null, pelaajat[1].Liekki, false); |
---|
444 | * */ |
---|
445 | |
---|
446 | } |
---|
447 | |
---|
448 | void LuoPelaaja2(Vector paikka, double leveys, double korkeus) |
---|
449 | { |
---|
450 | } |
---|
451 | |
---|
452 | void AmmuAseella(AssaultRifle ase) |
---|
453 | { |
---|
454 | PhysicsObject ammus = ase.Shoot(); |
---|
455 | if (ammus != null) |
---|
456 | { |
---|
457 | ammus.Angle = ase.AbsoluteAngle - Angle.RightAngle; |
---|
458 | ammus.Size *= 3; |
---|
459 | |
---|
460 | ammus.Animation = new Animation(ammusanim); |
---|
461 | ammus.Animation.Start(); |
---|
462 | ammus.Animation.FPS = 3; |
---|
463 | } |
---|
464 | } |
---|
465 | |
---|
466 | void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde) |
---|
467 | { |
---|
468 | ammus.Destroy(); |
---|
469 | if (kohde.Tag.ToString() == "vihu") |
---|
470 | { |
---|
471 | kohde.Destroy(); |
---|
472 | |
---|
473 | } |
---|
474 | else if (kohde.Tag.ToString() == "sikio") |
---|
475 | { |
---|
476 | kohde.Destroy(); |
---|
477 | } |
---|
478 | |
---|
479 | } |
---|
480 | |
---|
481 | void liekkianimaatio(GameObject liekki, bool totuus) |
---|
482 | { |
---|
483 | liekki.IsVisible = totuus; |
---|
484 | if (totuus) |
---|
485 | { |
---|
486 | |
---|
487 | if (!raketti.IsPlaying) |
---|
488 | { |
---|
489 | raketti.Play(); |
---|
490 | } |
---|
491 | } |
---|
492 | else |
---|
493 | { |
---|
494 | raketti.Stop(); |
---|
495 | } |
---|
496 | } |
---|
497 | |
---|
498 | void kaannaPelaajaa(double kulmanopeus, PhysicsObject pelaaja) |
---|
499 | { |
---|
500 | pelaaja.Angle += Angle.FromDegrees(kulmanopeus); |
---|
501 | } |
---|
502 | void LiikutaPelaajaa(double nopeus, PhysicsObject pelaaja1) |
---|
503 | { |
---|
504 | pelaaja1.Push(Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle + Angle.RightAngle)); |
---|
505 | } |
---|
506 | |
---|
507 | void LuoVihu(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
508 | { |
---|
509 | PhysicsObject vihu = new PhysicsObject(50, 50); |
---|
510 | vihu.Shape = Shape.Circle; |
---|
511 | vihu.Animation = kuva; |
---|
512 | vihu.Position = paikka; |
---|
513 | vihu.Tag = "vihu"; |
---|
514 | vihu.AngularDamping = 0.1; |
---|
515 | vihu.IgnoresGravity = true; |
---|
516 | Add(vihu, 1); |
---|
517 | |
---|
518 | RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50); |
---|
519 | satunnaisAivot.ChangeMovementSeconds = 5; |
---|
520 | vihu.Brain = satunnaisAivot; |
---|
521 | vihu.Animation.Start(); |
---|
522 | vihu.Animation.FPS = 4; |
---|
523 | |
---|
524 | AddCollisionHandler(vihu, "vihu", luovihuosuma); |
---|
525 | } |
---|
526 | |
---|
527 | void luovihuosuma(PhysicsObject vihu, PhysicsObject kohde) |
---|
528 | { |
---|
529 | if (kohde.Tag.ToString() == "vihu") luosikio(vihu.Position, 50, 50, new Animation(sikioanim)); |
---|
530 | } |
---|
531 | |
---|
532 | void luosikio(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
533 | { |
---|
534 | PhysicsObject sikio = new PhysicsObject(35, 35); |
---|
535 | sikio.Shape = Shape.Circle; |
---|
536 | sikio.Animation = kuva; |
---|
537 | sikio.Position = paikka; |
---|
538 | sikio.Tag = "sikio"; |
---|
539 | sikio.AngularDamping = 0.1; |
---|
540 | sikio.IgnoresGravity = true; |
---|
541 | |
---|
542 | Add(sikio, 1); |
---|
543 | |
---|
544 | RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50); |
---|
545 | satunnaisAivot.ChangeMovementSeconds = 5; |
---|
546 | sikio.Brain = satunnaisAivot; |
---|
547 | sikio.Animation.Start(); |
---|
548 | sikio.Animation.FPS = 4; |
---|
549 | } |
---|
550 | |
---|
551 | |
---|
552 | } |
---|
553 | |
---|
554 | public class Pelaaja : PhysicsObject |
---|
555 | { |
---|
556 | AssaultRifle ase; |
---|
557 | GameObject liekki; |
---|
558 | DoubleMeter elamaLaskuri; |
---|
559 | public AssaultRifle Ase { get { if (ase != null) return ase; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { ase = value; } } |
---|
560 | public GameObject Liekki { get { if (liekki != null) return liekki; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { liekki = value; } } |
---|
561 | public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } } |
---|
562 | public Pelaaja(double leveys, double korkeus) |
---|
563 | : base(leveys, korkeus) |
---|
564 | { |
---|
565 | elamaLaskuri = new DoubleMeter(25, 0, 25); |
---|
566 | |
---|
567 | } |
---|
568 | |
---|
569 | |
---|
570 | |
---|
571 | } |
---|