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 | Vector hyppynopeus = new Vector(0, 550); |
---|
12 | Vector nopeus = new Vector(800, 0); |
---|
13 | DoubleMeter kello = new DoubleMeter(0); |
---|
14 | |
---|
15 | ScoreList topLista = new ScoreList(5, false, 0); |
---|
16 | |
---|
17 | |
---|
18 | PhysicsObject ukko; |
---|
19 | |
---|
20 | PhysicsObject palikka; |
---|
21 | PhysicsObject punpalikka; |
---|
22 | |
---|
23 | Timer aikaLaskuri = new Timer(); |
---|
24 | DoubleMeter alaspainLaskuri = new DoubleMeter(250); |
---|
25 | |
---|
26 | int kenttanro = 1; |
---|
27 | |
---|
28 | Image peruna = LoadImage("peruna"); |
---|
29 | Image portal1 = LoadImage("portal1"); |
---|
30 | SoundEffect shiumm = LoadSoundEffect("shiumm"); |
---|
31 | |
---|
32 | public override void Begin() |
---|
33 | { |
---|
34 | Gravity = new Vector(0.0, -1000.0); |
---|
35 | |
---|
36 | if (DataStorage.Exists("pisteet.xml")) |
---|
37 | topLista = DataStorage.Load<ScoreList>(topLista, "pisteet.xml"); |
---|
38 | |
---|
39 | LuoAikaLaskuri(); |
---|
40 | hahmot(); |
---|
41 | kontrollit(); |
---|
42 | |
---|
43 | Camera.Follow(ukko); |
---|
44 | |
---|
45 | if (kenttanro == 1) |
---|
46 | { |
---|
47 | kentta1(); |
---|
48 | } |
---|
49 | if (kenttanro == 2) |
---|
50 | { |
---|
51 | kentta2(); |
---|
52 | } |
---|
53 | |
---|
54 | } |
---|
55 | |
---|
56 | void hahmot() |
---|
57 | { |
---|
58 | ukko = new PhysicsObject(35, 50); |
---|
59 | ukko.Shape = Shape.Circle; |
---|
60 | ukko.Image = LoadImage("peruna"); |
---|
61 | ukko.KineticFriction = 0.7; |
---|
62 | ukko.Restitution = 0.15; |
---|
63 | ukko.X = -875.0; |
---|
64 | ukko.Y = 275.0; |
---|
65 | AddCollisionHandler(ukko, kuolema); |
---|
66 | AddCollisionHandler(ukko, seuraavakentta); |
---|
67 | |
---|
68 | Add(ukko); |
---|
69 | } |
---|
70 | |
---|
71 | void kentta1() |
---|
72 | { |
---|
73 | kentta1reunat(); |
---|
74 | kentta1palikat(); |
---|
75 | |
---|
76 | Level.BackgroundColor = new Color(10, 10, 50); |
---|
77 | } |
---|
78 | |
---|
79 | void kentta2() |
---|
80 | { |
---|
81 | ukko.Width = 42; |
---|
82 | ukko.Height = 42; |
---|
83 | |
---|
84 | kentta2reunat(); |
---|
85 | kentta2palikat(); |
---|
86 | |
---|
87 | ukko.X = -1260; |
---|
88 | ukko.Y = 250; |
---|
89 | |
---|
90 | Level.BackgroundColor = new Color(95, 70, 0); |
---|
91 | } |
---|
92 | |
---|
93 | void kentta2reunat() |
---|
94 | { |
---|
95 | PhysicsObject alareuna = PhysicsObject.CreateStaticObject(8000, 500); |
---|
96 | alareuna.Y = -575; |
---|
97 | alareuna.IgnoresGravity = true; |
---|
98 | alareuna.Color = new Color(255, 190, 0); |
---|
99 | Add(alareuna); |
---|
100 | |
---|
101 | PhysicsObject ylareuna = PhysicsObject.CreateStaticObject(8000, 500); |
---|
102 | ylareuna.Y = 575; |
---|
103 | ylareuna.IgnoresGravity = true; |
---|
104 | ylareuna.Color = new Color(255, 190, 0); |
---|
105 | Add(ylareuna); |
---|
106 | |
---|
107 | PhysicsObject vasenreuna = PhysicsObject.CreateStaticObject(750, 1750); |
---|
108 | vasenreuna.X = -1775; |
---|
109 | vasenreuna.IgnoresGravity = true; |
---|
110 | vasenreuna.Color = new Color(255, 190, 0); |
---|
111 | Add(vasenreuna); |
---|
112 | |
---|
113 | PhysicsObject oikeareuna = PhysicsObject.CreateStaticObject(750, 1750); |
---|
114 | oikeareuna.X = 4000; |
---|
115 | oikeareuna.IgnoresGravity = true; |
---|
116 | oikeareuna.Color = new Color(255, 190, 0); |
---|
117 | Add(oikeareuna); |
---|
118 | } |
---|
119 | |
---|
120 | void kentta2palikat() |
---|
121 | { |
---|
122 | palikka = palikat2(-1260, 195, 125, 30, Angle.FromDegrees(0)); |
---|
123 | palikka = palikat2(-1200, 280, 30, 200, Angle.FromDegrees(0)); |
---|
124 | palikka = palikat2(-1350, -10, 250, 30, Angle.FromDegrees(-50)); |
---|
125 | palikka = palikat2(-1180, -170, 250, 30, Angle.FromDegrees(-35)); |
---|
126 | palikka = palikat2(-970, -280, 250, 30, Angle.FromDegrees(-20)); |
---|
127 | palikka = palikat2(-450, -310, 250, 30, Angle.FromDegrees(15)); |
---|
128 | palikka = palikat2(-220, -228, 250, 30, Angle.FromDegrees(25)); |
---|
129 | |
---|
130 | PhysicsObject boost = new PhysicsObject(10, 10); |
---|
131 | boost.Shape = Shape.Circle; |
---|
132 | Add(boost); |
---|
133 | } |
---|
134 | |
---|
135 | void kentta1reunat() |
---|
136 | { |
---|
137 | |
---|
138 | PhysicsObject alareuna = PhysicsObject.CreateStaticObject(3000, 500); |
---|
139 | alareuna.Y = -575; |
---|
140 | alareuna.IgnoresGravity = true; |
---|
141 | alareuna.Color = new Color(0, 215, 215); |
---|
142 | Add(alareuna); |
---|
143 | |
---|
144 | PhysicsObject ylareuna = PhysicsObject.CreateStaticObject(3000, 500); |
---|
145 | ylareuna.Y = 575; |
---|
146 | ylareuna.IgnoresGravity = true; |
---|
147 | ylareuna.Color = new Color(0, 215, 215); |
---|
148 | Add(ylareuna); |
---|
149 | |
---|
150 | PhysicsObject vasenreuna = PhysicsObject.CreateStaticObject(750, 1750); |
---|
151 | vasenreuna.X = -1775; |
---|
152 | vasenreuna.IgnoresGravity = true; |
---|
153 | vasenreuna.Color = new Color(0, 215, 215); |
---|
154 | Add(vasenreuna); |
---|
155 | |
---|
156 | PhysicsObject oikeareuna = PhysicsObject.CreateStaticObject(750, 1750); |
---|
157 | oikeareuna.X = 1775; |
---|
158 | oikeareuna.IgnoresGravity = true; |
---|
159 | oikeareuna.Color = new Color(0, 215, 215); |
---|
160 | Add(oikeareuna); |
---|
161 | } |
---|
162 | |
---|
163 | void kentta1palikat() |
---|
164 | { |
---|
165 | palikka = palikat(-805.0, 300.0, 50, 1050, Angle.FromDegrees(0)); |
---|
166 | palikka = palikat(-775.0, -210.0, 80, 30, Angle.FromDegrees(0)); |
---|
167 | palikka = palikat(-775.0, -90.0, 60, 30, Angle.FromDegrees(0)); |
---|
168 | palikka = palikat(-775.0, 30.0, 40, 30, Angle.FromDegrees(0)); |
---|
169 | palikka = palikat(-380.0, 150.0, 60, 750, Angle.FromDegrees(0)); |
---|
170 | palikka = palikat(-240.0, -190.0, 28, 20, Angle.FromDegrees(0)); |
---|
171 | palikka = palikat(-140.0, -60.0, 28, 20, Angle.FromDegrees(0)); |
---|
172 | palikka = palikat(-40.0, 70.0, 28, 20, Angle.FromDegrees(0)); |
---|
173 | palikka = palikat(-276.0, 170.0, 250, 30, Angle.FromDegrees(0)); |
---|
174 | palikka = palikat(200.0, 260.0, 600, 20, Angle.FromDegrees(0)); |
---|
175 | palikka = palikat(70, -33, 30, 605, Angle.FromDegrees(0)); |
---|
176 | palikka = palikat(-1050, 220, 450, 30, Angle.FromDegrees(0)); |
---|
177 | palikka = palikat(-655.0, -298.0, 15, 55, Angle.FromDegrees(0)); |
---|
178 | palikka = palikat(600.0, 50, 60, 600, Angle.FromDegrees(0)); |
---|
179 | palikka = palikat(565.0, 60.0, 40, 20, Angle.FromDegrees(0)); |
---|
180 | palikka = palikat(280.0, 155.0, 220, 20, Angle.FromDegrees(0)); |
---|
181 | palikka = palikat(380, 93, 20, 123, Angle.FromDegrees(0)); |
---|
182 | palikka = palikat(160, -100, 250, 30, Angle.FromDegrees(-45)); |
---|
183 | palikka = palikat(505, -180, 200, 30, Angle.FromDegrees(40)); |
---|
184 | palikka = palikat(-1330, 0, 230, 30, Angle.FromDegrees(-45)); |
---|
185 | palikka = palikat(-1000, -250, 30, 420, Angle.FromDegrees(0)); |
---|
186 | palikka = palikat(1295, -50, 60, 585, Angle.FromDegrees(0)); |
---|
187 | palikka = palikat(730, -210, 35, 30, Angle.FromDegrees(0)); |
---|
188 | palikka = palikat(880, -210, 35, 30, Angle.FromDegrees(0)); |
---|
189 | palikka = palikat(1030, -210, 35, 30, Angle.FromDegrees(0)); |
---|
190 | palikka = palikat(1180, -210, 35, 30, Angle.FromDegrees(0)); |
---|
191 | palikka = palikat(1250, -135, 35, 30, Angle.FromDegrees(0)); |
---|
192 | palikka = palikat(1105, -30, 35, 30, Angle.FromDegrees(0)); |
---|
193 | palikka = palikat(955, -30, 35, 30, Angle.FromDegrees(0)); |
---|
194 | palikka = palikat(805, -30, 35, 30, Angle.FromDegrees(0)); |
---|
195 | palikka = palikat(640, 55, 35, 30, Angle.FromDegrees(0)); |
---|
196 | palikka = palikat(730, 150, 35, 30, Angle.FromDegrees(0)); |
---|
197 | palikka = palikat(880, 150, 35, 30, Angle.FromDegrees(0)); |
---|
198 | palikka = palikat(1030, 150, 35, 30, Angle.FromDegrees(0)); |
---|
199 | palikka = palikat(1180, 150, 35, 30, Angle.FromDegrees(0)); |
---|
200 | punpalikka = punpalikat(-625.0, -80.0, 60, 492, Angle.FromDegrees(0)); |
---|
201 | punpalikka = punpalikat(-600.0, -150.0, 100, 50, Angle.FromDegrees(0)); |
---|
202 | punpalikka = punpalikat(-435.0, -150.0, 50, 50, Angle.FromDegrees(0)); |
---|
203 | punpalikka = punpalikat(-98.0, -315.0, 305, 20, Angle.FromDegrees(0)); |
---|
204 | punpalikka = punpalikat(-285.0, 255.0, 130, 139, Angle.FromDegrees(0)); |
---|
205 | punpalikka = punpalikat(480, 40, 180, 20, Angle.FromDegrees(0)); |
---|
206 | punpalikka = punpalikat(326, -139, 155, 30, Angle.FromDegrees(40)); |
---|
207 | punpalikka = punpalikat(-1140, -312, 250, 30, Angle.FromDegrees(0)); |
---|
208 | punpalikka = punpalikat(274, -253, 30, 144, Angle.FromDegrees(0)); |
---|
209 | punpalikka = punpalikat(990, -315, 550, 20, Angle.FromDegrees(0)); |
---|
210 | |
---|
211 | PhysicsObject maali = PhysicsObject.CreateStaticObject(30, 50); |
---|
212 | maali.Shape = Shape.Circle; |
---|
213 | maali.X = 1363; |
---|
214 | maali.Y = -300; |
---|
215 | maali.Angle = Angle.FromDegrees(-15); |
---|
216 | maali.Tag = "maali"; |
---|
217 | maali.Image = LoadImage("portal1"); |
---|
218 | Add(maali); |
---|
219 | |
---|
220 | PhysicsObject test = PhysicsObject.CreateStaticObject(30, 50); |
---|
221 | test.Shape = Shape.Circle; |
---|
222 | test.X = -950; |
---|
223 | test.Y = 275; |
---|
224 | test.Angle = Angle.FromDegrees(-15); |
---|
225 | test.Tag = "maali"; |
---|
226 | test.Image = LoadImage("portal1"); |
---|
227 | //Add(test); |
---|
228 | } |
---|
229 | |
---|
230 | PhysicsObject palikat(double x, double y, double width, double height, Angle kulma) |
---|
231 | { |
---|
232 | PhysicsObject palikka = PhysicsObject.CreateStaticObject(100.0, 100.0); |
---|
233 | palikka.Color = new Color(0, 215, 215); |
---|
234 | palikka.X = x; |
---|
235 | palikka.Y = y; |
---|
236 | palikka.Width = width; |
---|
237 | palikka.Height = height; |
---|
238 | palikka.Angle = kulma; |
---|
239 | Add(palikka); |
---|
240 | |
---|
241 | return palikka; |
---|
242 | } |
---|
243 | |
---|
244 | PhysicsObject palikat2(double x, double y, double width, double height, Angle kulma) |
---|
245 | { |
---|
246 | PhysicsObject palikka = PhysicsObject.CreateStaticObject(100.0, 100.0); |
---|
247 | palikka.Color = new Color(255, 190, 0); |
---|
248 | palikka.X = x; |
---|
249 | palikka.Y = y; |
---|
250 | palikka.Width = width; |
---|
251 | palikka.Height = height; |
---|
252 | palikka.Angle = kulma; |
---|
253 | Add(palikka); |
---|
254 | |
---|
255 | return palikka; |
---|
256 | } |
---|
257 | |
---|
258 | PhysicsObject punpalikat(double x, double y, double width, double height, Angle kulma) |
---|
259 | { |
---|
260 | PhysicsObject punpalikka = PhysicsObject.CreateStaticObject(100.0, 100.0); |
---|
261 | punpalikka.Color = new Color(128, 0, 0); |
---|
262 | punpalikka.X = x; |
---|
263 | punpalikka.Y = y; |
---|
264 | punpalikka.Width = width; |
---|
265 | punpalikka.Height = height; |
---|
266 | punpalikka.Angle = kulma; |
---|
267 | punpalikka.Tag = "punpalikka"; |
---|
268 | Add(punpalikka); |
---|
269 | |
---|
270 | return punpalikka; |
---|
271 | } |
---|
272 | |
---|
273 | void kuolema(PhysicsObject pallo, PhysicsObject kohde) |
---|
274 | { |
---|
275 | if (kohde.Tag.ToString() == "punpalikka" && !(ukko.IsDestroyed)) |
---|
276 | { |
---|
277 | ukko.X = -875; |
---|
278 | ukko.Y = 295; |
---|
279 | shiumm.Play(); |
---|
280 | alaspainLaskuri.Reset(); |
---|
281 | kello.Reset(); |
---|
282 | } |
---|
283 | } |
---|
284 | |
---|
285 | void seuraavakentta(PhysicsObject ukko, PhysicsObject kohde) |
---|
286 | { |
---|
287 | if (kohde.Tag.ToString() == "maali") |
---|
288 | { |
---|
289 | shiumm.Play(); |
---|
290 | ukko.Destroy(); |
---|
291 | ClearAll(); |
---|
292 | topikkuna(); |
---|
293 | |
---|
294 | } |
---|
295 | } |
---|
296 | |
---|
297 | void kontrollit() |
---|
298 | { |
---|
299 | Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); |
---|
300 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, "Poistu pelistä"); |
---|
301 | |
---|
302 | Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", ukko, -nopeus); |
---|
303 | Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu vasemmalle", ukko, nopeus); |
---|
304 | Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", ukko, hyppynopeus); |
---|
305 | } |
---|
306 | |
---|
307 | void liikuta(PhysicsObject ukko, Vector nopeus) |
---|
308 | { |
---|
309 | ukko.Push(nopeus); |
---|
310 | } |
---|
311 | |
---|
312 | void hyppaa(PhysicsObject ukko, Vector hyppynopeus) |
---|
313 | { |
---|
314 | ukko.Hit(hyppynopeus); |
---|
315 | } |
---|
316 | |
---|
317 | void topikkuna() |
---|
318 | { |
---|
319 | double aikaaKulunut = alaspainLaskuri.Value; |
---|
320 | |
---|
321 | HighScoreWindow topIkkuna = new HighScoreWindow("Pelin nimi tai jotain", |
---|
322 | "Parhaat pisteet", |
---|
323 | "Onneksi olkoon, pääsit listalle pisteillä %p! Syötä nimesi:", |
---|
324 | topLista, aikaaKulunut); |
---|
325 | topIkkuna.Closed += tallennapisteet; |
---|
326 | Add(topIkkuna); |
---|
327 | } |
---|
328 | |
---|
329 | void tallennapisteet(Window sender) |
---|
330 | { |
---|
331 | DataStorage.Save<ScoreList>(topLista, "pisteet.xml"); |
---|
332 | kenttanro++; |
---|
333 | ClearAll(); |
---|
334 | Begin(); |
---|
335 | } |
---|
336 | |
---|
337 | void LuoAikaLaskuri() |
---|
338 | { |
---|
339 | alaspainLaskuri = new DoubleMeter(250); |
---|
340 | |
---|
341 | aikaLaskuri = new Timer(); |
---|
342 | aikaLaskuri.Interval = 0.01; |
---|
343 | aikaLaskuri.Timeout += LaskeAlaspain; |
---|
344 | aikaLaskuri.Start(); |
---|
345 | kello.Value = 0; |
---|
346 | |
---|
347 | |
---|
348 | Label aikaNaytto = new Label(); |
---|
349 | aikaNaytto.TextColor = Color.White; |
---|
350 | aikaNaytto.DecimalPlaces = 2; |
---|
351 | aikaNaytto.BindTo(kello); |
---|
352 | aikaNaytto.Y = Screen.Top - 20; |
---|
353 | Add(aikaNaytto); |
---|
354 | } |
---|
355 | |
---|
356 | void LaskeAlaspain() |
---|
357 | { |
---|
358 | alaspainLaskuri.Value -= 0.01; |
---|
359 | kello.Value += 0.01; |
---|
360 | } |
---|
361 | |
---|
362 | |
---|
363 | } |
---|