Compucolor.org – Virtual Media

Listing of file='TOWERS.BAS;01' on disk='vmedia/sharks-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