home *** CD-ROM | disk | FTP | other *** search
- \ TOWERS-1
- \ The Famous Towers of Hanoi by Peter Midnight.
- \ From FORTH Dimensions Volume 2 Number 2.
- \ Converted to Laxen and Perry F83 by Jack Brown.
- \ The original author left out the stack comments and I don't
- \ have time to put them in today. Send me a copy with them in!
- : CLS ( -- -- ) dark ; \ Clear screen.
- \ CODE AT ( row col -- ) \ position cursor.
- \ AX POP DX POP AL DH MOV BH BH XOR 2 # AH MOV 16 INT
- \ NEXT END-CODE
- \ : 4DUP ( a b c d a b c d a b c d ) 2OVER 2OVER ;
- 12 CONSTANT NMAX VARIABLE (N) NMAX (N) !
- : N ( -- n ) (N) @ ; \ fetch value of n.
- 219 CONSTANT COLOR
- VARIABLE HFO 3 HFO !
- VARIABLE RING N ALLOT
- \ TOWERS-2
-
- : DELAY ( n -- )
- 0 DO 17 0 DO 127 127 * DROP LOOP LOOP ;
- : POS ( n n' )
- N 2* 1+ * N + ;
- : HALFD ( char size -- )
- 0 DO DUP EMIT LOOP DROP ;
- : <DISP> ( row char size -- )
- 2DUP HALFD ROT 3 < IF BL ELSE ( ASCII H) 219
- THEN EMIT HALFD ;
- : DISPLAY
- SWAP >R -ROT OVER - R@ AT
- R> -ROT <DISP> ;
-
- \ TOWERS-3
-
- : PRESENCE ( n flag )
- RING + C@ = ;
- : LINE
- 4 SWAP N 0 DO DUP I PRESENCE 1+
- ROT + SWAP LOOP DROP ;
- : RAISE
- DUP POS SWAP LINE 2 SWAP
- DO 2DUP I BL DISPLAY 2DUP I 1- COLOR DISPLAY
- -1 +LOOP 2DROP ;
- : LOWER
- DUP POS SWAP LINE 1+ 2
- DO 2DUP I 1- BL DISPLAY 2DUP I COLOR DISPLAY
- LOOP 2DROP ;
-
- \ TOWERS-4
- : MOVELEFT
- POS SWAP POS 1- DO DUP I 1+ 1 BL DISPLAY
- DUP I 1 COLOR DISPLAY -1 +LOOP DROP ;
-
- : MOVERIGHT
- POS 1+ SWAP POS 1+ DO DUP I 1- 1 BL DISPLAY
- DUP I 1 COLOR DISPLAY LOOP DROP ;
-
- : TRAVERS
- 2DUP > IF MOVELEFT ELSE MOVERIGHT THEN ;
-
- : MOVE1
- KEY? IF 0 16 AT ABORT THEN
- -ROT 2DUP RAISE >R 2DUP R> ROT TRAVERS
- 2DUP RING + 1- C! SWAP LOWER ;
- \ TOWERS-5
- : MULTIMOV RECURSIVE
- 3 PICK 1 = IF DROP MOVE1 ELSE
- >R >R SWAP 1- SWAP R> R> 4DUP SWAP MULTIMOV
- 4DUP DROP ROT 1+ -ROT MOVE1
- -ROT SWAP MULTIMOV THEN ;
- : MAKETOWER
- POS 4 N + 3 DO DUP I AT 219 EMIT LOOP DROP ;
- : MAKEBASE
- 0 N 4 + AT N 6 * 3 + 0 DO 219 EMIT LOOP ;
- : MAKERING
- 2DUP RING + 1- C! SWAP LOWER ;
- : SETUP
- CLS N 1+ 0 DO 1 RING I + C! LOOP 3 0 DO I
- MAKETOWER LOOP MAKEBASE 1 N DO 0 I MAKERING -1 +LOOP ;
-
- \ TOWERS-6
- \ Values of n larger than 7 take a fair amount of time.
- : TOWERS ( n -- )
- 1 MAX NMAX MIN (N) !
- SETUP N 2 0 1 BEGIN
- OVER POS N 4 + AT N 0
- DO BEEP 5 DELAY LOOP
- ROT 4DUP MULTIMOV
- HFO @ 1- DUP HFO ! UNTIL
- 2DROP 2DROP
- 0 0 AT
- N 0 DO BEEP 5 DELAY LOOP ;
-
- : HANOI 7 TOWERS ;