home *** CD-ROM | disk | FTP | other *** search
- ! Towers of Hanoi
- !
- ! Version 2.0 copyright (c) 1988 by True BASIC, Inc.
- !
- LET disks = 6
- CALL setup(disks,1)
- CALL hanoi(disks,1,2,3)
- CALL ending
-
- END
-
- MODULE Hanoi
-
- SHARE #1, top(3)
-
- SUB setup(n,a) ! n disks, on tower a
- OPEN #1: screen .1875,.8125,.2,.8
- SET WINDOW 0,4,0,n+2
- SET back 5
- SET TEXT justify "center","base"
- PLOT TEXT, AT 2,n+2.5: "The Towers of Hanoi"
- SET COLOR 2
- BOX AREA 0,4,0,1
- SET COLOR 0
- PLOT 0,1;4,1
- SET COLOR 3
- FOR i = 1 to 3
- BOX AREA i-.02,i+.02,1,n+1
- NEXT i
- FOR j = n to 1 step -1
- CALL disk(a,n+1-j,j,1)
- NEXT j
- LET top(1) = n
- END SUB
-
- SUB hanoi(n,a,b,c) ! Recursive routine
- IF n > 0 then
- CALL hanoi(n-1,a,c,b)
- CALL move(n,a,b)
- CALL hanoi(n-1,c,b,a)
- END IF
- END SUB
-
- SUB move(s,a,b)
- CALL disk(a,top(a),s,0) ! Erase
- LET top(a) = top(a) - 1
- LET top(b) = top(b) + 1
- CALL disk(b,top(b),s,1) ! Draw
- END SUB
-
- SUB disk(t,h,s,c) ! Tower no., height, size, color
- LET x1 = t - (s+1)/15
- LET x2 = t + (s+1)/15
- LET y1 = h
- LET y2 = h + 1
- SET COLOR c
- BOX AREA x1,x2,y1,y2
- IF c = 0 then ! If erasing, replace the tower
- SET COLOR 3
- BOX AREA t-.02,t+.02,y1,y2
- ELSE
- SET COLOR 0 ! Make an empty border
- BOX LINES x1,x2,y1,y2
- END IF
- PAUSE .2
- END SUB
-
- SUB ending
- SET COLOR 2
- PLOT TEXT, AT 2,-1.5: "N I R V A N A"
- ASK MAX COLOR mc
- IF mc<15 then
- FOR i = 1 to 49
- SET back 32*rnd
- PAUSE .05
- NEXT i
- ELSE
- FOR i = 1 to 30
- SET COLOR MIX(0) Max(.5,rnd),Max(.5,rnd),Max(.5,rnd)
- PAUSE .05
- NEXT i
- END IF
- END SUB
-
- END MODULE
-