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 Peli : PhysicsGame |
---|
10 | { |
---|
11 | const double nopeus = 300; |
---|
12 | const double hyppyNopeus = 1000; |
---|
13 | const int RUUDUN_KOKO = 40; |
---|
14 | |
---|
15 | PlatformCharacter pelaaja1; |
---|
16 | |
---|
17 | IntMeter laskuri; |
---|
18 | IntMeter laskuri2; |
---|
19 | |
---|
20 | Label naytto2; |
---|
21 | |
---|
22 | List<Label> Valikonkohdat; |
---|
23 | |
---|
24 | Image pelaajanKuva = LoadImage("Buddy"); |
---|
25 | Image kelloKuva = LoadImage("kello"); |
---|
26 | Image kukkaKuva = LoadImage("kukka"); |
---|
27 | Image haamu1Kuva = LoadImage("haamu3"); |
---|
28 | Image haamu2Kuva = LoadImage("haamu4"); |
---|
29 | |
---|
30 | public override void Begin() |
---|
31 | { |
---|
32 | aloitusvalikko(); |
---|
33 | } |
---|
34 | |
---|
35 | void luoKentta() |
---|
36 | { |
---|
37 | TileMap kentta = TileMap.FromFile("kentta1.txt"); |
---|
38 | kentta['-'] = lisaaTaso; |
---|
39 | kentta['_'] = lisaaTaso2; |
---|
40 | kentta['+'] = lisaaKello; |
---|
41 | kentta['Y'] = lisaaKukka; |
---|
42 | kentta['B'] = lisaaPelaaja; |
---|
43 | kentta['1'] = lisaaHaamu1; |
---|
44 | kentta['2'] = lisaaHaamu2; |
---|
45 | kentta.Insert(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
46 | Level.CreateBorders(1.0, true); |
---|
47 | Level.Background.CreateStars(); |
---|
48 | } |
---|
49 | |
---|
50 | |
---|
51 | |
---|
52 | PhysicsObject lisaaTaso() |
---|
53 | { |
---|
54 | PhysicsObject taso = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO); |
---|
55 | taso.Image = LoadImage("pilvi"); |
---|
56 | return taso; |
---|
57 | } |
---|
58 | |
---|
59 | PhysicsObject lisaaTaso2() |
---|
60 | { |
---|
61 | PhysicsObject taso2 = PhysicsObject.CreateStaticObject(3 * RUUDUN_KOKO, RUUDUN_KOKO); |
---|
62 | taso2.Image = LoadImage("ruoho"); |
---|
63 | return taso2; |
---|
64 | } |
---|
65 | |
---|
66 | PhysicsObject lisaaKello() |
---|
67 | { |
---|
68 | PhysicsObject kello = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
69 | kello.Image = kelloKuva; |
---|
70 | kello.CollisionIgnoreGroup = 1; |
---|
71 | kello.Angle = RandomGen.NextAngle(); |
---|
72 | kello.Tag = "kello"; |
---|
73 | return kello; |
---|
74 | } |
---|
75 | |
---|
76 | PhysicsObject lisaaKukka() |
---|
77 | { |
---|
78 | PhysicsObject kukka = PhysicsObject.CreateStaticObject(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
79 | kukka.Image = kukkaKuva; |
---|
80 | kukka.IgnoresCollisionResponse = true; |
---|
81 | kukka.Tag = "kukka"; |
---|
82 | return kukka; |
---|
83 | } |
---|
84 | |
---|
85 | PlatformCharacter lisaaPelaaja() |
---|
86 | { |
---|
87 | pelaaja1 = new PlatformCharacter(30, 40); |
---|
88 | pelaaja1.Mass = 6.0; |
---|
89 | pelaaja1.Image = pelaajanKuva; |
---|
90 | AddCollisionHandler(pelaaja1, osuKelloon); |
---|
91 | AddCollisionHandler(pelaaja1, osuHaamuun); |
---|
92 | AddCollisionHandler(pelaaja1, osuKukkaan); |
---|
93 | |
---|
94 | return pelaaja1; |
---|
95 | } |
---|
96 | |
---|
97 | PhysicsObject lisaaHaamu1() |
---|
98 | { |
---|
99 | PhysicsObject haamu1 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
100 | haamu1.Image = LoadImage("haamu3"); |
---|
101 | haamu1.Tag = "haamu"; |
---|
102 | haamu1.CanRotate = false; |
---|
103 | haamu1.CollisionIgnoreGroup = 1; |
---|
104 | haamu1.IgnoresGravity = true; |
---|
105 | Timer asetaAivot = new Timer(); |
---|
106 | asetaAivot.Tag = haamu1; |
---|
107 | asetaAivot.Trigger += asetaHaamulleAivot; |
---|
108 | asetaAivot.Interval = 1.5; |
---|
109 | asetaAivot.Start(); |
---|
110 | return haamu1; |
---|
111 | } |
---|
112 | |
---|
113 | PhysicsObject lisaaHaamu2() |
---|
114 | { |
---|
115 | PhysicsObject haamu2 = new PhysicsObject(RUUDUN_KOKO, RUUDUN_KOKO); |
---|
116 | haamu2.Image = LoadImage("haamu4"); |
---|
117 | haamu2.Tag = "haamu"; |
---|
118 | haamu2.CanRotate = false; |
---|
119 | haamu2.CollisionIgnoreGroup = 1; |
---|
120 | haamu2.IgnoresGravity = true; |
---|
121 | Timer asetaAivot = new Timer(); |
---|
122 | asetaAivot.Tag = haamu2; |
---|
123 | asetaAivot.Trigger += asetaHaamulleAivot; |
---|
124 | asetaAivot.Interval = 2.0; |
---|
125 | asetaAivot.Start(); |
---|
126 | return haamu2; |
---|
127 | } |
---|
128 | |
---|
129 | void lisaaNappaimet() |
---|
130 | { |
---|
131 | Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); |
---|
132 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, "Päävalikkoon"); |
---|
133 | |
---|
134 | Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus); |
---|
135 | Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus); |
---|
136 | Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus); |
---|
137 | Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, -nopeus); |
---|
138 | Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, nopeus); |
---|
139 | Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus); |
---|
140 | |
---|
141 | ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä"); |
---|
142 | } |
---|
143 | |
---|
144 | void liikuta(PlatformCharacter hahmo, double nopeus) |
---|
145 | { |
---|
146 | hahmo.Walk(nopeus); |
---|
147 | } |
---|
148 | |
---|
149 | void hyppaa(PlatformCharacter hahmo, double nopeus) |
---|
150 | { |
---|
151 | hahmo.Jump(nopeus); |
---|
152 | } |
---|
153 | |
---|
154 | |
---|
155 | |
---|
156 | IntMeter elamat() |
---|
157 | { |
---|
158 | laskuri = new IntMeter(5); |
---|
159 | Label naytto = new Label(140, 70); |
---|
160 | naytto.Title = "Lives left "; |
---|
161 | naytto.Size = new Vector(140, 60); |
---|
162 | naytto.X = Screen.Left + 90; |
---|
163 | naytto.Y = Screen.Top - 80; |
---|
164 | naytto.TextColor = Color.White; |
---|
165 | naytto.BindTo(laskuri); |
---|
166 | Add(naytto); |
---|
167 | return laskuri; |
---|
168 | |
---|
169 | } |
---|
170 | |
---|
171 | IntMeter kerattavat() |
---|
172 | { |
---|
173 | laskuri2 = new IntMeter(0); |
---|
174 | laskuri2.MaxValue = 35; |
---|
175 | laskuri2.Changed += new Meter<int>.OnChangeHandler(laskuri2_Changed); |
---|
176 | laskuri2.UpperLimit += laskuriYlarajassa; |
---|
177 | naytto2 = new Label(400, 70); |
---|
178 | naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString(); |
---|
179 | naytto2.Size = new Vector(400, 70); |
---|
180 | naytto2.X = Screen.Left + 190; |
---|
181 | naytto2.Y = Screen.Top - 50; |
---|
182 | naytto2.TextColor = Color.White; |
---|
183 | Add(naytto2); |
---|
184 | return laskuri; |
---|
185 | |
---|
186 | } |
---|
187 | |
---|
188 | void laskuri2_Changed(int oldValue, int newValue) |
---|
189 | { |
---|
190 | naytto2.Text = "Ghosts & clocks destroyed " + laskuri2.Value.ToString() + " / " + laskuri2.MaxValue.ToString(); |
---|
191 | } |
---|
192 | |
---|
193 | void laskuriYlarajassa(int arvo) |
---|
194 | { |
---|
195 | Label Win = new Label ("Mission done!"); |
---|
196 | Win.Position = new Vector(10, 0); |
---|
197 | Win.TextColor = RandomGen.NextColor(); |
---|
198 | Add(Win); |
---|
199 | Timer.SingleShot(3.0, aloitusvalikko); |
---|
200 | } |
---|
201 | |
---|
202 | |
---|
203 | |
---|
204 | |
---|
205 | void osuKelloon(PhysicsObject hahmo, PhysicsObject kohde) |
---|
206 | { |
---|
207 | if (kohde.Tag.ToString() == "kello") |
---|
208 | { |
---|
209 | kohde.Destroy(); |
---|
210 | laskuri2.Value += 1; |
---|
211 | } |
---|
212 | |
---|
213 | } |
---|
214 | |
---|
215 | void osuHaamuun(PhysicsObject hahmo, PhysicsObject kohde) |
---|
216 | { |
---|
217 | if (kohde.Tag.ToString() == "haamu") |
---|
218 | { |
---|
219 | if (kohde.Top < pelaaja1.Position.Y) |
---|
220 | { |
---|
221 | kohde.Destroy(); |
---|
222 | laskuri2.Value += 1; |
---|
223 | } |
---|
224 | else |
---|
225 | { |
---|
226 | laskuri.Value--; |
---|
227 | Vector lento = hahmo.Position - kohde.Position; |
---|
228 | hahmo.Hit(1000*lento); |
---|
229 | } |
---|
230 | |
---|
231 | if ( laskuri.Value == 0) |
---|
232 | { |
---|
233 | hahmo.Destroy(); |
---|
234 | Label naytto = new Label(700, - 600); |
---|
235 | naytto.TextColor = RandomGen.NextColor(); |
---|
236 | naytto.Text = "Game Over"; |
---|
237 | |
---|
238 | Add(naytto); |
---|
239 | |
---|
240 | } |
---|
241 | } |
---|
242 | |
---|
243 | } |
---|
244 | |
---|
245 | void osuKukkaan (PhysicsObject pelaaja1, PhysicsObject kohde) |
---|
246 | { |
---|
247 | if (kohde.Tag.ToString() == "kukka") |
---|
248 | { |
---|
249 | Label apua = new Label(600, - 800); |
---|
250 | apua.X = Screen.Left + 700; |
---|
251 | apua.Y = Screen.Top - 700; |
---|
252 | apua.TextColor = Color.White; |
---|
253 | apua.Text = "Help us by destroying those ghosts and clocks."; |
---|
254 | Timer.SingleShot(1.0, apua.Destroy); |
---|
255 | Add(apua); |
---|
256 | } |
---|
257 | } |
---|
258 | |
---|
259 | |
---|
260 | |
---|
261 | |
---|
262 | void aloitusvalikko() |
---|
263 | { |
---|
264 | ClearAll(); |
---|
265 | Valikonkohdat = new List<Label>(); |
---|
266 | Level.Background.CreateGradient (Color.Orange, Color.White); |
---|
267 | |
---|
268 | Label kohta1 = new Label("Start Game"); |
---|
269 | kohta1.Position = new Vector(0, 50); |
---|
270 | Valikonkohdat.Add(kohta1); |
---|
271 | |
---|
272 | Label kohta2 = new Label("Exit"); |
---|
273 | kohta2.Position = new Vector(0, -40); |
---|
274 | Valikonkohdat.Add(kohta2); |
---|
275 | |
---|
276 | |
---|
277 | foreach (Label Valikonkohta in Valikonkohdat) |
---|
278 | Add(Valikonkohta); |
---|
279 | |
---|
280 | Mouse.ListenOn(kohta1, MouseButton.Left, ButtonState.Pressed, Start, null); |
---|
281 | Mouse.ListenOn(kohta2, MouseButton.Left, ButtonState.Pressed, Lopeta, null); |
---|
282 | |
---|
283 | Mouse.IsCursorVisible = true; |
---|
284 | Mouse.ListenMovement(1.0, ValikossaLiikkuminen, null); |
---|
285 | |
---|
286 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, Lopeta, null); |
---|
287 | |
---|
288 | } |
---|
289 | |
---|
290 | void ValikossaLiikkuminen(AnalogState hiirenTila) |
---|
291 | { |
---|
292 | foreach (Label kohta in Valikonkohdat) |
---|
293 | { |
---|
294 | if (Mouse.IsCursorOn(kohta)) |
---|
295 | { |
---|
296 | kohta.TextColor = Color.Orange; |
---|
297 | } |
---|
298 | else |
---|
299 | { |
---|
300 | kohta.TextColor = Color.White; |
---|
301 | } |
---|
302 | } |
---|
303 | |
---|
304 | } |
---|
305 | |
---|
306 | void Lopeta() |
---|
307 | { |
---|
308 | Exit(); |
---|
309 | } |
---|
310 | |
---|
311 | void Start() |
---|
312 | { |
---|
313 | ClearAll(); |
---|
314 | Valikonkohdat = new List<Label>(); |
---|
315 | Level.BackgroundColor = Color.Black; |
---|
316 | |
---|
317 | Label kohta3 = new Label("Just a normal day. Buddy was on his way home, when he met couple mean ghosts. Or not just an couple, lots of them. He tried to avoid them, but then he met dying flowers, which were dying because of the ghosts. To help them, Buddy must destroy all ghosts and clocks, that have appeared..."); |
---|
318 | kohta3.Size = new Vector(600, 130); |
---|
319 | kohta3.SizeMode = TextSizeMode.Wrapped; |
---|
320 | kohta3.Position = new Vector(0, 100); |
---|
321 | kohta3.TextColor = Color.White; |
---|
322 | Valikonkohdat.Add(kohta3); |
---|
323 | |
---|
324 | Label kohta4 = new Label("Start"); |
---|
325 | kohta4.Position = new Vector(0, -40); |
---|
326 | kohta4.TextColor = Color.Orange; |
---|
327 | Valikonkohdat.Add(kohta4); |
---|
328 | |
---|
329 | foreach (Label Valikonkohta in Valikonkohdat) |
---|
330 | Add(Valikonkohta); |
---|
331 | |
---|
332 | Mouse.ListenOn(kohta4, MouseButton.Left, ButtonState.Pressed, Aloita, null); |
---|
333 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, aloitusvalikko, null); |
---|
334 | Keyboard.Listen(Key.Enter, ButtonState.Pressed, Aloita, null); |
---|
335 | |
---|
336 | Mouse.IsCursorVisible = true; |
---|
337 | } |
---|
338 | |
---|
339 | |
---|
340 | void Aloita() |
---|
341 | { |
---|
342 | |
---|
343 | ClearAll(); |
---|
344 | Gravity = new Vector(0, -1000); |
---|
345 | |
---|
346 | luoKentta(); |
---|
347 | lisaaNappaimet(); |
---|
348 | elamat(); |
---|
349 | kerattavat(); |
---|
350 | |
---|
351 | Camera.Follow(pelaaja1); |
---|
352 | Camera.ZoomFactor =2.0; |
---|
353 | //Camera.ZoomToLevel(); |
---|
354 | Camera.StayInLevel = true; |
---|
355 | |
---|
356 | |
---|
357 | } |
---|
358 | |
---|
359 | |
---|
360 | void asetaHaamulleAivot(Timer sender) |
---|
361 | { |
---|
362 | PathFollowerBrain aivot = new PathFollowerBrain(150); |
---|
363 | aivot.Path = new List<Vector>() { |
---|
364 | new Vector((sender.Tag as PhysicsObject).Position.X - 100, (sender.Tag as PhysicsObject).Position.Y), |
---|
365 | new Vector((sender.Tag as PhysicsObject).Position.X, (sender.Tag as PhysicsObject).Position.Y)}; |
---|
366 | aivot.Owner = (sender.Tag as PhysicsObject); |
---|
367 | aivot.Loop = true; |
---|
368 | aivot.Speed = 150; |
---|
369 | aivot.Active = true; |
---|
370 | sender.Stop(); |
---|
371 | } |
---|
372 | |
---|
373 | |
---|
374 | } |
---|