This chapter presents the listing of the file matches.wft which is here only
to test some definitions and to present a very simple (host) program.
|
Last update: |
3-January-1999 |
|
State (estimation) |
100% |
/* ===========================================================================
matches,qft Oliver Singla
Description:
This is a test program I use to test wfroth (both the byte string generated and the execution). I put some comments for the forth beginners. =========================================================================== */forget <matches>
: <matches> ;
int #matches
: xemit ( c n --- ) swap begin dup while over emit1-
repeat ddrop ;// Create an initialized integer variable
// Example of creation: 10 iint myVar// Examples of utilization: myVar @// 90 myVar !: iint
build> , does> ;: draw_match ( x f --- ) if dup 6 gotoxy " O " type dup 7 gotoxy " I " type8 gotoxy " I " type
else dup 6 gotoxy " . " type dup 7 gotoxy " | " type8 gotoxy " | " type
endif ;
int col
: draw_matches ( --- ) 20 col ! 0 begin col @ over #matches @ < draw_matchcol 2 +!
1+ dup 21 ==
until drop ;: draw_screen ( --- ) cls31 0 gotoxy 18 42 xemit
31 1 gotoxy " *** 21 MATCHES ***" type
31 2 gotoxy 18 42 xemit
draw_matches ;: [within] ( n1 n2 n3 --- f ) >r over r> <= -rot >= and ;: wait_1-3 ( --- c ) begin key dup 49 51 [within] not
while drop repeat 48 - ;: player_turn
0 11 gotoxy " How many matches do you take (1,2 or 3) ? " type begin wait_1-3 dup #matches @ > while drop repeat dup 48 + emit #matches -! draw_matches ;: seconds ( n --- ) 500 * delay ;: computer_play ( n --- ) 1 #matches @ 3 min rnd ;: computer_turn ( --- ) 0 14 gotoxy " I'm thinking... " type 1 seconds computer_play 0 14 gotoxy " I take " type dup . " match" type dup 1 > if " es" type endif
#matches -! draw_matches ;: init_game ( --- ) 21 #matches ! ;: uppercase ( c1 --- c2 ) dup 97 122 [within] if 32 - endif ;: another_game? ( --- f ) 0 18 gotoxy " Another game (y/n) ? " type begin key uppercase 78 over == over 89 == or not
while drop repeat dup emit 89 == ;: go ( --- ) begin init_game draw_screen 0 begin 1+ player_turn #matches @ if 1+ computer_turn endif #matches @ not until 0 16 gotoxy 2 mod if " Sorry, you loose!" type else " Congratulations!" type endif another_game? not until ;