Listing of file='TOWER' on disk='vmedia/games_vol_3.wvd.zip'
# Sector 343, program filename = 'TOWER' 0001 REM % TOWER OF HANOI - GRM 0020 DIM C$1,D$(9)20,L(9),G(11,3),I$1,K$5,L$1,M1$60,M2$60,M3$60,R$20,T$1 0030 PRINT HEX(06) : PRINT HEX(0202020F) : K$=HEX(020402000E) 0040 D,L,C=0 0050 PRINT HEX(03) : PRINT AT(2,20);HEX(020402040E);"WELCOME TO THE TOWER OF HANOI";HEX(0F) : PRINT : PRINT " The object of this puzzle is to transfer all the discs in the ' TOWER'" : PRINT " on the left hand side of the screen (ie Tower A) and form an id entical" 0060 PRINT " tower on the right hand side of the screen (at tower C)." 0070 N=4 : T=VAL("A")-64 : GOSUB 510 0080 PRINT AT(17,3);"Any disc may be moved to any tower, any number of times. However, you" : PRINT " can only move one disc at a time - from the top of one tower to the top" : PRINT " of another tower. You can not transfer a larger disc on to the top of" 0090 PRINT " a smaller disc." 0100 PRINT AT(22,20);"Any key .. "; : KEYIN T$ : IF T$="0"THEN 230 : PRINT AT(22,20,20) : PRINT : PRINT AT(22,5);" PLEASE NOTE: To terminate the game, key '0' at any inp ut." : PRINT : PRINT " You can play with any number of discs between 4 and 9, but " 0110 PRINT " remember, the more discs there are, the longer it takes !!" : PRINT : PRINT 0120 PRINT AT(23,7);"How many discs would you like in the tower (4 to 9) : "; : KEYIN T$ : IF T$="0"THEN 230 : CONVERT T$TO N : ERRORPRINT HEX(07); : GOTO 120 0130 IF N=0THEN 230 0140 IF N>3AND N<=9THEN 150 : M1$="I don't believe it! - I thought choosing a number between" : M2$="4 and 9 would be easy enough!" : FOR I=1TO 3 : PRINT : NEXT I : GOSUB 360 : PRINT " If you can not decide, you had better key zero '0'" : PRINT : PRINT : D=1 : GOTO 120 0150 D=0 : IF C>0THEN 160 : IF L<NOR L=9THEN 160 : PRINT : PRINT "Come on chicken. You've already played with "; : IF L=NTHEN PRINT "that many discs before." : ELSE PRINT "more discs than that" : PRINT TAB(11);"How about a bit of a challenge and try more discs" : C=1 : GOTO 120 0160 PRINT : T=VAL("A")-64 : K=0 : GOSUB 450 0170 REM NOW READY TO PLAY !!!!! 0180 REM DO LOOP BEGIN 0190 GOSUB 280 : GOSUB 300 : IF R2=1THEN 190 : GOSUB 310 : IF O=0THEN 190 : GOSUB 320 : IF S=1THEN 190 0200 GOSUB 410 : GOSUB 250 : GOSUB 260 : GOSUB 270 : IF D0=1THEN 220 0210 IF F=1THEN GOSUB 240 : GOTO 180 0220 GOSUB 420 : IF T$="Y"THEN 120 0230 PRINT HEX(0202000F) : LOAD T"GAMES" : ERRORLOAD T"START" 0240 M1$="Ha Ha You think you've finished don't you - Don't be a fool" : M2$="You have to move the discs to tower \C3 not tower \C2 !!" : GOSUB 360 : RETURN 0250 PRINT AT(14-N2,T0*20-2-(LEN(D$(M))-1)/2);D$(M) : G(N2+1,T0)=M : L(M)=T0*100+N2 : K=K+1 : PRINT AT(16,67);K : RETURN 0260 C$=BIN(F0+64) : R$=" " : STR(R$,10,1)=HEX(86) : PRINT AT(14-R,F0*20-11);STR(R$,,18) : G(R+1,F0)=0 : RETURN 0270 D0,F=1 : FOR I=1TO N : IF G(I+1,2)<>N-I+1THEN F=0 : IF G(I+1,3)<>N-I+1THEN D0=0 : IF F=0AND D0=0THEN I=N : NEXT I : RETURN 0280 PRINT AT(18,48,30); : KEYIN T$ : PRINT AT(18,48);T$; : IF T$="0"THEN 230 : M=VAL(T$)-48 : IF M>0AND M<=NTHEN 290 : M1$="Life's hard enough without making me go round the bend" : M2$="looking for discs that don't even exist !" : GOSUB 360 : GOTO 280 0290 PRINT AT(20,39,40); : KEYIN T$ : PRINT AT(20,39);T$ : IF T$="0"THEN 230 : T0=VAL(T$)-64 : IF T0>0AND T0<4THEN RETURN : PRINT AT(22,12);K$;"Got the directions, I think that tower is in Timbucto o !!"; : PRINT AT(23,12);"How about a little closer to home? ---> Like A,B or C." ;HEX(0F); : GOSUB 390 : GOTO 290 0300 R2=0 : F0=INT(L(M)/100) : R=L(M)-(100*F0) : IF F0<>T0THEN RETURN : M1$="Oh boy. Got a right one here. You want me to move" : M2$="from tower "&T$&" to tower "&T$&" BIG DEAL !" : GOSUB 360 : GOSUB 410 : R2=1 : RETURN 0310 O=1 : IF G(R+2,F0)=0THEN RETURN : M1$=" No can do. Union rules say one at a time" : M2$="Besides, it might hurt my back!" : O=0 : GOSUB 360 : GOSUB 410 : RETURN 0320 S=0 : FOR I=1TO N : IF G(I+1,T0)>0THEN 350 : IF G(I,T0)>M THEN 330 : M1$="HELP! You would squash me! Leave that steaming" : M2$=" great disc where it is." : GOSUB 360 : S=1 : GOSUB 410 : GOTO 340 0330 N2=I 0340 I=N 0350 NEXT I : RETURN 0360 PRINT AT(22,7);HEX(020402000E);M1$ : PRINT AT(23,12);M2$;HEX(0F); : IF D=0THEN 390 0370 PRINT : PRINT : PRINT ,"So I was wrong. It was too hard!" : PRINT : PRINT ,"This game will be TOO hard for you." : PRINT ," I suggest you try another game." : PRINT : PRINT 0380 PRINT AT(23,23);HEX(02040B020E);"* * WAIT A MINUTE * *";HEX(0F); : GOSUB '40(10) : GOTO 230 0390 GOSUB '40(5) 0400 PRINT AT(22,0,79) : PRINT AT(23,0,79); : RETURN 0410 PRINT AT(18,48,30);AT(20,39,40); : RETURN 0420 L=N : PRINT AT(18,1,79);AT(20,1,79); : M3$="Join the happy club. You've joined the majority of players." : IF K<=2^NTHEN M3$="I can see you've done this before (or else you're very lucky.)" 0430 IF K>2^(N+1)*.75THEN M3$="I'm glad that's over - I was beginning to think it wouldn't end!" : IF K>=2^(N+1)THEN LET M3$=" A new world record for the number of move s !" : PRINT AT(19,8);M3$ 0440 C=0 : PRINT AT(21,5);"Would you like to try another round "; : KEYIN T$ : IF T$="0"THEN 230 : PRINT : RETURN 0450 PRINT HEX(03) : PRINT AT(2,31);"TOWER OF HANOI" 0460 FOR J=1TO 3 : G(1,J)=10 : FOR I=2TO 11 : G(I,J)=0 : NEXT I : NEXT J 0470 FOR I=1TO N : L(I)=N+1-I+T*100 : G(I+1,T)=N+1-I : NEXT I : GOSUB 510 0480 PRINT AT(16,6);"A perfect game with";N;"discs requires";2^N-1;"moves.";TA B(56);"Moves made = 0" 0490 PRINT AT(18,5); : PRINTUSING "Which disc do you want to move (1 to #) : ",N; : PRINT AT(20,10);"To which tower (A,B or C) :" 0500 RETURN 0510 FOR J=14TO 15 : FOR J1=6TO 71 : PRINT AT(J,J1);HEX(FF); : NEXT J1 : NEXT J 0520 FOR I=18TO 58STEP 20 : L$=BIN((I+2)/20+64) : FOR J=13-NTO 14 : PRINT AT(J,I); : IF J=14THEN PRINT L$; : ELSE PRINT HEX(86); : NEXT J : NEXT I 0530 FOR I=1 TO N : CONVERT ITO I$,(#) : STR(D$(I),,1)=I$ : STR(D$(I),1,2*I+1)=ALL(HEX(CF)) : STR(D$(I),I+1,1)=I$ : NEXT I 0540 FOR I=NTO 1STEP -1 : X=T*20-2-(LEN(D$(I))-1)/2 : PRINT AT(13-N+I,X);D$(I); : NEXT I : RETURN 0550 DEFFN'40(Y) : SELECT P3 : FOR I=1TO Y : PRINT HEX(070D); : NEXT I : SELECT P0 : RETURN