Gambas France BETA


Pas de compte ? Incription

Esc

À propos de ce code

Salut à tous ! ;)
J'ai fait un mini jeu sans prétention aucune.
Avec les flèches gauche, droite, haut et bas, vous déplacez 'X' dans la fenêtre.
Des "monstres" ('v', '>' et '<') vous tombent dessus. Le but est simple: les éviter !
3 modes sont programmés :
- Appuyez sur F1 pour le mode facile
- F2 pour le mode intermédiaire
- et enfin F3 pour le mode difficile !
Chaque 20 secondes, les monstres accélèrent et le jeu devient plus difficile ! :D
OK, je design n'est pas sexy mais ça occupe quelques minutes !
A+
David

Code source

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

Commentaires

Commentaire de didier18, Le 6/10/2014 à 23:20:42
Bonsoir David

Sympa et marrant comme p'tit jeu...
Merci.
Commentaire de davidmue, Le 8/10/2014 à 20:24:37
200 sec. en mode facile (F1) ;)
Perso, à ce stade, c'est des missiles quasi inévitable !