Listing of file='TOWERS.BAS;01' on disk='vmedia/board_games-sector.ccvf'
100 REM COPYRIGHT (C) 1979 BY COMPUCOLOR CORPORATION 110 REM 120 PLOT 15,6,32,12,27,24 130 PLOT 6,57 140 PLOT 3,15,3:PRINT SPC( 31)"" 150 PLOT 14,3,15,4:PRINT " T O W E R S O F H A N O I " 160 PLOT 15,6,39,3,10,30:PRINT "COPYRIGHT (C) 1979 BY COMPUCOLOR CORPORATION" 170 PLOT 3,80,0:FOR I= 1TO 2000:NEXT 180 DIM C$(10),C(10) 190 BC= 81 200 DIM T(3,10),TP(3) 210 DIM N(20),X(20),Y(20),Z(20) 220 PLOT 15 230 PLOT 6,7,12 240 INPUT "NUMBER OF DISKS: ";N 250 N= INT (N):IF N< 1OR N> 10THEN 230 260 INPUT "FAST OR SLOW: ";A$:SL= MID$ (A$,1,1)= "S" 270 PLOT 14,3,32,0:INPUT "DO YOU WANT TO MOVE? ";A$:MV= MID$ (A$,1,1)= "Y" 280 PLOT 3,32,0:PRINT SPC( 31)"" 290 PLOT 15 300 X= 1:Y= 2:Z= 3 310 GOSUB 800 320 IF MVTHEN NM= 0:GOTO 390 330 GOSUB 560 340 PLOT 6,7,3,36,7,14 350 INPUT "ANOTHER ? ";A$ 360 IF LEFT$ (A$,1)= "N"THEN LOAD "MENU":RUN 370 IF LEFT$ (A$,1)= "Y"THEN 220 380 GOTO 340 390 IF TP(2)= NTHEN 520 400 PLOT 0 410 PLOT 14,6,3,3,32,0:PRINT SPC( 31)"" 420 PLOT 3,32,0:INPUT "MOVE FROM: ";A$ 430 M1= INT (VAL (A$)):IF M1< 1OR M1> 3THEN 390 440 IF TP(M1)= 0THEN 390 450 PLOT 3,46,0:INPUT "TO: ";A$ 460 M2= INT (VAL (A$)):IF M2= M1OR M2< 1OR M2> 3THEN 390 470 IF T(M1,TP(M1))> T(M2,TP(M2))THEN 500 480 PLOT 15 490 GOSUB 620:NM= NM+ 1:GOTO 390 500 PLOT 6,1,3,32,4:PRINT "ILLEGAL MOVE" 510 FOR I= 1TO 500:NEXT :PLOT 3,32,4:PRINT SPC( 15)"":GOTO 390 520 PLOT 14,6,3,3,32,0:PRINT "IT TOOK YOU"NM" MOVES" 530 NN= INT (2^ N- .5) 540 IF NN= NMTHEN PLOT 6,2,3,32,4:PRINT "PERFECT GAME":GOTO 340 550 PLOT 6,6,3,32,4:PRINT "IT ONLY TAKES ME"NN" MOVES":GOTO 340 560 TS= TS+ 1:N(TS)= N:X(TS)= X:Y(TS)= Y:Z(TS)= Z 570 IF N(TS)= 0THEN 610 580 N= N(TS)- 1:X= X(TS):Y= Z(TS):Z= Y(TS):GOSUB 560 590 M1= X(TS):M2= Y(TS):GOSUB 620 600 N= N(TS)- 1:X= Z(TS):Y= Y(TS):Z= X(TS):GOSUB 560 610 TS= TS- 1:RETURN 620 IF SLTHEN 640 630 T= M1:M= T(T,TP(T)):GOSUB 910:T= M2:GOSUB 890:RETURN 640 T= M1:M= T(T,TP(T)):GOSUB 790:TP(T)= TP(T)- 1 650 P= B- 1:Q= 7:GOSUB 740 660 GOSUB 700 670 T= M2:TP(T)= TP(T)+ 1:T(T,TP(T))= M:GOSUB 790 680 P= 8:Q= B:GOSUB 740 690 RETURN 700 R= SGN (M2- M1):FOR I= 21* M1- 11+ RTO 21* M2- 11STEP R 710 PLOT 3,BC,I- R* (M+ 1),7,0,32 720 PLOT 3,BC,I+ R* M,7,C(M),32 730 NEXT :RETURN 740 R= SGN (Q- P):FOR I= PTO QSTEP R 750 PLOT 3,BC,A,I- R,0:PRINT SPC( D)"" 760 IF I- R> 8THEN PLOT 3,BC,C,I- R,56,32 770 PLOT 3,BC,A,I,C(M):PRINT SPC( D)"" 780 NEXT :RETURN 790 A= 21* T- M- 11:B= 30- 2* TP(T):C= A+ M:D= 2* M+ 1:RETURN 800 TS= 0:FOR I= 1TO 3:T(I,0)= N+ 1:TP(I)= 0:NEXT 810 PLOT 14,3,0,30,6,39:PRINT SPC( 63)"" 820 FOR I= 1TO 3:PLOT 3,21* I- 11,30,48+ I:NEXT :PLOT 15 830 PLOT 6,56,27,10:FOR I= 1TO 3:PLOT 3,21* I- 11,9:PRINT SPC( 21)"":NEXT :PLOT 27,24 840 T= 1 850 RESTORE :FOR I= 1TO 10:READ C:C(I)= 8* C:C$(I)= CHR$ (6)+ CHR$ (8* C):NEXT 860 FOR M= NTO 1STEP - 1:GOSUB 890:NEXT 870 RETURN 880 DATA 6,5,3,2,1,6,5,3,2,1 890 TP(T)= TP(T)+ 1:T(T,TP(T))= M 900 PLOT 3,BC,21* T- M- 11,30- 2* TP(T),C(M):PRINT SPC( 2* M+ 1)"":RETURN 910 PLOT 3,BC,21* (T- 1),30- 2* TP(T),0:PRINT SPC( 21)"" 920 PLOT 3,BC,21* T- 11,30- 2* TP(T),56,32 930 TP(T)= TP(T)- 1:RETURN