1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
| ' Vous aurez besoin d'un FMain.form avec les contrôles : ' - lblLevel (Label du haut) ' - TheTextArea (textArea -> Enabled=False, ReadOnly=True, ScrollBar=None) ' - lblBestScore (Label du bas) ' - 6 timers (Enabled=False) : ' . tmrStartGame (Delay 1500) ' . tmrReDraw (Delay 30) ' . tmrRainGen (Delay 500) ' . tmrMonster (Delay 150) ' . tmrMonster2 (Delay 200) ' . tmrMonster3 (Delay 340) ' ' Gambas class file
PRIVATE xMax AS INTEGER = 16 PRIVATE yMax AS INTEGER = 7 PRIVATE x AS INTEGER = Int(xMax / 2) PRIVATE y AS INTEGER = yMax ' x horisontal, y vertical en partant du haut à gauche .. PRIVATE xMonster AS INTEGER = -1 PRIVATE yMonster AS INTEGER = -1 PRIVATE xMonst2 AS INTEGER = -1 PRIVATE yMonst2 AS INTEGER = -1 PRIVATE xMonst3 AS INTEGER = -1 PRIVATE yMonst3 AS INTEGER = -1 PRIVATE booCanMove AS BOOLEAN = FALSE PRIVATE intLevel AS INTEGER = 1 PRIVATE tLifeStart AS DATE PRIVATE fBestScore AS FLOAT = 0.0 PRIVATE strRain AS NEW STRING[10, 20] PRIVATE booFirstSpeedAddDone AS BOOLEAN = FALSE PRIVATE booSecondSpeedAddDone AS BOOLEAN = FALSE PRIVATE booThirdSpeedAddDone AS BOOLEAN = FALSE PRIVATE booForthSpeedAddDone AS BOOLEAN = FALSE PRIVATE booFirthSpeedAddDone AS BOOLEAN = FALSE
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open() DIM today AS DATE today = Now RANDOMIZE DateDiff(Date(1974, 2, 27), today, gb.Day) tmrStartGame.Start END
PUBLIC SUB Form_KeyPress()
IF Key.Code = Key.Up THEN btnUp_Click ENDIF IF Key.Code = Key.Down THEN btnDown_Click ENDIF IF Key.Code = Key.Right THEN btnRight_Click ENDIF IF Key.Code = Key.Left THEN btnLeft_Click ENDIF IF Key.code = Key.F1 THEN radLevel1_Click ENDIF IF Key.code = Key.F2 THEN radLevel2_Click ENDIF IF Key.code = Key.F3 THEN radLevel3_Click ENDIF IF Key.code = Key.F4 THEN fBestScore = 0.0 lblBestScore.Text = "Best score: " btnSpeedMonsterUp_Click ENDIF IF Key.code = Key.F5 THEN fBestScore = 0.0 lblBestScore.Text = "Best score: " btnSpeedMonsterDown_Click ENDIF IF Key.code = Key.F6 THEN IF NOT (TheTextArea.Width = 126) THEN
tmrMonster3.Stop tmrMonster2.Stop tmrMonster.Stop xMonster = xMax + 1 xMonst2 = -1 xMonst3 = -1 xMax = 8 fBestScore = 0.0
TheTextArea.Width = 126 ME.Width = ME.Width - 126 tmrReDraw.Stop ENDIF ENDIF IF Key.code = Key.F7 THEN IF NOT (TheTextArea.Width = 252) THEN
tmrMonster3.Stop tmrMonster2.Stop tmrMonster.Stop xMonster = xMax + 1 xMonst2 = -1 xMonst3 = -1 xMax = 16 fBestScore = 0.0
ME.width = ME.Width + 126 TheTextArea.Width = 252 tmrReDraw.Stop ENDIF ENDIF
END
PUBLIC SUB btnUp_Click() IF booCanMove THEN IF NOT (y < 1) THEN y = y - 1 ENDIF booCanMove = FALSE ENDIF END
PUBLIC SUB btnDown_Click() IF booCanMove THEN IF NOT (y >= yMax) THEN y = y + 1 ENDIF booCanMove = FALSE ENDIF END
PUBLIC SUB btnLeft_Click() IF booCanMove THEN IF NOT (x < 1) THEN x = x - 1 ENDIF booCanMove = FALSE ENDIF
END
PUBLIC SUB btnRight_Click() IF booCanMove THEN IF NOT (x >= xMax) THEN x = x + 1 ENDIF booCanMove = FALSE ENDIF END
PRIVATE SUB StartGame()
tmrRainGen.Stop tmrMonster.stop tmrMonster2.stop tmrMonster3.stop tmrReDraw.stop
' initial position.. ' - X (hero) x = Int(xMax / 2) y = yMax ' - v < > (monsters) xMonster = -1 yMonster = -1 xMonst2 = xMax + 1 yMonst2 = yMax + 1 xMonst2 = xMax + 1 yMonst2 = yMax + 1 ' - speed SELECT CASE intLevel CASE 1 tmrMonster3.Delay = 300 * Int(yMax / xMax) tmrMonster2.Delay = 190 * Int(yMax / xMax) tmrMonster.Delay = 130 * Int(yMax / xMax) CASE 2 tmrMonster3.Delay = 200 * Int(yMax / xMax) tmrMonster2.Delay = 130 * Int(yMax / xMax) tmrMonster.Delay = 100 * Int(yMax / xMax) CASE 3 tmrMonster3.Delay = 190 * Int(yMax / xMax) tmrMonster2.Delay = 110 * Int(yMax / xMax) tmrMonster.Delay = 80 * Int(yMax / xMax) CASE ELSE Error.Raise("Wrong level value! ") END SELECT tLifeStart = Now booCanMove = TRUE
tmrRainGen.Start tmrMonster.Start tmrMonster2.Start tmrMonster3.Start tmrReDraw.Start END
PRIVATE SUB ReDraw() DIM fScore AS FLOAT = 0.0 DIM i AS INTEGER = 0, j AS INTEGER = 0 TheTextArea.Clear IF (xMonster = x AND yMonster = y) OR (xMonst2 = x AND yMonst2 = y) OR (xMonst3 = x AND yMonst3 = y) THEN ' ' loose.. FOR i = 0 TO yMax FOR j = 0 TO xMax IF i = y AND j = x THEN TheTextArea.Text = TheTextArea.Text & "!" ELSE TheTextArea.Text = TheTextArea.Text & " " ENDIF NEXT TheTextArea.Text = TheTextArea.Text & Chr(10) NEXT fScore = DateDiff(tLifeStart, Now, gb.Second) IF fScore > fBestScore THEN fBestScore = fScore ENDIF lblBestScore.Text = "Best score: " & Format(fBestScore, "#.#") & ", Last score: " & Format(fScore, "#.#") tmrReDraw.Stop tmrMonster3.Stop tmrMonster2.Stop tmrMonster.Stop xMonster = xMax + 1 xMonst2 = -1 xMonst3 = -1 booFirstSpeedAddDone = FALSE booSecondSpeedAddDone = FALSE booThirdSpeedAddDone = FALSE booForthSpeedAddDone = FALSE booFirthSpeedAddDone = FALSE SELECT CASE intLevel CASE 1 radLevel1_Click CASE 2 radLevel2_Click CASE 3 radLevel3_Click END SELECT ' ELSE ' ' play.. FOR i = 0 TO yMax ' for each line.. FOR j = 0 TO xMax ' for each char in the line.. IF i = y AND j = x THEN TheTextArea.Text = TheTextArea.Text & "X" ELSE IF i = yMonster AND j = xMonster THEN TheTextArea.Text = TheTextArea.Text & "<" ELSE IF i = yMonst2 AND j = xMonst2 THEN TheTextArea.Text = TheTextArea.Text & ">" ELSE IF i = yMonst3 AND j = xMonst3 THEN TheTextArea.Text = TheTextArea.Text & "v" ELSE TheTextArea.Text = TheTextArea.Text & strRain[i, j] ENDIF ENDIF ENDIF ENDIF NEXT TheTextArea.Text = TheTextArea.Text & Chr(10) NEXT fScore = DateDiff(tLifeStart, Now, gb.Second) IF (fScore > 20) AND (NOT booFirstSpeedAddDone) THEN booFirstSpeedAddDone = TRUE btnSpeedMonsterUp_Click ENDIF IF (fScore > 40) AND (NOT booSecondSpeedAddDone) THEN booSecondSpeedAddDone = TRUE btnSpeedMonsterUp_Click ENDIF IF (fScore > 60) AND (NOT booThirdSpeedAddDone) THEN booThirdSpeedAddDone = TRUE btnSpeedMonsterUp_Click ENDIF IF (fScore > 80) AND (NOT booForthSpeedAddDone) THEN booForthSpeedAddDone = TRUE btnSpeedMonsterUp_Click ENDIF IF (fScore > 100) AND (NOT booFirthSpeedAddDone) THEN booFirthSpeedAddDone = TRUE btnSpeedMonsterUp_Click ENDIF ' booCanMove = TRUE ' ENDIF END
PUBLIC SUB tmrMonster_Timer() DIM yTargetRange AS INTEGER ' will make the monster move.. IF xMonster < 0 THEN ' new position.. SELECT CASE intLevel CASE 1 yMonster = Int(Rnd * (yMax + 1)) xMonster = xMax + 1 CASE 2 yTargetRange = Int(yMax / 1.5) yMonster = Int((Rnd * (yTargetRange + 1)) + y - (yTargetRange / 2)) xMonster = xMax + 1 CASE 3 yTargetRange = Int(yMax / 2) yMonster = Int((Rnd * (yTargetRange + 1)) + y - (yTargetRange / 2)) xMonster = xMax + 1 END SELECT
ELSE xMonster = xMonster - 1 ' the monster come from the right and ' he goes always left! ENDIF END
PUBLIC SUB tmrMonster2_Timer() DIM yTargetRange AS INTEGER ' will make the monster move.. IF xMonst2 > xMax THEN ' new position.. SELECT CASE intLevel CASE 1 yMonst2 = Int(Rnd * (yMax + 1)) xMonst2 = 0 CASE 2 yTargetRange = Int(yMax / 1.5) yMonst2 = Int((Rnd * (yTargetRange + 1)) + y - (yTargetRange / 2)) xMonst2 = 0 CASE 3 yTargetRange = Int(yMax / 2) yMonst2 = Int((Rnd * (yTargetRange + 1)) + y - (yTargetRange / 2)) xMonst2 = 0 END SELECT ELSE xMonst2 = xMonst2 + 1 ' the monster come from the left and ' he goes always right! ENDIF END
PUBLIC SUB tmrMonster3_Timer() DIM xTargetRange AS INTEGER ' will make the monster move.. IF yMonst3 > yMax THEN ' new position.. SELECT CASE intLevel CASE 1 xMonst3 = Int(Rnd * (xMax + 1)) yMonst3 = 0 CASE 2 xTargetRange = Int(xMax / 1.5) xMonst3 = Int((Rnd * (xTargetRange + 1)) + x - (xTargetRange / 2)) yMonst3 = 0 CASE 3 xTargetRange = Int(xMax / 2) xMonst3 = Int((Rnd * (xTargetRange + 1)) + x - (xTargetRange / 2)) yMonst3 = 0 END SELECT ELSE yMonst3 = yMonst3 + 1 ' the monster come from the left and ' he goes always right! ENDIF END
PUBLIC SUB btnSpeedMonsterUp_Click() tmrStartGame.Stop tmrRainGen.Stop tmrReDraw.Stop tmrMonster.Stop tmrMonster2.Stop tmrMonster3.Stop WAIT tmrMonster.Delay = tmrMonster.Delay - Int(tmrMonster.Delay * 0.1) tmrMonster2.Delay = tmrMonster2.Delay - Int(tmrMonster2.Delay * 0.1) tmrMonster3.Delay = tmrMonster3.Delay - Int(tmrMonster3.Delay * 0.1) tmrReDraw.Delay = tmrReDraw.Delay - Int(tmrReDraw.Delay * 0.1) tmrMonster.Start tmrMonster2.Start tmrMonster3.Start tmrReDraw.Start tmrRainGen.Start tmrStartGame.Start END
PUBLIC SUB btnSpeedMonsterDown_Click() tmrStartGame.Stop tmrRainGen.Stop tmrReDraw.Stop tmrMonster.Stop tmrMonster2.Stop tmrMonster3.Stop WAIT tmrMonster.Delay = tmrMonster.Delay + Int(tmrMonster.Delay * 0.1) tmrMonster2.Delay = tmrMonster2.Delay + Int(tmrMonster2.Delay * 0.1) tmrMonster3.Delay = tmrMonster3.Delay + Int(tmrMonster3.Delay * 0.1) tmrReDraw.Delay = tmrReDraw.Delay + Int(tmrReDraw.Delay * 0.1) tmrMonster.Start tmrMonster2.Start tmrMonster3.Start tmrReDraw.Start tmrRainGen.Start tmrStartGame.Start END
PUBLIC SUB tmrReDraw_Timer() ReDraw END
PUBLIC SUB tmrStartGame_Timer() IF NOT tmrReDraw.Enabled THEN StartGame ENDIF END
PUBLIC SUB radLevel1_Click() intLevel = 1 UpdateLevel END
PUBLIC SUB radLevel2_Click() intLevel = 2 UpdateLevel END
PUBLIC SUB radLevel3_Click() intLevel = 3 UpdateLevel END
PRIVATE SUB UpdateLevel() tmrReDraw.Delay = 30 tmrMonster.Delay = 150 tmrMonster2.Delay = 200 tmrMonster3.Delay = 340 StartGame END
PUBLIC SUB tmrRainGen_Timer()
' generate the rain.. DIM intIndex AS INTEGER = 0 DIM intRndRange AS INTEGER = 0 DIM intRndVal AS INTEGER = 0 DIM i AS INTEGER DIM j AS INTEGER DIM strNewLine AS String[]
strNewLine = NEW STRING[20] ' a new line.. FOR j = 0 TO (20 - 1) SELECT CASE intLevel CASE 1 intRndRange = 57 ' 1/3 = rain.. CASE 2 intRndRange = 33 ' 1/12 = rain.. CASE 3 intRndRange = 7 ' 1/4 = rain.. END SELECT intRndVal = Int(Rnd * (intRndRange + 1)) IF intRndVal MOD intRndRange = 0 THEN strNewLine.Add("'", j) ELSE strNewLine.Add(" ", j) ENDIF NEXT FOR i = (10 - 1) TO 0 STEP -1 IF i = 0 THEN ' first line.. FOR j = 0 TO (20 - 1) strRain[i, j] = strNewLine[j] NEXT ELSE ' second line or more.. FOR j = 0 TO (20 - 1) intIndex = i - 1 IF strRain[intIndex, j] = "" THEN strRain[i, j] = " " ELSE strRain[i, j] = strRain[intIndex, j] ENDIF NEXT ENDIF NEXT
END
|
Sympa et marrant comme p'tit jeu...
Merci.