690 IF T = 1 THEN A = 1:B = 3: IF RG/2 = INT(RG/2) THEN B = 2: RETURN
700 FOR R = 1 TO 3:S(R) = 0
710 FOR N = 1 TO RG
720 IF P(R,N) >0 THEN S(R) = N:N = RG
730 NEXT : IF S(R) = 0 THEN S(R) = RG +1
740 NEXT
750 REM --NOW, ON EVEN MOVES, WILL MOVE THE MIDDLE TO THE LOWER LEVEL; ON ODD MOVES MOVE UPPER RING TO MIDDLE (IFUPP-MID IS ODD),OR UPPER TO LOWER (IF UPP-MID IS EVEN.)
760 Q = 1
770 FOR R = 1 TO 3
780 IF S(R) = 1 THEN UP = R
790 IF S(R) >Q THEN Q = S(R):LO = R
800 NEXT
810 MI = 6 -UP -LO
820 IF T/2 = INT(T/2) THEN A = MI:B = LO: RETURN
830 IF (S(MI) -S(UP))/2 = INT((S(MI) -S(UP))/2) THEN A = UP:B = LO: RETURN
840 A = UP:B = MI: RETURN
850 REM ***********TO MAIN.*****
860 PRINT : PRINT : PRINT : IF W = 1 THEN GOTO 880
870 PRINT "YOU MOVED "T -1,;: FLASH : PRINT " AND FAILED !": NORMAL :S = 49200: FOR BT = 1 TO 50:BZ = PEEK(S) + PEEK(S) + PEEK(S) + PEEK(S): NEXT BT: GOTO 900: REM BUZZ SOUND
880 INVERSE : PRINT "YOU SOLVED PUZZLE IN "T -1" MOVES!": NORMAL
890 FOR BL = 1 TO RG: CALL -1052: NEXT BL: REM BELL SOUND
900 X = 2 ^RG -1
910 PRINT "-BEST SO FAR FOR "RG" RINGS IS "X" MOVES."
920 INPUT "WANT TO PLAY AGAIN? (Y/N) ";C$
930 IF C$ >"NO" THEN GOTO 160
940 TEXT : HOME : PRINT "E N D .": END
2220 PRINT D$(T,VB(T) +N): NORMAL :S = PEEK(SS): NEXT
2230 SB$(T) = D$(T,VB(T) +W):VB(T) = VB(T) +W:VT(F) = VT(F) -1:VB(F) = VT(F):ST$(F) = D$(F,VT(F)):SB$(F) = ST$(F):A$ = RIGHT$(ST$(F),1): IF A$ = "D" OR A$ = "H" THEN INVERSE
2290 VTAB 23: HTAB 15: PRINT " ":SB$(T) = R$(Q):D$(T,VB(T) +1) = R$(Q):VB(T) = VB(T) +1:A$ = RIGHT$(R$(Q),1): IF A$ = "D" OR A$ = "H" THEN INVERSE
2300 IF VT(T) = 0 THEN VT(T) = 1:ST$(T) = D$(T,1)
2310 VTAB 4 +VB(T): HTAB 5 *T -4: PRINT R$(Q):RT = RT -1: FOR N = Q TO (RT):R$(N) = R$(N +1): NEXT :R$(RT +1) = "":Q = Q -1: IF Q = 0 THEN Q = 3
2320 IF Q >RT THEN Q = RT
2330 NORMAL : IF Q = RT THEN VTAB 23: HTAB 10: PRINT " "
2340 A$ = RIGHT$(R$(Q),1): IF A$ = "D" OR A$ = "H" THEN INVERSE
2350 VTAB 23: HTAB 15: PRINT R$(Q): NORMAL : RETURN
2360 REM ***************************************
2999 REM #3000 **** SUB DEAL REMAINDER *******
3000 VTAB 23: HTAB 10: PRINT " ": FOR N = 1 TO 100: NEXT
3010 IF Q = RT THEN Q = 0
3020 Q = Q +3: IF Q >RT THEN Q = RT
3030 VTAB 23: HTAB 15:A$ = RIGHT$(R$(Q),1): IF A$ = "D" OR A$ = "H" THEN INVERSE
3040 PRINT R$(Q): FOR N = Q TO (RT): VTAB 23: HTAB 10: INVERSE : PRINT "****":S = PEEK(SS): FOR P = 1 TO 20: NEXT : VTAB 23: HTAB 10: NORMAL : PRINT " ": NEXT
3050 IF RT >1 THEN VTAB 23: HTAB 10: INVERSE : PRINT "****": NORMAL
3060 IF Q = RT THEN VTAB 23: HTAB 10: INVERSE : PRINT " ": NORMAL
3070 RETURN
3080 REM **************************************
3999 REM #4000 **** SUB TO QUIT GAME ********
4000 Z = 0: FOR H = 1 TO 7: IF VT(H) >1 THEN Z = 1:H = 7: REM ** LOSE **
4010 NEXT : IF RT >1 THEN Z = 1: REM **LOSE **
4020 GP = GP +1: IF Z = 0 THEN FOR N = 1 TO 3: CALL -1052: NEXT :GW = GW +1: REM **WIN **
4030 IF Z = 1 THEN FOR N = 1 TO 200:S = PEEK(SS) + PEEK(SS): NEXT : REM **LOSE **
4040 TEXT : HOME : VTAB 10: HTAB 20: IF Z = 0 THEN PRINT "Y O U W I N !!!"
4050 IF Z = 1 THEN PRINT "Y O U L O S E !!!"
4060 VTAB 15: HTAB 10: PRINT GW" WON / "GP" PLAYED = " INT((GW/GP) *100 +.5)" %": RETURN
4999 REM #5000 ****** SUB TO FIX ERROR ******
5000 FOR N = 1 TO 200:S = PEEK(SS) + PEEK(SS): NEXT : VTAB 23: HTAB 20: PRINT " ": RETURN
6010 IF CS THEN V = VAL(F$): IF V >0 AND V <8 THEN A$ = LEFT$(ST$(V),1)
6020 IF CS THEN IF V = 0 THEN A$ = "?"
6030 IF CS THEN IF V = 8 THEN A$ = LEFT$(R$(Q),1)
6040 IF CS THEN IF F$ = "Q" THEN A$ = F$
6050 VTAB Y: HTAB H: PRINT "-";:X1 = X:Y1 = Y: IF CS THEN HTAB H: PRINT A$
6060 REM *** ADJUST JOY HERE ****
6070 FOR PP = 0 TO 1 STEP 0
6080 PX = PDL(0): IF PEEK(49249) >140 THEN JJ = 1:SQ = 300:PP = 1
6090 PY = PDL(1): IF (PX >140 OR PX <114) OR (PY >150 OR PY <104) THEN PP = 1
6100 M = RND(1)
6110 NEXT PP: REM ** LOOPS TILL CHANGED **
6120 X = X +(PX >140) -(PX <114):SQ = 1 + ABS(PX -127)/10:Y = Y +20 *(PY >150) -20 *(PY <104)
6130 IF X <1 THEN X = 1
6140 IF X >7 THEN X = 7
6150 IF Y <3 THEN Y = 1
6160 IF Y = 21 THEN Y = 3
6170 IF Y >3 THEN Y = 23
6180 BZ = PEEK(SS) + PEEK(SS): NORMAL : VTAB Y1: HTAB H: PRINT " ": FOR P = 1 TO 200/SQ: NEXT
6190 NEXT JJ
6200 W = X1 *(Y1 = 3) +8 *(Y1 = 23)
6210 TT$ = STR$(W): IF X1 = 7 AND Y1 = 23 THEN TT$ = "Q"
6220 RETURN : REM ** TO PLAYER SEQUENCE **
6230 REM *********************************
6999 REM #7000 *** SUB INSTRUCTIONS ******
7000 HOME : SPEED= 100: IF JS THEN 7030
7010 PRINT "PICK UP AND PLACE CARDS BY": PRINT : PRINT "TYPING THE NUMBER OF A PILE.": PRINT : PRINT : PRINT "HIT <ANY KEY> TWICE": PRINT : PRINT "TO SORT PILE BY THREE'S."