"Jeu des blocs" for Sharp PC-1500 + CE-150
 Hebdogiciel, Shift editions.
Author : Pierre Marcellin
Published in Hebdogiciel #27 (April 1984).
BASIC program - 2522 bytes.

CLOAD "JEU DES BLOCS"
RUN

----- BASIC program -----------------------------------------
1 "JEU DES BLOCS"
2 "Hebdogiciel No 27"
3 "C"CLEAR :INPUT "Damier Z*Z:Z=";Z,"Imprimante ?(O/N) ";A$
4 IF A$="O"INPUT "Taille caracteres(1/2)";V:LF 3
5 IF Z>8OR Z<3GOTO 3
6 IF Z=8CSIZE 1
7 IF A$="O"INPUT "Couleur (0=NON  1=OUI) ?";CO
8 DIM A(Z,Z),B(Z,Z),C(Z,Z):FOR X=1TO Z:RESTORE 15+X:FOR Y=1TO Z:READ C(X,Y):NEXT Y:NEXT X
9 INPUT "Jeu particulier ?(O/N) ";B$
10 IF B$="O"GOTO 94
11 FOR X=1TO Z:FOR Y=1TO Z:IF (X+Y)/2=INT ((X+Y)/2)LET A(X,Y)=2:GOTO 13
12 A(X,Y)=1
13 NEXT Y:NEXT X
14 INPUT "VOUS COMMENCEZ ?(O/N)";B$
15 IF B$="N"GOTO 28
16 DATA 1,2,1,4,1,2,1,8
17 DATA 2,3,2,8,2,3,2,12
18 DATA 1,2,1,4,1,2,1,8
19 DATA 4,8,4,6,4,8,4,11
20 DATA 1,2,1,4,1,2,1,8
21 DATA 2,3,2,8,2,3,2,12
22 DATA 1,2,1,4,1,2,1,8
23 DATA 8,12,8,11,8,12,8,13
24 GOSUB 84
25 BEEP 1:PAUSE "A VOUS:":INPUT "X=";X,"Y=";Y,"A=";A,"B=";B:IF Z>ZOR Y>ZOR A>XOR B>YGOTO 25
26 IF A(X,Y)=1GOTO 25
27 GOSUB 67:GOSUB 84:A=1:GOSUB 70
28 "X=1,Y=1
30 IF A(X,Y)=1THEN 53
31 A=1,B=1
32 L=0,M=0,N=0,O=0
33 GOSUB 63:GOSUB 64
34 C=1,D=1
35 IF B(C,D)=1THEN 45
36 IF C(C,D)=1LET L=L+1:GOTO 45
37 IF C(C,D)=2LET M=M+1:GOTO 45
38 IF C(C,D)=3LET M=M+1,L=L+1:GOTO 45
39 IF C(C,D)=4LET N=N+1:GOTO 45
40 IF C(C,D)=6LET N=N+1,M=M+1:GOTO 45
41 IF C(C,D)=8LET O=O+1:GOTO 45
42 IF C(C,D)=11LET O=O+1,M=M+1,L=L+1:GOTO 45
43 IF C(C,D)=12LET N=N+1,O=O+1:GOTO 45
44 IF C(C,D)=13LET N=N+1,O=O+1,L=L+1
45 D=D+1:IF D>ZLET D=1:BEEP 1:GOTO 47
46 GOTO 35
47 C=C+1:IF C<=ZGOTO 35
48 FOR C=12TO 15:@(C)=SGN (@(C)/2-INT (@(C)/2)):NEXT C
49 IF L+M+N+O=0THEN 61
50 B=B+1:IF B>YLET B=1:GOTO 52
51 GOTO 32
52 A=A+1:IF A<=XGOTO 32
53 Y=Y+1:IF Y>ZLET Y=1:GOTO 55
54 GOTO 30
55 X=X+1:IF X<=ZGOTO 30
56 FOR I=1TO 20:X=RND Z,Y=RND Z:IF A(X,Y)=1GOTO 58
57 A=RND X,B=RND Y:GOTO 61
58 NEXT I
59 FOR X=1TO N:FOR Y=1TO N:IF A(X,Y)=2LET A=RND X,B=RND Y:GOTO 61
60 NEXT Y:NEXT X:PRINT "ERREUR"
61 PRINT "X=";X;" Y=";Y:PRINT "A=";A;" B=";B
62 GOSUB 67:GOSUB 84:A=2:GOSUB 70:GOTO 25
63 FOR C=1TO Z:FOR D=1TO Z:B(C,D)=A(C,D):NEXT D:NEXT C:RETURN 
64 FOR C=X-A+1TO X:FOR D=Y-B+1TO Y:IF B(C,D)=1LET B(C,D)=2:GOTO 66
65 B(C,D)=1
66 NEXT D:NEXT C:RETURN 
67 FOR C=X-A+1TO X:FOR D=Y-B+1TO Y:IF A(C,D)=1LET A(C,D)=2:GOTO 69
68 A(C,D)=1
69 NEXT D:NEXT C:RETURN 
70 FOR C=1TO Z:FOR D=1TO Z
71 IF A(C,D)=2GOTO 75
72 NEXT D:NEXT C
73 IF A=1BEEP 5,60,40:PRINT "Vous avez gagne !":GOTO 76
74 BEEP 5,200,100:PRINT "J ai gagne !":GOTO 76
75 RETURN 
76 BEEP 1:INPUT "Une autre partie ?";A$
77 IF LEFT$ (A$,1)="O"CLEAR :GOTO 3
78 WAIT 0:CLS :B$="FIN":FOR I=1TO 3
79 FOR J=25TO 10+ISTEP -1
80 CURSOR J:PRINT LEFT$ (B$,1);" "
81 BEEP 1,10:NEXT J
82 B$=MID$ (B$,2,3):NEXT I
83 FOR I=1TO 30:NEXT I:END
84 IF A$="N"RETURN 
85 LF -3:COLOR 3*CO:CSIZE V
86 LPRINT TAB (8-Z);"# ";:FOR I=1TO Z:LPRINT STR$ I;" ";:NEXT I:LPRINT "#"
87 FOR S=1TO Z:LPRINT TAB (8-Z);STR$ S;" ";:FOR T=1TO Z:COLOR 0
88 IF A(T,S)=1LET A$="O "
89 IF A(T,S)=2LET A$="X "
90 LPRINT A$;
91 NEXT T:COLOR 3*CO:LPRINT STR$ S:NEXT S
92 LPRINT TAB (8-Z);"# ";:FOR I=1TO Z:LPRINT STR$ I;" ";:NEXT I:LPRINT "#"
93 LF 4:RETURN 
94 FOR X=1TO Z:FOR Y=1TO Z
95 BEEP 1,100,30:WAIT 0:PRINT "X=";X;" Y=";Y;:INPUT "/ Pion ?(B/N)";B$
96 IF B$<>"N"AND B$<>"B"CLS :BEEP 1,200,100:GOTO 95
97 A(X,Y)=1+SGN (ASC B$-66)
98 CLS :NEXT Y:NEXT X:WAIT 
99 GOTO 14
