206b
<< <> >>
VIJG
EBLA
D*FO
RTH
: .BORD ( -- )
  0 5 AT-XY
  0 BORD
  4 0 DO   CR CR 33 SPACES
           4 0 DO   COUNT EMIT 3 SPACES
               LOOP
      LOOP DROP 7 SPACES ;

\ De speler kiest de te schuiven letter.
\ Daarom moeten alle tekens verschillend zijn.
0 VALUE TOETS
: >CODE ( ch -- c ) DUP 32 AND - ; \ Upper?  ( **)
: SPELER ( -- ) key >code to toets ;

\ Pos = positie t.o.v. HIER. Let op de bordrand.
: WEST?  ( -- pos ) HIER    3 AND 0<>   -1 AND ;      ( **)
: OOST?  ( -- pos ) HIER 1+ 3 AND 0<>    1 AND ;      ( **)
: NOORD? ( -- pos ) HIER    3 > -4 AND ;              ( **)
: ZUID?  ( -- pos ) HIER   12 <  4 AND ;              ( **)

: LETTER? ( pos -- pos ) \ De goede letter?
  DUP HIER + BORD C@ >CODE
  TOETS = AND ;                                       ( **)

: DAAR ( -- nr ) \ Positie vd te schuiven letter
  NOORD? LETTER?
  WEST?  LETTER? OR
  OOST?  LETTER? OR
  ZUID?  LETTER? OR HIER + ;
: SCHUIF ( nr -- )
  DUP BORD HIER BORD
  OVER C@ OVER C@
  -ROT
  SWAP C! SWAP C!
  TO HIER ;

: SPEEL ( -- )
  PAGE EINDSTAND .BORD 1997 MS
  32 0
  DO   RANDOM 15 AND SCHUIF .BORD
  LOOP
  BEGIN SPELER DAAR SCHUIF .BORD
        TOETS 27 =   \ [Escape]?
  UNTIL ;

einde
 >>