COMMON SHARED x, so TYPE ch b AS INTEGER nom AS STRING * 20 END TYPE DIM sp AS ch DECLARE SUB nul () DECLARE SUB ctr (a, a$) RANDOMIZE TIMER: SCREEN 8 WIDTH 40 ctr 12, "INVADERS": r$ = INPUT$(1): m = 10 IF r$ = CHR$(1) THEN m = 100 CLS : ctr 2, "INVADERS : TOUCHES DE JEU" ctr 6, "[ Echap ] pour quitter" ctr 8, "deplacement : [ droite ] [ gauche ]" ctr 10, "tir : [ haut ] ou [ bas ]" ctr 12, "pause : [ space ]" ctr 14, " son : [ 0 ] = allume / eteint" ctr 16, "( [ 1 ] = son 1 )" ctr 18, "( [ 2 ] = son 2 )" a$ = INPUT$(1) cp = 0: n = 1: x = 62: j = 63: nb = 0: so = 2 WINDOW (1, -5)-(127, 63) debut: cp = 0: tx = 0 d = 10 u = INT(87 * RND) + 20 v = INT(30 * RND) + 40 l = 1: z = 0 s: cp = cp + 1 IF RND > (j / 200) + .2 THEN u = u + 8 * INT(3 * RND - 1) IF RND > (j / 100) + .3 THEN v = v + 4 * INT(3 * RND - 1) - 2 IF u < 1 THEN u = 1 IF u > 120 THEN u = 120 CLS LINE (u, v)-(u + 5, v + 2), 6 LINE (u + 5, v + 2)-(u + 9, v), 6 LINE (u + 5, v - 2)-(u + 9, v), 6 LINE (u, v)-(u + 5, v - 2), 6 PAINT (u + 2, v), 8, 6 LINE (x, 2)-(x + 4, 2), 1 LINE (x + 1, 3)-(x + 3, 3), 4 LINE (x + 1, 3)-(x + 2, 4.1), 4 LINE (x + 3, 3)-(x + 2, 4.1), 4 PAINT (x + 2, 3.5), 2, 4 IF cp MOD INT(j / 2) = 0 THEN IF so = 2 THEN SOUND 527, 1 IF so = 1 THEN SOUND 38, 2 LINE (u + 4, v - 3)-(u + 5, 2), 14, BF IF NOT ((u + 4 < x) + (u > x)) THEN nul: GOTO vie END IF IF v < 3 THEN nul: GOTO vie a$ = INKEY$ IF RIGHT$(a$, 1) = "K" THEN x = x - d: d = 8 IF RIGHT$(a$, 1) = "M" THEN x = x + d: d = 8 IF x > 123 THEN x = 123 IF x < 1 THEN x = 1 IF a$ = CHR$(27) THEN GOSUB verif IF a$ = "" THEN d = 10 IF a$ = " " THEN BEEP: ctr 9, "PAUSE": z$ = INPUT$(1): BEEP IF a$ = "0" THEN so = -so IF a$ = "1" THEN so = 1 IF a$ = "2" THEN so = 2 IF RIGHT$(a$, 1) = "H" OR RIGHT$(a$, 1) = "P" THEN tx = tx + 1 IF so = 2 THEN SOUND 100, .05 IF so = 1 THEN SOUND 1500, .1 LINE (x + 2, 4)-(x + 2, 63), 4 IF NOT (x + 2 < u) + (x > u + 7) THEN s = s + 100 + .1 * (99 - v) - cp / 100 - tx a = .5 * (3 * SGN(u - x + 3) - 3) t = u + 5: l = 1 WHILE v > -20 a$ = INKEY$ CLS IF so = 1 THEN SOUND 500 + l * 135, .1 IF so = 2 THEN SOUND 500 + l * 10, .35 LINE (x, 2)-(x + 4, 2), 1 LINE (x + 1, 3)-(x + 3, 3), 4 LINE (x + 1, 3)-(x + 2, 4.1), 4 LINE (x + 3, 3)-(x + 2, 4.1), 4 PAINT (x + 2, 3.5), 2, 4 LINE (u, v)-(u + 5, v + 2), 6 LINE (u + 5, v + 2)-(u + 5, v - 2), 6 LINE (u, v)-(u + 5, v - 2), 6 LINE (t, v + 2)-(t + 5, v), 6 LINE (t, v - 2)-(t + 5, v), 6 LINE (t, v + 2)-(t, v - 2), 6 u = u + 1 + a t = t + 2 + a v = v - l l = l * 2 WEND nb = nb + 1 IF nb < 10 * n THEN GOTO debut ELSE GOTO game END IF END IF GOTO s game: n = n + 1 IF n = 11 THEN ctr 10, "YOU ARE THE CHAMPION" a$ = "mbCDEFCDEFGAFGAFFEBAF" PLAY "X" + VARPTR$(a$) GOTO verif END IF ctr 6, "level" + STR$(n) ctr 8, "score" + STR$(INT(s)) FOR i = 1 TO 25000: NEXT j = j - 6 GOTO debut vie: m = m - 1 IF m = 0 THEN ctr 10, "GAME OVER" a$ = "mbCDFGAFGAFFEBAF" PLAY "X" + VARPTR$(a$) GOTO verif END IF ctr 1, "NB de vie:" + STR$(m) FOR i = 1 TO 5000: NEXT i GOTO debut verif: OPEN "invader.bst" FOR RANDOM AS #1 LEN = 24 GET #1, 1, sp ctr 2, "BONUS" + STR$(m * 10 * (n - 1)) s = INT(s + m * 10 * (n - 1)) ctr 3, "SCORE" + STR$(s) IF s > sp.b THEN ctr 6, "VOUS AVEZ FAIT LE MEILLEUR SCORE" ctr 7, "ENTRER VOTRE NOM" LOCATE 4, 4: INPUT z$ LSET sp.nom = z$: sp.b = INT(s) PUT #1, 1, sp END IF ctr 11, "BEST SCORE:" + STR$(sp.b) + "( " + RTRIM$(sp.nom) + " )" CLOSE #1: FOR i = 1 TO 100: a$ = INKEY$: NEXT: SLEEP 10 END SUB ctr (a, a$) LOCATE a, 21 - LEN(a$) / 2: PRINT a$ END SUB SUB nul FOR i = 0 TO 5 IF so = 1 THEN SOUND 500 + 27 * i, .5 IF so = 2 THEN SOUND 300 + 500 * i, .5 + i / 10 LINE (x + 1.5 - i / 2, 1)-(x + 2 - i, i), 14 LINE (x + 2, 1)-(x + 1.5 - i / 2, i + 2), 14 LINE (x + 2, i)-(x + 2 + i / 2, i + 2), 14 LINE (x + 2 + i / 2, i)-(x + 2 + i, i), 14 NEXT i END SUB