DECLARE SUB Win () DECLARE FUNCTION EmptyPeg% (Empt%) DECLARE SUB DrawBoard () CLS ' The variable Disk is a two dimensional array 'with values of Disk Width and Disk Column DIM SHARED Disk(10, 1), NumDisks% Y = 3 DO LOCATE 1, 1 INPUT "Enter The Number Of Disks You Want: ", NumDisks% IF NumDisks% < 4 OR NumDisks% > 10 THEN LOCATE 1, 1: PRINT STRING$(40, " "); END IF LOOP UNTIL NumDisks% >= 4 AND NumDisks% <= 10 FOR X = 1 TO NumDisks% Y = Y + 1 Disk(X, 0) = X + Y Disk(X, 1) = 1 NEXT X DrawBoard DO DO LOCATE 20, 1: INPUT "Move Disk Of Which Column: ", MoveDiskof% LOCATE 20, 1: PRINT STRING$(32, " ") IF SGN(MoveDiskof%) = -1 THEN END LOOP UNTIL MoveDiskof% < 4 AND MoveDiskof% > 0 DO LOCATE 20, 1: INPUT "Move Disk To Which Column: ", MoveDiskTo% LOCATE 20, 1: PRINT STRING$(32, " ") IF SGN(MoveDiskof%) = -1 THEN END LOOP UNTIL MoveDiskTo% < 4 AND MoveDiskTo% > 0 FOR X = 1 TO NumDisks% IF Disk(X, 1) = MoveDiskof% THEN J = X: EXIT FOR NEXT X FOR B = 1 TO NumDisks% IF Disk(B, 1) = MoveDiskTo% THEN IF Disk(J, 0) < Disk(B, 0) THEN Disk(J, 1) = MoveDiskTo% EXIT FOR ELSE LOCATE 20, 1: PRINT "Sorry That Move Is Unavailable." z$ = INPUT$(1) LOCATE 20, 1: PRINT STRING$(32, " ") G = 1 EXIT FOR END IF ELSEIF EmptyPeg%(MoveDiskTo%) = 0 THEN Disk(J, 1) = MoveDiskTo% EXIT FOR END IF NEXT B Win IF G = 0 THEN DrawBoard G = 0 LOOP SUB DrawBoard CLS LOCATE 1, 32: PRINT "Towers Of Hanoi" LOCATE 18, 1: PRINT STRING$(80, "Ü"); FOR X = 7 TO 18 LOCATE X, 15: PRINT "Û" LOCATE X, 40: PRINT "Û" LOCATE X, 65: PRINT "Û" NEXT X REDIM Rows(3) FOR X = NumDisks% TO 1 STEP -1 IF Disk(X, 1) = 1 THEN Rows(1) = Rows(1) + 1 COLOR Disk(X, 0) \ 2 LOCATE 18 - Rows(1), 15 - Disk(X, 0) \ 2 PRINT STRING$(Disk(X, 0), "Ü"); LOCATE 18 - Rows(1), 15: PRINT LTRIM$(RTRIM$(STR$(X))) ELSEIF Disk(X, 1) = 2 THEN Rows(2) = Rows(2) + 1 COLOR Disk(X, 0) \ 2 LOCATE 18 - Rows(2), 40 - Disk(X, 0) \ 2 PRINT STRING$(Disk(X, 0), "Ü"); LOCATE 18 - Rows(2), 40: PRINT LTRIM$(RTRIM$(STR$(X))) ELSEIF Disk(X, 1) = 3 THEN Rows(3) = Rows(3) + 1 COLOR Disk(X, 0) \ 2 LOCATE 18 - Rows(3), 65 - Disk(X, 0) \ 2 PRINT STRING$(Disk(X, 0), "Ü"); LOCATE 18 - Rows(3), 65: PRINT LTRIM$(RTRIM$(STR$(X))) END IF NEXT X COLOR 7 END SUB FUNCTION EmptyPeg% (Empt%) EmptyPeg% = 0 FOR X = 1 TO 10 IF Disk(X, 1) = Empt% THEN EmptyPeg% = 1: EXIT FOR ELSE EmptyPeg% = 0 NEXT X END FUNCTION SUB Win FOR X = 1 TO NumDisks% IF Disk(X, 1) = 2 THEN V = 1 ELSE V = 0: EXIT FOR NEXT X FOR X = 1 TO NumDisks% IF Disk(X, 1) = 3 THEN W = 1 ELSE W = 0: EXIT FOR NEXT X IF V = 1 OR W = 1 THEN CLS LOCATE 12, 36: PRINT "You Win!" LOCATE 13, 34: PRINT "With"; NumDisks%; "Disks" END END IF V = 0 W = 0 END SUB