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 Pako : PhysicsGame |
---|
10 | { |
---|
11 | const double nopeus = 200; |
---|
12 | const double hyppyNopeus = 800; |
---|
13 | const int RUUDUN_KOKO = 40; |
---|
14 | |
---|
15 | IntMeter kuolemaLaskuri = new IntMeter(0,0,9999999); |
---|
16 | |
---|
17 | int kenttaNro = 1; |
---|
18 | |
---|
19 | PlatformCharacter pelaaja1; |
---|
20 | Vector aloitus; |
---|
21 | |
---|
22 | Image pelaajanKuva = LoadImage("Pakopäähenkilö5"); |
---|
23 | Image morkoKuva = LoadImage("morko"); |
---|
24 | Image maaliKuva = LoadImage("maali2"); |
---|
25 | Image supermorkoKuva = LoadImage("supermorko"); |
---|
26 | Image lentomorkoKuva = LoadImage("lentomorko"); |
---|
27 | Image rajahdysKuva = LoadImage("rajahdys"); |
---|
28 | Image tasoKuva = LoadImage("taso"); |
---|
29 | |
---|
30 | SoundEffect maaliAani = LoadSoundEffect("maali"); |
---|
31 | |
---|
32 | List<Label> valikonKohdat; |
---|
33 | |
---|
34 | public override void Begin() |
---|
35 | { |
---|
36 | |
---|
37 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", |
---|
38 | "Aloita peli", "Ohjeet" ,"Lopeta"); |
---|
39 | Add(alkuValikko); |
---|
40 | //LuoKentta("kentta1"); |
---|
41 | alkuValikko.AddItemHandler(0, SeuraavaKentta); |
---|
42 | alkuValikko.AddItemHandler(1, NaytaOhjeet); |
---|
43 | alkuValikko.AddItemHandler(2, Exit); |
---|
44 | |
---|
45 | } |
---|
46 | |
---|
47 | |
---|
48 | void NaytaOhjeet() |
---|
49 | { |
---|
50 | MessageWindow ikkuna = new MessageWindow("Ohjeet"); |
---|
51 | ikkuna.Closed += delegate { Begin(); }; |
---|
52 | |
---|
53 | Add(ikkuna); |
---|
54 | |
---|
55 | Label tekstia = new Label("Pelaaja liikkuu nuolilla. Yritä olla osumatta mörköihin, vaikka ne näyttävätkin söpöiltä. Ja älä tipu laavaan. \n Jos osut hirviöihin tai laavaan, kuolet ja aloitat tason alusta. Paina F1 pelin aikana nähdäksesi tarkemmin pelin näppäimet"); |
---|
56 | |
---|
57 | ikkuna.Add(tekstia); |
---|
58 | |
---|
59 | |
---|
60 | |
---|
61 | } |
---|
62 | |
---|
63 | void rajahdys(PhysicsObject olio) |
---|
64 | { |
---|
65 | /* |
---|
66 | Explosion rajahdys = new Explosion(500); |
---|
67 | rajahdys.UseShockWave = false; |
---|
68 | rajahdys.Position = olio.Position; |
---|
69 | rajahdys.Speed = 500; |
---|
70 | Add(rajahdys); |
---|
71 | rajahdys.Image = rajahdysKuva; |
---|
72 | */ |
---|
73 | |
---|
74 | for (int i = 0; i < 75; i++) |
---|
75 | { |
---|
76 | PhysicsObject p = new PhysicsObject(50, 50); |
---|
77 | p.Position = olio.Position; |
---|
78 | p.Shape = Shape.Circle; |
---|
79 | p.Color = Color.Lerp(Color.Cyan, Color.Transparent, 0.5); |
---|
80 | p.Hit(RandomGen.NextVector(1000, 1000)); |
---|
81 | p.IgnoresCollisionResponse = true; |
---|
82 | p.LifetimeLeft = TimeSpan.FromSeconds(0.5); |
---|
83 | Add(p); |
---|
84 | } |
---|
85 | } |
---|
86 | |
---|
87 | |
---|
88 | void LuoKentta(string kenttaTiedostonNimi) |
---|
89 | { |
---|
90 | TileMap kentta = TileMap.FromLevelAsset(kenttaTiedostonNimi); |
---|
91 | kentta.SetTileMethod('#', LisaaTaso); |
---|
92 | kentta.SetTileMethod('N', LisaaPelaaja); |
---|
93 | kentta.SetTileMethod('K', LisaaMorko); |
---|
94 | kentta.SetTileMethod('M', LisaaMaali); |
---|
95 | kentta.SetTileMethod('L', LisaaLaava); |
---|
96 | kentta.SetTileMethod('S', LisaaSuperMorko); |
---|
97 | kentta.SetTileMethod('P', LisaaLentoMorko); |
---|
98 | kentta.Optimize('L'); |
---|
99 | kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
100 | Level.CreateBorders(); |
---|
101 | Level.Background.CreateGradient(Color.Black, Color.Gray); |
---|
102 | Gravity = new Vector(0, -1000); |
---|
103 | } |
---|
104 | |
---|
105 | void LisaaLaava(Vector paikka, double leveys, double korkeus) |
---|
106 | { |
---|
107 | PhysicsObject laava = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
108 | laava.Position = paikka; |
---|
109 | laava.Color = Color.Red; |
---|
110 | laava.Tag = "vihollinen"; |
---|
111 | Add(laava); |
---|
112 | } |
---|
113 | |
---|
114 | void LisaaMorko(Vector paikka, double leveys, double korkeus) |
---|
115 | { |
---|
116 | PlatformCharacter morko = new PlatformCharacter(leveys, korkeus); |
---|
117 | morko.Position = paikka; |
---|
118 | morko.Image = morkoKuva; |
---|
119 | morko.Tag = "vihollinen"; |
---|
120 | |
---|
121 | PlatformWandererBrain tasoAivot = new PlatformWandererBrain(); |
---|
122 | tasoAivot.Speed = 125; |
---|
123 | |
---|
124 | morko.Brain = tasoAivot; |
---|
125 | Add(morko); |
---|
126 | } |
---|
127 | |
---|
128 | void LisaaSuperMorko(Vector paikka, double leveys, double korkeus) |
---|
129 | { |
---|
130 | PlatformCharacter supermorko = new PlatformCharacter(leveys, korkeus); |
---|
131 | supermorko.Position = paikka; |
---|
132 | supermorko.Image = supermorkoKuva; |
---|
133 | supermorko.Tag = "vihollinen"; |
---|
134 | PlatformWandererBrain tasoAivot = new PlatformWandererBrain(); |
---|
135 | tasoAivot.Speed = 250; |
---|
136 | |
---|
137 | supermorko.Brain = tasoAivot; |
---|
138 | Add(supermorko); |
---|
139 | } |
---|
140 | |
---|
141 | |
---|
142 | |
---|
143 | void TormattiinLaavaan(PhysicsObject pelaaja1, PhysicsObject maali) |
---|
144 | { |
---|
145 | pelaaja1.Position = aloitus; |
---|
146 | } |
---|
147 | |
---|
148 | void SeuraavaKentta() |
---|
149 | { |
---|
150 | ClearAll(); |
---|
151 | |
---|
152 | if (kenttaNro == 1) LuoKentta("kentta1"); |
---|
153 | else if (kenttaNro == 2) LuoKentta("kentta2"); |
---|
154 | else if (kenttaNro == 3) LuoKentta("kentta3"); |
---|
155 | else if (kenttaNro == 4) LuoKentta("kentta4"); |
---|
156 | else { |
---|
157 | kenttaNro = 1; |
---|
158 | Begin(); |
---|
159 | } |
---|
160 | |
---|
161 | LisaaNappaimet(); |
---|
162 | |
---|
163 | Label pisteNaytto = new Label(); |
---|
164 | pisteNaytto.X = Screen.Left + 100; |
---|
165 | pisteNaytto.Y = Screen.Top - 100; |
---|
166 | pisteNaytto.Title = "Kuolemat"; |
---|
167 | pisteNaytto.TextColor = Color.Black; |
---|
168 | pisteNaytto.Color = Color.White; |
---|
169 | |
---|
170 | pisteNaytto.BindTo(kuolemaLaskuri); |
---|
171 | Add(pisteNaytto); |
---|
172 | |
---|
173 | Camera.Follow(pelaaja1); |
---|
174 | Camera.ZoomFactor = 1.2; |
---|
175 | Camera.StayInLevel = true; |
---|
176 | } |
---|
177 | |
---|
178 | void LisaaTaso(Vector paikka, double leveys, double korkeus) |
---|
179 | { |
---|
180 | PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
181 | taso.Position = paikka; |
---|
182 | taso.Image = tasoKuva; |
---|
183 | taso.CollisionIgnoreGroup = 1; |
---|
184 | Add(taso); |
---|
185 | } |
---|
186 | |
---|
187 | |
---|
188 | |
---|
189 | |
---|
190 | void LisaaPelaaja(Vector paikka, double leveys, double korkeus) |
---|
191 | { |
---|
192 | pelaaja1 = new PlatformCharacter(leveys*0.5, korkeus*1); |
---|
193 | pelaaja1.Position = paikka; |
---|
194 | pelaaja1.Tag = "pelaaja"; |
---|
195 | aloitus = paikka; |
---|
196 | pelaaja1.Mass = 4; |
---|
197 | pelaaja1.Image = pelaajanKuva; |
---|
198 | AddCollisionHandler(pelaaja1, "maali", TormattiinMaaliin); |
---|
199 | AddCollisionHandler(pelaaja1, "vihollinen", TormattiinViholliseen); |
---|
200 | Add(pelaaja1); |
---|
201 | } |
---|
202 | |
---|
203 | void LisaaLentoMorko(Vector paikka, double leveys, double korkeus) |
---|
204 | { |
---|
205 | PhysicsObject lentomorko = new PhysicsObject(leveys, korkeus); |
---|
206 | lentomorko.Position = paikka; |
---|
207 | lentomorko.Image = lentomorkoKuva; |
---|
208 | lentomorko.Tag = "vihollinen"; |
---|
209 | lentomorko.IgnoresCollisionResponse = true; |
---|
210 | FollowerBrain seuraajanAivot = new FollowerBrain("pelaaja"); |
---|
211 | seuraajanAivot.DistanceClose = 5; |
---|
212 | seuraajanAivot.TargetClose += delegate{ TormattiinViholliseen(pelaaja1, lentomorko);}; |
---|
213 | seuraajanAivot.Speed = 100; |
---|
214 | seuraajanAivot.Active = true; |
---|
215 | |
---|
216 | lentomorko.Brain = seuraajanAivot; |
---|
217 | Add(lentomorko); |
---|
218 | } |
---|
219 | |
---|
220 | void TormattiinViholliseen(PhysicsObject obj, PhysicsObject morko) |
---|
221 | { |
---|
222 | if (obj.IsDestroyed) return; |
---|
223 | |
---|
224 | rajahdys(obj); |
---|
225 | //obj.Position = aloitus; |
---|
226 | kuolemaLaskuri.Value++; |
---|
227 | obj.Destroy(); |
---|
228 | //obj.Velocity = Vector.Zero; |
---|
229 | |
---|
230 | Timer.SingleShot(1.0, delegate |
---|
231 | { |
---|
232 | SeuraavaKentta(); |
---|
233 | }); |
---|
234 | } |
---|
235 | |
---|
236 | |
---|
237 | void TormattiinMaaliin(PhysicsObject pelaaja, PhysicsObject maali) |
---|
238 | { |
---|
239 | kenttaNro++; |
---|
240 | SeuraavaKentta(); |
---|
241 | } |
---|
242 | |
---|
243 | |
---|
244 | void LisaaMaali(Vector paikka, double leveys, double korkeus) |
---|
245 | { |
---|
246 | |
---|
247 | PhysicsObject maali = new PhysicsObject(leveys, korkeus*2); |
---|
248 | maali.Tag = "maali"; |
---|
249 | maali.Image = maaliKuva; |
---|
250 | maali.MakeStatic(); |
---|
251 | Add(maali); |
---|
252 | maali.Position = paikka + new Vector(0, korkeus/2); |
---|
253 | } |
---|
254 | |
---|
255 | |
---|
256 | void LisaaNappaimet() |
---|
257 | { |
---|
258 | |
---|
259 | |
---|
260 | |
---|
261 | Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); |
---|
262 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
263 | |
---|
264 | Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus); |
---|
265 | Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus); |
---|
266 | Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus); |
---|
267 | |
---|
268 | |
---|
269 | } |
---|
270 | |
---|
271 | void Liikuta(PlatformCharacter hahmo, double nopeus) |
---|
272 | { |
---|
273 | hahmo.Walk(nopeus); |
---|
274 | } |
---|
275 | |
---|
276 | void Hyppaa(PlatformCharacter hahmo, double nopeus) |
---|
277 | { |
---|
278 | hahmo.Jump(nopeus); |
---|
279 | } |
---|
280 | |
---|
281 | void alkuVlikko() |
---|
282 | { |
---|
283 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Pako", |
---|
284 | "Aloita peli", "Parhaat pisteet", "Lopeta"); |
---|
285 | //alkuValikko.AddItemHandler(0, ); |
---|
286 | //alkuValikko.AddItemHandler(1,); |
---|
287 | alkuValikko.AddItemHandler(2, Exit); |
---|
288 | } |
---|
289 | |
---|
290 | |
---|
291 | void Valikko() |
---|
292 | { |
---|
293 | ClearAll(); |
---|
294 | |
---|
295 | valikonKohdat = new List<Label>(); |
---|
296 | |
---|
297 | Label kohta1 = new Label("Aloita uusi peli"); |
---|
298 | kohta1.Position = new Vector(0, 40); |
---|
299 | valikonKohdat.Add(kohta1); |
---|
300 | |
---|
301 | foreach (Label valikonKohta in valikonKohdat) |
---|
302 | { |
---|
303 | Add(valikonKohta); |
---|
304 | } |
---|
305 | } |
---|
306 | |
---|
307 | |
---|
308 | |
---|
309 | } |
---|