1    REM **************************
5    REM *** PARA A LINHA APPLE ***
10   REM *** LETRAS MAGICAS     ***
15   REM **************************
20   GOSUB 1000: REM INSTRUCOES
30   GOSUB 2000: REM COLOCAR VARIAVEIS
40   GOSUB 3000: REM JOGAR
50   GOSUB 4000: REM FIM
60   END
1000 REM *** INSTRUCOES ***
1010 TEXT: HOME: NORMAL
1020 VTAB 3: HTAB 9: PRINT "*** QUADRADOS MAGICOS ***"
1030 VTAB 7: PRINT "NESSE JOGO, VOCE TEM UM QUADRADO 4 POR 4 QUE CONTEM AS LETRAS DE A-O."
1040 PRINT: PRINT "O OBJETIVO E DE ALFABETIZAR HORIZONTALMENTE AS LETRAS QUE NAO ESTAO EM ORDEM."
1050 PRINT: PRINT "VOCE PODERA MEXER UMA DAS PECAS PARA OS LADOS OU PARA CIMA OU PARA BAIXO; MAS SO SE HOUVER UM ESPACO VAGO."
1060 VTAB 23: INVERSE: PRINT " APERTE QUALQUER TECLA PARA CONTINUAR:"
1070 IF PEEK ( -16384) > 128 THEN POKE - 16368,0: RETURN
1080 GOTO 1070
2000 REM *** COLOCAR VARIAVEIS ***
2005 DEF FN C(X) = (X-1) * 8 + 2
2010 DIM B(4,4): FOR I = 1 TO 4: FOR J = 1 TO 4: K = K + 1: B(J,I) = K: NEXT J,I
2020 DIM DIR(4,2): FOR I = 1 TO 4: READ DIR(I,1),DIR(I,2): NEXT: DATA 1,0,0,1,-1,0,0,-1
2025 GR: COLOR = 12
2026 FOR I = 1 TO 32: HLIN 0,32 AT I: NEXT
2027 COLOR = 15
2028 FOR I = 0 TO 32 STEP 8: HLIN 0,32 AT I: VLIN 0,32 AT I:NEXT I
2029 CO = 15: GOSUB 2100
2030 VTAB 23: PRINT "<<< ESTOU MISTURANDO AS LETRAS >>>    "
2040 SX = 4: SY = 4: SC = INT ( RND (1) * 50) + 100: FOR K = 1 TO SC
2050 D = INT ( RND (1) * 4) + 1: PX = SX + DI(D,1): PY = SY + DI(D,2): IF PX < 1 OR PX > 4 OR PY < 1 OR PY > 4 THEN 2050
2060 B(SX,SY) = B(PX,PY)
2061 J = SX: I = SY: CO = 14: GOSUB 2200
2062 J = PX: I = PY: CO = 12: GOSUB 2200
2065 B(PX,PY) = 0: SX = PX: SY = PY
2070 NEXT K: RETURN
2100 REM *** DESENHAR TABLADO ***
2110 FOR I = 1 TO 4: FOR J = I TO 4: CO = 14: GOSUB 2200: NEXT J,I: RETURN
2200 REM *** DESENHAR LETRA ***
2205 X = FN C(J): Y = FN C(I): COLOR = CO
2210 ON B(J,I) ; 1 GOSUB 2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235: RETURN
2220 RETURN
2221 PLOT X + 2,Y: PLOT X + 1, Y + 1:  PLOT X + 3,Y + 1: VLIN Y + 2,Y + 4 AT X: VLIN Y + 2, Y + 4 AT X + 4: HLIN X,X + 4 AT Y + 3: RETURN
2222 VLIN Y,Y + 4 AT X: HLIN X,X + 3 AT Y: HLIN X,X + 3 AT Y + 2: HLIN X, X + 3 AT Y + 4: PLOT X + 4,Y + 1: PLOT X + 4,Y + 3: RETURN
2223 HLIN X,X + 4 AT Y: HLIN X,X + 4 AT Y + 4: VLIN Y,Y + 4 AT X: RETURN
2224 HLIN X,X + 3 AT Y: HLIN X,X + 3 AT Y + 4: VLIN Y , Y + 4 AT X: VLIN Y + 1,Y + 3 AT X + 4: RETURN
2225 HLIN X,X + 4 AT Y: HLIN X,X + 3 AT Y + 2: HLIN X,X + 4 AT Y + 4: VLIN Y,Y + 4.AT X: RETURN
2226 HLIN X,X + 4 AT Y: HLIN X,X + 3 AT Y + 2: VLIN Y,Y + 4 AT X: RETURN
2227 HLIN X,X + 3 AT Y: HLIN X,X + 4 AT Y + 4: VLIN Y,Y + 4 AT X: VLIN Y + 2,Y + 4 AT X + 4: PLOT X + 3,Y + 2: RETURN
2228 HLIN X,X + 4 AT Y + 2: VLIN Y,Y + 4 AT X: VLIN Y,Y + 4 AT X + 4: RETURN
2229 HLIN X,X + 4 AT Y: HLIN X, X + 4 AT Y + 4:: VLIN Y,Y + 4 AT X + 2: RETURN
2230 HLIN X,X + 4 AT Y: HLIN X + I,X + 2 AT Y + 4: PLOT X,Y + 3: VLIN Y,Y + 4 AT X + 2: RETURN
2231 VLIN Y,Y + 4 AT X: PLOT X + 1,Y + 2: PLOT X + 2,Y + 1: PLOT X + 2,Y + 3: PLOT X + 3,Y: PLOT X + 3,Y + 4: RETURN
2232 HLIN X,X + 4 AT Y + 4: VLIN Y,Y + 4 AT X: RETURN
2233 VLIN Y,Y + 4 AT X: VLIN Y,Y + 4 AT X + 4: PLOT X + 1,Y + 1: PLOT X + 3,Y + 1: PLOT X + 2,Y + 2: RETURN
2234 VLIN Y,Y + 4 AT X: VLIN Y,Y + 4 AT X + 4: PLOT X + 1,Y + 1: PLOT X + 2,Y + 2: PLOT X + 3,Y + 3: RETURN
2235 VLIN Y,Y + 4 AT X: VLIN Y,Y + 4 AT X + 4: HLIN X,X + 4 AT Y: HLIN X,X + 4 AT Y + 4: RETURN
2990 RETURN
3000 REM *** JOGAR ***
3005 NORMAL
3010 HOME: PRINT "MOVER QUE PECA: ";:GET ANS$: PRINT ANS$
3015 IF ANS$ < "A" OR ANS$ > "Z" THEN PRINT CHR$ (7): GOTO 3010
3020 FOR K = 1 TO 4: PX = SX + DIR(K,1): PY = SY + DIR(K,2)
3025 IF PX < 1 OR PX > 4 OR PY < 1 OR PY > 4 THEN 3040
3030 IF B(PX,PY) = ASC (ANS$) - 64 THEN MO = MO + 1: GOTO 3100
3040 NEXT K: PRINT CHR$ (7): GOTO 3010
3100 B(SX,SY) = B(PX,PY): J = SX:I = SY:CO = 14: GOSUB 2200
3110 J = PX: I = PY: CO = 12: GOSUB 2200 : B(PX,PY) = 0: SX = PX: SY = PY
3200 K = 0: FOR I = 1 TO 4: FOR J = 1 TO 4: K = K + 1: IF K = 16 THEN K = 0
3210 IF B(J,I) = K THEN NEXT J,I: RETURN
3220 GOTO 3010
3990 RETURN
4000 REM *** FIM ***
4010 TEXT: HOME
4020 PRINT "VOCE CONSEGUIU !!! "
4030 PRINT "AS LETRAS FORAM TROCADAS " SC" VEZES."
4035 PRINT "VOCE RESOLVEU EM "MO" MODIFICACOES."
4037 PRINT : PRINT "QUER TENTAR DE NOVO ? (S/N)";:GET Q$
4040 IF Q$ = "S" THEN RUN
4050 RETURN

