98 lines
2.3 KiB
Text
98 lines
2.3 KiB
Text
100 GOSUB 500INITIALIZE
|
|
110 FOR Q = 1 TO 1
|
|
120 IF I <> X OR J <> Y THEN GOSUB 200MOVE
|
|
130 ON W GOSUB 330,450
|
|
140 LET I = K(0, K) + X
|
|
150 LET J = K(1, K) + Y
|
|
160 LET Q = K(2, K) OR W = 3
|
|
170 NEXT Q
|
|
180 VTAB T + 3
|
|
190 END
|
|
|
|
REM MOVE
|
|
200 IF I < 0 THEN RETURN
|
|
210 IF I > 3 THEN RETURN
|
|
220 IF J < 0 THEN RETURN
|
|
230 IF J > 3 THEN RETURN
|
|
240 LET M = (I + J * 4) * 3
|
|
250 LET N = (X + Y * 4) * 3
|
|
260 IF N > M GOTO 290SWAP
|
|
270 LET N = M
|
|
280 LET M = (X + Y * 4) * 3
|
|
REM SWAP
|
|
290 LET A$ = MID$(A$, 1, M) + MID$(A$, N + 1, 2) + MID$(A$,M + 3, N - M - 2) + MID$(A$, M + 1, 2) + MID$(A$, N + 3)
|
|
300 LET X = I
|
|
310 LET Y = J
|
|
320 ON W GOTO 440,400
|
|
|
|
REM RANDOM MOVE
|
|
330 VTAB T + 3
|
|
340 HTAB 2
|
|
350 PRINT MID$(S$, S + 1, 10);
|
|
360 LET S = NOT S
|
|
370 LET K = INT(RND(1) * 4) + 1
|
|
380 IF PEEK(49152) < 128 OR A$ = W$ THEN RETURN
|
|
390 LET K = PEEK(49168) * 0
|
|
REM SHOW
|
|
400 VTAB T
|
|
410 HTAB 1
|
|
420 PRINT A$;
|
|
430 LET W = (A$ = W$) + 2
|
|
REM DON'T SHOW
|
|
440 RETURN
|
|
|
|
REM GET KEY
|
|
450 VTAB T + Y
|
|
460 HTAB X * 3 + 2
|
|
470 GET K$
|
|
480 LET K = ASC (K$)
|
|
490 RETURN
|
|
|
|
REM INITIALIZE
|
|
500 PRINT " 15-PUZZLE"
|
|
|
|
REM KEYBOARD
|
|
|
|
REM ARROW KEYS TWO HANDED CLASSIC T REVERSE T SEQUENCED
|
|
REM ^K A I G ^C
|
|
REM ^H ^J ^U , Z . J K L H T F ^B ^D ^A
|
|
|
|
REM RIGHT , J H ^A
|
|
510 DATA8,44,74,106,72,104,1
|
|
|
|
REM LEFT . L F ^B
|
|
520 DATA21,46,76,108,70,102,2
|
|
|
|
REM DOWN A I G ^C
|
|
530 DATA11,65,97,73,105,71,103,3
|
|
|
|
REM UP Z K T ^D
|
|
540 DATA10,90,122,75,107,84,116,4
|
|
|
|
REM QUIT ^Q ESC
|
|
550 DATA0,17,27,0
|
|
|
|
560 DIM K(2,127)
|
|
570 FOR V = 0 TO 2
|
|
580 FOR D = - 1 TO 1 STEP 2
|
|
590 FOR R = 1 TO 1
|
|
600 READ K
|
|
610 LET K(V,K) = D
|
|
620 LET R = K < 5
|
|
630 NEXT R,D,V
|
|
640 LET A$ = " 1 2 3 4"
|
|
650 LET M$ = CHR$ (13)
|
|
660 LET L$ = " 5 6 7 8"
|
|
670 LET A$ = A$ + M$ + L$
|
|
680 LET L$ = " 9 10 11 12"
|
|
690 LET A$ = A$ + M$ + L$
|
|
700 LET L$ = "13 14 15 "
|
|
710 LET A$ = A$ + M$ + L$
|
|
720 LET W$ = A$
|
|
730 DATA3,3,3,3,1,0
|
|
740 READ X,Y,I,J,W,k(2, 0)
|
|
750 PRINT "PRESS A KEY"
|
|
760 PRINT " TO STOP"
|
|
770 LET S$ = " SHUFFLING "
|
|
780 LET T = PEEK(37) - 2
|
|
790 RETURN
|