"Scrabble" for Sharp PC-1500 + CE150 + 8KB RAM
 Hebdogiciel, Shift editions.
Author : Wolfram Von Lunen
Published in Hebdogiciel #30-31, May 1984.
BASIC program - 8216 bytes.

CLOAD "SCRABBLE"
RUN

----- BASIC program -----------------------------------------
1 "SCRABBLE":REM Hebdo.30
2 "S"CLEAR :RANDOM :BEEP 1,20,200:WAIT 0:PRINT " VOULEZ-VOUS LES REGLES ?":D$=INKEY$ :IF D$="O"THEN 5
3 IF D$="N"THEN 6
4 GOTO 2
5 GOSUB 50000
6 PRINT "*******  SCRABBLE  *******"
7 TEXT :CSIZE 4:COLOR 0:LPRINT " SCRABBLE":CSIZE 1:COLOR 2:LPRINT "A=1 B=3  C=3 D=2 E=1 F=4 G=2 H=4 I=1"
8 LPRINT "J=8 K=10 L=1 M=2 N=1 O=1 P=3 Q=8 R=1"
9 LPRINT "S=1 T=1  U=1 V=4 W=10 X=10 Y=10 Z=10":LPRINT 
10 DIM A$(15,15)*1,L$(4,15)*1,PT(4),T(4),J$(4,7)*1,JE$(7)*1,MT(4)
11 QG=1:DIM M$(15,15)*1,P$(102)*1,X$(7)*1:KO=102
20 RESTORE :FOR I=1TO 102:READ D$:P$(I)=D$:NEXT I
24 DATA "A","A","A","A","A","A","A","A","A","B","B","C","C","D","D","D","E","E","E"
25 DATA "E","E","E","E","E","E","E","E","E","E","E","E","F","F","G","G","H","H","I"
26 DATA "I","I","I","I","I","I","I","J","K","L","L","L","L","L","M","M","M","N","N"
27 DATA "N","N","N","N","O","O","O","O","O","O","P","P","Q","R","R","R","R","R","R"
28 DATA "S","S","S","S","S","S","T","T","T","T","T","T","U","U","U","U","U","U","V"
29 DATA "V","W","X","Y","Z","*","#"
30 GOSUB 2000
40 Q=1:GOSUB 3000
50 CLS :PRINT "******* JE DESSINE *******"
100 GRAPH :LINE (45,0)-(52,7),0,3,B
110 CSIZE 1:LPRINT "  = MOT COMPTE TRIPLE"
120 LINE (45,-10)-(52,-3),1,3,B
130 LPRINT "  = MOT COMPTE DOUBLE"
140 LINE (35,-20)-(42,-13),0,1,B
150 LPRINT "  = LETTRE COMPTE TRIPLE"
160 LINE (35,-30)-(42,-23),1,1,B
170 LPRINT "  = LETTRE COMPTE DOUBLE"
945 COLOR 0:TEXT :LF 23
950 GRAPH :E=415:CSIZE 1:FOR I=97TO 111:E=E-14:GLCURSOR (0,E+10):LPRINT CHR$ I:NEXT I:GLCURSOR (0,205)
999 K=10:GRAPH :CSIZE 1
1000 FOR I=5TO 215STEP 14
1005 GOTO 1000+K
1010 LINE (I,215)-(I,5),0,2:K=15:NEXT I
1015 LINE (I,5)-(I,215),0,2:K=10:NEXT I
1019 K=30
1020 FOR I=5TO 215STEP 14
1025 GOTO 1000+K
1030 LINE (215,I)-(5,I),0,2:K=35:NEXT I
1035 LINE (5,I)-(215,I),0,2:K=30:NEXT I
1040 RESTORE 1050:COLOR 0:CSIZE 1:FOR I=1TO 15:READ D:GLCURSOR (D,216):LPRINT I:NEXT I
1050 DATA 5,18,32,46,60,74,89,102,115,126,141,155,169,183,198
1090 CSIZE 2:RESTORE 1103
1100 FOR I=1TO 8:READ X,Y:A$(X,Y)="4",O=X*14-9,P=(15-Y)*14+5:GLCURSOR (O,P)
1101 FOR W=1TO 2:LINE (O,P)-(O+14,P+14),0,3,B:NEXT W
1102 NEXT I
1103 DATA 1,15,8,15,15,15,15,8,15,1,8,1,1,1,1,8
1104 RESTORE 1106
1105 FOR I=1TO 16:READ X,Y:A$(X,Y)="3",O=X*14-9,P=(15-Y)*14+5:GLCURSOR (O,P)
1106 FOR W=1TO 2:LINE (O,P)-(O+14,P+14),1,3,B:NEXT W
1107 NEXT I
1108 DATA 2,14,14,14,14,2,2,2,3,13,13,13,13,3,3,3,4,12,12,12,12,4,4,4,5,11,11,11
1109 DATA 11,5,5,5
1110 LINE (103,103)-(117,117),0,0,B:LINE (103,103)-(117,117),0,0,B
1119 COLOR 1:RESTORE 1121
1120 FOR I=1TO 12:READ X,Y:A$(X,Y)="2",O=X*14-9,P=(15-Y)*14+5:GLCURSOR (O,P)
1121 FOR W=1TO 2:LINE (O,P)-(O+14,P+14),0,1,B:NEXT W
1122 NEXT I
1124 DATA 2,10,6,10,6,14,10,14,10,10,14,10,14,6,10,6,10,2,6,2,6,6,2,6
1129 RESTORE 1131
1130 FOR I=1TO 24:READ X,Y:A$(X,Y)="1",O=X*14-9,P=(15-Y)*14+5:GLCURSOR (O,P)
1131 FOR W=1TO 2:LINE (O,P)-(O+14,P+14),1,1,B:NEXT W
1132 NEXT I
1137 DATA 4,15,7,13,8,12,9,13,12,15,15,12,13,9,12,8,13,7,15,4,12,1,9,3,8,4,7,3,4,1
1138 DATA 1,4,3,7,4,8,3,9,1,12,7,9,9,9,9,7,7,7
1140 GLCURSOR (5,-50)
1500 QG=0:GOSUB 5000
2000 Q=1:BEEP 1:INPUT "COMBIEN DE JOUEURS ? ";N:IF N>4OR N<1THEN 2000
2001 DIM N$(N)*10:JO=N:WAIT 90:PRINT "   DONNER LES NOMS DANS":PRINT "      L'ORDRE DE JEU"
2010 WAIT 0:FOR I=1TO N:CLS :BEEP 1:PRINT "NOM DU JOUEUR";I;:INPUT " ? ";N$(I):NEXT I
2020 RETURN 
3000 CLS :WAIT 0:FOR J=QTO N
3001 BEEP 1,20,200:PRINT "TAPEZ UNE TOUCHE":D$=INKEY$ :IF D$=""THEN 3001
3002 WAIT 0:CLS :BEEP 1:PRINT " JOUEUR ";J;" ";
3003 FOR I=1TO 7
3004 S=RND 102:IF KO<=0THEN 3006
3005 IF P$(S)="-"THEN 3004
3006 Q$="D":IF L$(J,I)=""LET J$(J,I)=P$(S)
3007 IF L$(J,I)=""LET KO=KO-1
3008 IF L$(J,I)=""LET Q$=L$(J,I)
3009 IF L$(J,I)=""LET L$(J,I)=P$(S)
3010 IF Q$=""LET P$(S)="-"
3011 BEEP 1,ASC (L$(J,I))*2-50,20:PRINT L$(J,I);
3012 IF L$(B,1)="-"AND L$(B,2)="-"AND L$(B,3)="-"AND L$(B,4)="-"AND L$(B,5)="-"LET YY=5
3013 IF YY=5AND KO<=0AND L$(B,6)="-"AND L$(B,7)="-"THEN 20000
3020 NEXT I
3029 W$=INKEY$ :IF INKEY$ =""THEN 3029
3030 CLS 
3031 PRINT "TAPEZ SPACE":D$=INKEY$ :IF D$=" "THEN 3040
3032 GOTO 3031
3040 NEXT J
3050 RETURN 
4000 REM PASSE
4010 BEEP 1:PRINT " JOUEUR ";B;" VOUS PASSEZ":PA=PA+1:GOTO 12000
4100 REM ECHANGE
4101 FOR I=1TO 7:X$(I)=J$(B,I):NEXT I
4105 FOR I=1TO 7:J$(B,I)=L$(B,I):NEXT I
4110 BEEP 1:R=0:CLS :WAIT 90:PRINT "COMBIEN DE JETONS ECHANGEZ":INPUT "VOUS ?";JE:IF JE=0THEN 5012
4111 IF JE>KOTHEN 5012
4115 IF JE>7THEN 4112
4120 FOR I=1TO JE:CLS :BEEP 1,30*I,20:PRINT "LETTRE ";I;:INPUT " ? ";JE$(I):NEXT I
4125 FOR I=1TO JE
4130 IF JE$(I)<>J$(B,1)AND JE$(I)<>J$(B,2)AND JE$(I)<>J$(B,3)AND JE$(I)<>J$(B,4)LET R=2
4140 IF R=2AND JE$(I)<>J$(B,5)AND JE$(I)<>J$(B,6)AND JE$(I)<>J$(B,7)THEN 4101
4145 NEXT I
4146 FOR I=1TO JE
4150 S=RND 102:IF P$(S)="-"THEN 4150
4160 FOR W=1TO 7
4170 IF J$(B,W)=JE$(I)THEN 4200
4180 NEXT W
4200 GY$=L$(B,W),L$(B,W)=P$(S),J$(B,W)=P$(S)
4210 P$(S)=GY$
4220 NEXT I
4230 BEEP 1:CLS :WAIT 0:PRINT "JOUEUR ";B;" ";
4235 FOR I=1TO 7
4240 BEEP 1,I*30,20:PRINT L$(B,I);
4250 NEXT I
4260 D$=INKEY$ :IF D$=""THEN 4260
4270 GOTO 10250
5000 REM JEU
5001 B=0
5010 WAIT 90:B=B+1
5012 YY=0
5020 CLS :WAIT 90:BEEP 1:PRINT "JOUEUR";B;" A VOUS":BEEP 1:INPUT "HORIZONTAL OU VERTICAL? ";H$
5025 IF H$="H"OR H$="V"THEN 5035
5026 IF H$="P"THEN 4000
5027 IF KO>=1AND JO<>1AND H$="E"THEN 4100
5028 IF H$="L"THEN 5030
5029 GOTO 5020
5030 Q=B,N=B:GOSUB 3000
5034 GOTO 5020
5035 BEEP 1:PA=0:INPUT "NOMBRE DE LETTRES ? ";L:LP=0:IF L>15OR L<1THEN 5035
5036 IF L=1AND GH=1THEN 5035
5040 FOR F=1TO L
5050 WAIT 0:CLS :PRINT "LETTRE ";F;:BEEP 1:INPUT " ? ";L$(F)
5055 IF L$(F)=L$(B,1)OR L$(F)=L$(B,2)OR L$(F)=L$(B,3)OR L$(F)=L$(B,4)THEN 5058
5056 IF L$(F)=L$(B,5)OR L$(F)=L$(B,6)OR L$(F)=L$(B,7)OR L$(F)="+"THEN 5058
5057 GOTO 6000
5058 IF L$(F)="*"CLS :INPUT "LETTRE DU JOKER ? ";K$
5060 IF L$(F)="#"CLS :INPUT "LETTRE DU JOKER ? ";KO$
5062 FOR W=1TO 7:IF L$(B,W)=L$(F)LET L$(B,W)="":GOTO 5099
5063 NEXT W
5099 NEXT F
5100 FOR I=1TO L:IF L$(I)<>"+"LET LP=LP+1
5101 NEXT I
5102 IF GH=1AND LP=LTHEN 6000
5110 GOTO 10000
6000 WAIT 90:BEEP 1,200,200:CLS :PRINT "TU TRICHES !!!!!!!!!!!!!!!"
6001 FOR G=1TO 7
6002 L$(B,G)=J$(B,G)
6003 NEXT G
6010 GOTO 5020
10000 WAIT 90:CLS :PRINT "COORDONNEES DEPART ";
10010 BEEP 1:INPUT X1:PRINT X1;" ";:BEEP 1:INPUT Y$:PRINT Y$:IF Y$="/"THEN 6001
10011 Y1=ASC Y$-64:IF X1>15OR Y1>15OR X1<1OR Y1<1THEN 10000
10015 R1=X1,Q1=Y1
10020 CLS :PRINT "COORDONNEES ARRIVEE ";
10029 BEEP 1:INPUT X2:PRINT X2;" ";:BEEP 1:INPUT Y$:PRINT Y$:Y2=ASC Y$-64
10030 IF X2>15OR Y2>15OR X2<1OR Y2<1THEN 10020
10031 IF H$="H"AND Y2<>Y1THEN 10000
10032 IF H$="V"AND X2<>X1THEN 10000
10035 IF X1>X2OR Y1>Y2THEN 10000
10036 YH=0:FOR W=1TO L:IF L$(W)="+"LET YH=YH+1
10037 NEXT W
10038 IF YH=LGOTO 6001
10039 FOR I=1TO L:IF M$(R1,Q1)=""AND L$(I)="+"THEN 6001
10040 IF H$="H"LET R1=R1+1
10041 IF H$="V"LET Q1=Q1+1
10042 NEXT I
10043 CLS :PRINT "******* JE DESSINE *******"
10044 PT=0,MU=1,PS=0
10045 COLOR 0:FOR W=1TO L
10050 O=X1*14-6,P=(15-Y1)*14+6
10060 GLCURSOR (O,P):IF L$(W)="+"THEN 15000
10061 LPRINT L$(W):GLCURSOR (O,P):LPRINT L$(W)
10065 GOTO 15000
10070 IF H$="H"LET X1=X1+1
10080 IF H$="V"LET Y1=Y1+1
10100 NEXT W
10101 BO=0
10105 IF LP=7LET BO=50
10107 IF GH=0LET MU=MU*2
10110 PT(B)=PS*MU+BO
10120 T(B)=T(B)+PT(B)
10125 GLCURSOR (5,-50)
10130 CLS :WAIT 300:PRINT "JOUEUR";B;PT(B);"PTS TOTAL";T(B);"PTS"
10200 N=B,Q=B
10230 GOSUB 3000
10250 GH=1
12000 IF PA=JOTHEN 20000
12005 IF B=JOTHEN 5001
12010 GOTO 5010
14999 END
15000 REM COMPTAGE DES POINTS
15001 U$=""
15002 IF L$(W)="+"LET U$="+",L$(W)=M$(X1,Y1)
15018 PT=1
15019 IF L$(W)="#"OR L$(W)="*"LET PT=0
15020 IF ASC L$(W)>86AND ASC L$(W)<91OR L$(W)="K"LET PT=10
15030 IF L$(W)="J"OR L$(W)="Q"LET PT=8
15040 IF L$(W)="F"OR L$(W)="H"OR L$(W)="V"LET PT=4
15050 IF L$(W)="B"OR L$(W)="C"OR L$(W)="P"LET PT=3
15060 IF L$(W)="D"OR L$(W)="G"OR L$(W)="M"LET PT=2
15070 IF PX=2THEN 15120
15075 IF U$="+"THEN 15120
15080 IF A$(X1,Y1)="1"LET PT=PT*2
15090 IF A$(X1,Y1)="2"LET PT=PT*3
15100 IF A$(X1,Y1)="3"LET MU=MU*2
15110 IF A$(X1,Y1)="4"LET MU=MU*3
15120 PS=PS+PT
15121 IF PX=2THEN 20006
15125 M$(X1,Y1)=L$(W)
15130 IF L$(W)="*"LET M$(X1,Y1)=K$
15140 IF L$(W)="#"LET M$(X1,Y1)=KO$
15200 GOTO 10070
20000 W=0:CLS :WAIT 90:PRINT "     FIN DE LA PARTIE":GLCURSOR (5,-50)
20001 W=W+1,PT=0,PS=0
20002 FOR I=1TO 7
20003 IF J$(W,I)<>"-"LET L$(W)=J$(W,I),PX=2:GOTO 15000
20006 NEXT I:MT(W)=PS:IF W<JOTHEN 20001
20007 FOR W=1TO JO:T(W)=T(W)-MT(W):NEXT W
20008 MP=MT(1)+MT(2)+MT(3)+MT(4)
20009 FOR W=1TO JO:IF MT(W)=0LET T(W)=T(W)+MP
20010 NEXT W
20100 TEXT :CSIZE 1:COLOR 1:BEEP 4
20110 FOR W=1TO JO
20120 LPRINT "      ";N$(W);" MARQUE : ";T(W);" PTS"
20130 NEXT W
20132 IF T(1)>T(2)AND T(1)>T(3)AND T(1)>T(4)LET JO=1
20134 IF T(2)>T(1)AND T(2)>T(3)AND T(2)>T(4)LET JO=2
20136 IF T(3)>T(1)AND T(3)>T(2)AND T(3)>T(4)LET JO=3
20138 IF T(4)>T(1)AND T(4)>T(2)AND T(4)>T(3)LET JO=4
20140 LF 2:COLOR 3:CSIZE 2:LPRINT "  1er =";N$(JO):LPRINT "  AVEC:";T(JO);" POINTS":LF 3
21000 WAIT 0:PRINT "UNE AUTRE PETITE PARTIE ?":BEEP 1:D$=INKEY$ :IF D$=""THEN 21000
21010 IF D$="O"THEN 2
21020 IF D$="N"THEN END
21030 GOTO 21000
50000 WAIT 100:PRINT "*******  SCRABBLE  *******"
50010 PRINT "REGLES DU JEU"
50011 PRINT "Le but du jeu consiste a"
50012 PRINT "composer des mots avec ses"
50013 PRINT "lettres, et ainsi marquer"
50014 PRINT "des points en tenant"
50015 PRINT "compte de la valeur des"
50016 PRINT "lettres et des cases de"
50017 PRINT "bonus. Poser ses 7 lettres"
50018 PRINT "en une fois rapporte 50"
50019 PRINT "points. Les jokers * et #"
50020 PRINT "ne rapportent pas de"
50021 PRINT "points. Un jeton pose ne"
50022 PRINT "peut plus etre tire."
50023 PRINT "Le premier joueur doit"
50024 PRINT "faire passer son mot par"
50025 PRINT "la case centrale (noire)."
50026 PRINT "Par la suite les mots"
50027 PRINT "devront se couper a angle"
50029 PRINT "droit, et se lire"
50030 PRINT "horizontalement ou"
50031 PRINT "verticalement."
50032 PRINT "Il est possible d'ajouter"
50033 PRINT "des lettres a un mot deja"
50034 PRINT "forme, alors seule compte"
50035 PRINT "la valeur des lettres de"
50036 PRINT "ce mot."
50037 PRINT "Le jeu se termine si tous"
50038 PRINT "les joueurs passent, ou si"
50039 PRINT "l'un deux n'a plus de"
50040 PRINT "lettres. Le vainqueur est"
50041 PRINT "alors celui qui a totalise"
50042 PRINT "le plus de points."
50043 PRINT "La somme des pions restant"
50044 PRINT "alors a chaque joueur"
50045 PRINT "est deduite de leur total"
50046 PRINT "respectif."
50100 RETURN 
