\ Tegels, leuke cijfers: 15 22 38 44 48 53 75 82 83 

hex v: fresh
0 value RND  23 to rnd              \ any number allowed as seed
: CHOOSE    ( u1 -- u2 )            \ u2 = 0 to u1-1
    rnd dm 31421 * dm 6927 +  dup to rnd  FFFF and  * 10 rshift ;


need bitarray
need count*
100 bitarray TEGEL
: RIJ?      ( t -- f )      \ Een van de pixels in een rijtje bezet?
    FF and  dup tegel get* >r               \ t      b0     \ Tegel gebruikt
    dup 0F and >r                           \ t      b0 r   \
    r@ 0= 10 and over +  1-  tegel get*     \ t b1   b0 r
    swap r> 0F = -10 and +  1+  tegel get*  \ b1 b2  b0
    r> or or ;                              \ b3

: BEZET?    ( t -- b )      \ 'b' is 0 als de tegel omgeving vrij is
    dup rij?                \ Tegel rij bezet
    over 10 - rij? or       \ Tegels erboven bezet
    swap 10 +  rij? or ;    \ Tegels eronder bezet

10 value KLEUR  ( Maximaal 64 tot nu toe bij 321 als input )
v: inside
: P         ( +n -- )
    to rnd                          \ Als de Brody generator gebruikt wordt
    tegel *zero                     \ Tegel begint blauw
    kleur 0 ?do                     \ Aantal anders kleurde tegeltjes
        100 choose                  \ Kies positie
        begin  dup bezet? while     \ Is positie bezet?
            drop  100 choose        \ Kies nieuwe positie
            key? if drop leave then \ Noodknop
        repeat
        tegel *set                  \ Zet anders gekleurd tegeltje
    loop ;

\ 44 = donker blauw, 46 = donker cyaan, 47 = grijs, 104 = paars blauw
\ 106 = cyaan, 107 = helder wit, 0 = standaard kleur
: COLOR     ( +n -- )
    hor >r  dm 27 emit  ch [ emit   \ CSI
    base @ hex  swap  0 .r  base !  \ ASCII waarden van SGR parameters
    ch m emit  r> to hor ;          \ Sluit & corrigeer HOR

1 value NAAST       \ Tegels naast elkaar
1 value ONDER       \ Tegels onder elkaar
106 value BASIS     \ Basis kleur tegels
107 value PUNT      \ Patroon tegels
000 value VOEG      \ Kleur voeg ook
: LB    106 to basis ;  : DB    44 to basis ;
: MB    46 to basis ;   : GR    42 to basis ;
: GRIJS 47 to basis ;   : ANTRA 100 to basis ;  : VG 47 to voeg ;
: .VOEG     ( -- )  naast voeg color  22 * 2 + spaces  0 color ;
: .T        ( -- )  \ Toon tegel wandje met voegen
    onder                           \ Aantal tegels onder elkaar
    begin
        cr .voeg
        100 0 do                    \ Een tegel
            cr  voeg color 2 spaces \ Nieuwe rij
            naast
            begin
                i 10 + i do         \ Een rij bestaat uit 16 tegels
                    i tegel get*    \ Lees kleur, en druk tegeltje
                    if punt else basis then
                    color  space space
                loop
                voeg color 2 spaces \ Tegels los van elkaar
                0 color
            1- ?dup 0= until        \ Rij gedaan?
        10 +loop                    \ Volgende rij
    1- ?dup 0= until                \ Rij tegels er onder?
    cr .voeg  0 color ;

: .P        ( hor ver -- )  to onder to naast  .t ;
: PP        ( +n -- )       p  ." Done " tegel count* .  .t  cr ;
: PROBEER   ( -- )          begin  hx FFFF choose  dup u.  pp  1800 ms  key? until ;

decimal v: fresh

\ End ;;;
