vd-archiv:listings:4d2006-04-listings
Inhaltsverzeichnis
4d2006-04 Listings
Adventures
Adventures in Forth Teil 2 - Viele kleine Dateien, bitte selbst entpacken.
Gedankenlesen
\ Gedankenlesen
\ Prinzip:
\ Die Zahlen 9, 18, 27, 36, 45, 54, 63, 72, 81
\ bekommen das gleiche Symbol zugeordnet.
\ Alle übrigen erhalten ein Symbol random zugeordnet,
\ es muss nur druckbar sein.
Decimal
\ include random.fs
( gforth-0.6.2 Verzeichnis; Mac OSX Version)
Variable seed
$10450405 Constant generator
: rnd ( -- n )
seed @ generator um* drop 1+ dup seed ! ;
: random ( n -- 0..n-1 )
rnd um* nip ; \ \include
: init ( -- )
5 seed ! 10 0 DO 100 random drop LOOP ;
\ choose a token, but no digit.
: token ( -- x ) 126 58 - random 58 + ;
\ test number of tokens
: tt ( -- ) $FF 0 DO I emit I . LOOP ;
variable symbol
: symbol! ( -- ) token symbol ! ;
: sy. ( -- ) symbol @ emit ;
: symbol. ( I -- )
DUP 09 = IF sy. drop exit THEN
DUP 18 = IF sy. drop exit THEN
DUP 27 = IF sy. drop exit THEN
DUP 36 = IF sy. drop exit THEN
DUP 45 = IF sy. drop exit THEN
DUP 54 = IF sy. drop exit THEN
DUP 63 = IF sy. drop exit THEN
DUP 72 = IF sy. drop exit THEN
DUP 81 = IF sy. drop exit THEN
token emit drop ;
: tabelle. ( -- )
cr 100 0 DO
I 2 .r space
I symbol. 2 spaces
I 1+ 10 /mod drop 0= IF cr THEN
LOOP ;
\ : page ( -- ) <your own code> ; \ gforth has this comand
\ page clears the display.
: text.de ( -- )
cr ." Gedankenlesen in Forth"
cr
cr ." Denke an eine zweistellige Zahl, z.B. die 54."
cr ." Ziehe von dieser Zahl ihre 2 Ziffern ab "
." (54-5-4=45)"
cr ." Suche das Symbol, das zu diesem Ergebnis passt."
cr ." Konzentriere dich auf dieses Symbol "
." und druecke eine Taste..." ;
: ?again.de ( -- f )
cr ." Noch mal? --> Leertaste! " key $20 = ;
: text.en ( --)
cr ." MindReader in Forth"
cr
cr ." Think of a number with 2 digits (ex: 54)"
cr ." Subtract from this number its 2 digits "
." (54-5-4=45)"
cr ." Find the symbol that corresponds "
." to this number"
cr ." Concentrate on the symbol "
." and press a key..." ;
: ?again.en ( -- f )
cr ." Again? --> press space bar! " key $20 = ;
\ german version
: Gedankenlesen ( -- )
init
BEGIN symbol!
page text.de cr Tabelle. key drop
cr ." Es ist: " sy. cr
?again.de 0= UNTIL ;
\ english version
: MindReader ( -- )
init
BEGIN symbol!
page text.en cr Tabelle. key drop
cr ." It is: " sy. cr
?again.en 0= UNTIL ;
\ Des Rätsels Lösung
: ?? ( -- )
100 10 DO cr
i .
i i 10 /mod + - .
LOOP ;
\ fin
vd-archiv/listings/4d2006-04-listings.txt · Zuletzt geändert: 2017-05-21 18:27 von mka