Not logged in

Artifact be79e7b8a30d3aea2548a7afc7c675df165d69da:

File hangman/hangman.retro part of check-in [9f5aa980c6] - update hangman; now works with retro 11 (this is a direct port, needs cleanup) by marc on 2011-01-19 17:15:33. [annotate]


0000: 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ( ~~~~~~~~~~~~~~
0010: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
0020: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
0030: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 20 29  ~~~~~~~~~~~~~~ )
0040: 0a 28 20 48 61 6e 67 6d 61 6e 20 66 6f 72 20 52  .( Hangman for R
0050: 65 74 72 6f 20 43 6f 6e 73 6f 6c 65 20 20 20 20  etro Console    
0060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0080: 29 0a 28 20 20 2a 20 4d 61 69 6e 20 67 61 6d 65  ).(  * Main game
0090: 20 6c 6f 67 69 63 2e 20 20 20 20 20 20 20 20 20   logic.         
00a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00c0: 20 29 0a 28 20 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e   ).( ~~~~~~~~~~~
00d0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
00e0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
00f0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
0100: 7e 20 29 0a 28 20 43 6f 70 79 72 69 67 68 74 20  ~ ).( Copyright 
0110: 5b 63 5d 20 32 30 31 30 2d 31 31 2c 20 4d 61 72  [c] 2010-11, Mar
0120: 63 20 53 69 6d 70 73 6f 6e 20 20 20 20 20 20 20  c Simpson       
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 20 20 29 0a 28 20 4c 69 63 65 6e 73 65 3a 20     ).( License: 
0150: 49 53 43 20 20 20 20 20 20 20 20 20 20 20 20 20  ISC             
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0180: 20 20 20 20 29 0a 28 20 7e 7e 7e 7e 7e 7e 7e 7e      ).( ~~~~~~~~
0190: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
01a0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
01b0: 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e  ~~~~~~~~~~~~~~~~
01c0: 7e 7e 7e 7e 20 29 0a 0a 28 20 46 69 6c 65 20 69  ~~~~ )..( File i
01d0: 6e 63 6c 75 73 69 6f 6e 20 77 69 6c 6c 20 6f 6e  nclusion will on
01e0: 6c 79 20 77 6f 72 6b 20 69 66 20 79 6f 75 27 72  ly work if you'r
01f0: 65 20 72 75 6e 6e 69 6e 67 20 72 65 74 72 6f 20  e running retro 
0200: 66 72 6f 6d 20 20 20 29 0a 28 20 74 68 65 20 73  from   ).( the s
0210: 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73  ame directory as
0220: 20 68 61 6e 67 6d 61 6e 2e 20 20 20 20 20 20 20   hangman.       
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0240: 20 20 20 20 20 20 20 20 29 0a 0a 69 6e 63 6c 75          )..inclu
0250: 64 65 20 67 72 61 70 68 69 63 73 2e 72 65 74 72  de graphics.retr
0260: 6f 0a 69 6e 63 6c 75 64 65 20 64 69 63 74 2e 72  o.include dict.r
0270: 65 74 72 6f 0a 0a 28 20 2d 2d 5b 20 4d 61 63 72  etro..( --[ Macr
0280: 6f 73 20 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  os ]------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02b0: 2d 2d 2d 2d 20 29 0a 0a 3a 20 32 70 75 73 68 20  ---- )..: 2push 
02c0: 60 20 70 75 73 68 20 60 20 70 75 73 68 20 3b 20  ` push ` push ; 
02d0: 63 6f 6d 70 69 6c 65 2d 6f 6e 6c 79 0a 3a 20 32  compile-only.: 2
02e0: 70 6f 70 20 20 60 20 70 6f 70 20 60 20 70 6f 70  pop  ` pop ` pop
02f0: 20 3b 20 63 6f 6d 70 69 6c 65 2d 6f 6e 6c 79 0a   ; compile-only.
0300: 0a 28 20 2d 2d 5b 20 56 61 72 69 61 62 6c 65 73  .( --[ Variables
0310: 20 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ]--------------
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
0340: 29 0a 0a 35 20 65 6c 65 6d 65 6e 74 73 20 74 61  )..5 elements ta
0350: 72 67 65 74 20 67 75 65 73 73 65 64 20 20 6c 69  rget guessed  li
0360: 66 65 6c 69 6e 65 20 74 68 69 73 2d 63 68 61 72  feline this-char
0370: 20 66 6f 75 6c 2d 63 6f 75 6e 74 0a 73 74 61 67   foul-count.stag
0380: 65 73 20 20 20 63 6f 6e 73 74 61 6e 74 20 6c 69  es   constant li
0390: 76 65 73 20 20 20 20 20 20 20 20 20 20 20 20 20  ves             
03a0: 20 20 20 20 20 20 28 20 73 65 65 20 67 72 61 70        ( see grap
03b0: 68 69 63 73 2e 72 65 74 72 6f 20 29 0a 68 65 72  hics.retro ).her
03c0: 65 20 6c 69 76 65 73 20 61 6c 6c 6f 74 20 63 6f  e lives allot co
03d0: 6e 73 74 61 6e 74 20 66 6f 75 6c 2d 61 64 64 72  nstant foul-addr
03e0: 0a 0a 28 20 2d 2d 5b 20 4f 66 66 73 65 74 20 43  ..( --[ Offset C
03f0: 61 6c 63 75 6c 61 74 69 6f 6e 20 5d 2d 2d 2d 2d  alculation ]----
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0420: 20 29 0a 0a 28 20 42 75 69 6c 64 20 61 6e 20 61   )..( Build an a
0430: 72 72 61 79 20 77 69 74 68 20 6f 66 66 73 65 74  rray with offset
0440: 73 20 66 6f 72 20 61 20 67 69 76 65 6e 20 63 68  s for a given ch
0450: 61 72 61 63 74 65 72 20 69 6e 20 73 74 72 69 6e  aracter in strin
0460: 67 20 29 0a 0a 3a 20 6f 66 66 73 65 74 73 2c 20  g )..: offsets, 
0470: 28 20 63 24 2d 20 29 0a 20 20 77 69 74 68 4c 65  ( c$- ).  withLe
0480: 6e 67 74 68 20 5b 20 5b 20 32 64 75 70 20 40 20  ngth [ [ 2dup @ 
0490: 3d 20 5d 20 64 69 70 20 73 77 61 70 20 26 2c 20  = ] dip swap &, 
04a0: 26 64 72 6f 70 20 69 66 20 31 2b 20 5d 20 69 74  &drop if 1+ ] it
04b0: 65 72 0a 20 20 32 64 72 6f 70 20 3b 0a 0a 3a 20  er.  2drop ;..: 
04c0: 6f 66 66 73 65 74 73 20 28 20 24 63 2d 61 6e 20  offsets ( $c-an 
04d0: 29 20 68 65 72 65 20 2d 72 6f 74 20 20 73 77 61  ) here -rot  swa
04e0: 70 20 6f 66 66 73 65 74 73 2c 20 20 20 68 65 72  p offsets,   her
04f0: 65 20 6f 76 65 72 20 2d 20 3b 0a 0a 28 20 2d 2d  e over - ;..( --
0500: 5b 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 5d 2d 2d  [ Allocation ]--
0510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a 0a 3a 20  ---------- )..: 
0540: 75 6e 61 6c 6c 6f 74 20 20 28 20 20 6e 2d 20 29  unallot  (  n- )
0550: 20 20 6e 65 67 20 61 6c 6c 6f 74 20 3b 0a 3a 20    neg allot ;.: 
0560: 75 6e 61 72 72 61 79 20 20 28 20 61 6e 2d 20 29  unarray  ( an- )
0570: 20 20 6e 69 70 20 75 6e 61 6c 6c 6f 74 20 3b 0a    nip unallot ;.
0580: 0a 28 20 2d 2d 5b 20 4d 61 73 6b 69 6e 67 20 5d  .( --[ Masking ]
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20  --------------- 
05c0: 29 0a 0a 28 20 54 68 65 20 61 72 72 61 79 20 63  )..( The array c
05d0: 6f 6e 74 61 69 6e 73 20 6f 66 66 73 65 74 20 69  ontains offset i
05e0: 6e 66 6f 72 6d 61 74 69 6f 6e 3b 20 73 65 74 20  nformation; set 
05f0: 74 68 65 20 67 75 65 73 73 20 73 74 72 69 6e 67  the guess string
0600: 20 29 0a 0a 3a 20 75 70 64 61 74 65 2d 67 75 65   )..: update-gue
0610: 73 73 65 64 20 28 20 24 20 6f 66 66 73 65 74 73  ssed ( $ offsets
0620: 20 6c 65 6e 20 2d 20 29 0a 20 20 5b 20 32 64 75   len - ).  [ 2du
0630: 70 20 40 20 2b 20 40 74 68 69 73 2d 63 68 61 72  p @ + @this-char
0640: 20 73 77 61 70 20 21 20 31 2b 20 5d 20 74 69 6d   swap ! 1+ ] tim
0650: 65 73 20 32 64 72 6f 70 20 3b 0a 0a 3a 20 74 6f  es 2drop ;..: to
0660: 47 75 65 73 73 20 28 20 67 75 65 73 73 65 64 20  Guess ( guessed 
0670: 74 61 72 67 65 74 20 63 20 2d 20 29 0a 20 20 64  target c - ).  d
0680: 75 70 20 74 68 69 73 2d 63 68 61 72 20 21 20 20  up this-char !  
0690: 6f 66 66 73 65 74 73 20 20 20 20 20 20 20 20 20  offsets         
06a0: 20 20 20 28 20 67 75 65 73 73 65 64 20 6f 66 66     ( guessed off
06b0: 73 65 74 73 20 6c 65 6e 67 74 68 20 29 0a 20 20  sets length ).  
06c0: 32 64 75 70 20 32 70 75 73 68 20 20 75 70 64 61  2dup 2push  upda
06d0: 74 65 2d 67 75 65 73 73 65 64 20 20 32 70 6f 70  te-guessed  2pop
06e0: 20 75 6e 61 72 72 61 79 20 3b 0a 0a 3a 20 67 75   unarray ;..: gu
06f0: 65 73 73 43 68 61 72 20 28 20 63 2d 20 29 20 20  essChar ( c- )  
0700: 40 67 75 65 73 73 65 64 20 40 74 61 72 67 65 74  @guessed @target
0710: 20 72 6f 74 20 74 6f 47 75 65 73 73 20 3b 0a 0a   rot toGuess ;..
0720: 28 20 2d 2d 5b 20 50 72 69 6e 74 69 6e 67 20 5d  ( --[ Printing ]
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 29  -------------- )
0760: 0a 0a 3a 20 2e 74 61 72 67 65 74 20 20 20 28 20  ..: .target   ( 
0770: 2d 20 29 20 20 40 74 61 72 67 65 74 20 20 70 75  - )  @target  pu
0780: 74 73 20 3b 0a 3a 20 2e 67 75 65 73 73 65 64 20  ts ;.: .guessed 
0790: 20 28 20 2d 20 29 20 20 40 67 75 65 73 73 65 64   ( - )  @guessed
07a0: 20 70 75 74 73 20 3b 0a 3a 20 2e 69 6e 70 75 74   puts ;.: .input
07b0: 20 20 20 20 28 20 2d 20 29 20 20 40 6c 69 66 65      ( - )  @life
07c0: 6c 69 6e 65 20 22 54 72 69 65 73 3a 20 28 25 64  line "Tries: (%d
07d0: 29 3a 20 22 20 70 75 74 73 20 3b 0a 3a 20 2e 66  ): " puts ;.: .f
07e0: 6f 75 6c 73 20 20 20 20 28 20 2d 20 29 20 20 22  ouls    ( - )  "
07f0: 46 6f 75 6c 73 3a 20 22 20 70 75 74 73 20 66 6f  Fouls: " puts fo
0800: 75 6c 2d 61 64 64 72 20 70 75 74 73 20 3b 0a 3a  ul-addr puts ;.:
0810: 20 2e 70 72 6f 6d 70 74 20 20 20 28 20 2d 20 29   .prompt   ( - )
0820: 20 20 30 20 30 20 5e 63 6f 6e 73 6f 6c 65 27 61    0 0 ^console'a
0830: 74 2d 78 79 20 2e 67 75 65 73 73 65 64 20 63 72  t-xy .guessed cr
0840: 20 2e 66 6f 75 6c 73 20 63 72 20 2e 69 6e 70 75   .fouls cr .inpu
0850: 74 20 3b 0a 3a 20 2e 61 6c 72 65 61 64 79 20 20  t ;.: .already  
0860: 28 20 2d 20 29 20 20 73 70 61 63 65 20 22 5b 61  ( - )  space "[a
0870: 6c 72 65 61 64 79 20 67 75 65 73 73 65 64 5d 22  lready guessed]"
0880: 20 70 75 74 73 20 3b 0a 3a 20 2e 63 6f 72 72 65   puts ;.: .corre
0890: 63 74 20 20 28 20 2d 20 29 20 20 73 70 61 63 65  ct  ( - )  space
08a0: 20 22 5b 63 6f 72 72 65 63 74 20 67 75 65 73 73   "[correct guess
08b0: 5d 20 20 22 20 70 75 74 73 20 3b 0a 3a 20 2e 67  ]  " puts ;.: .g
08c0: 72 61 70 68 69 63 20 20 28 20 2d 20 29 20 20 6c  raphic  ( - )  l
08d0: 69 76 65 73 20 6c 69 66 65 6c 69 6e 65 20 40 20  ives lifeline @ 
08e0: 2d 20 31 2d 20 67 72 61 70 68 69 63 73 20 2b 20  - 1- graphics + 
08f0: 40 20 64 6f 20 3b 0a 3a 20 2e 77 72 6f 6e 67 20  @ do ;.: .wrong 
0900: 20 20 20 28 20 2d 20 29 20 20 73 70 61 63 65 20     ( - )  space 
0910: 22 5b 6e 6f 74 20 70 72 65 73 65 6e 74 5d 20 20  "[not present]  
0920: 20 20 22 20 70 75 74 73 20 2e 67 72 61 70 68 69    " puts .graphi
0930: 63 20 3b 0a 0a 28 20 2d 2d 5b 20 47 75 65 73 73  c ;..( --[ Guess
0940: 69 6e 67 20 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ing ]-----------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0970: 2d 2d 2d 20 29 0a 0a 3a 20 30 3c 3e 20 20 20 28  --- )..: 0<>   (
0980: 20 20 78 2d 66 20 29 20 30 20 3d 20 6e 6f 74 20    x-f ) 0 = not 
0990: 3b 0a 3a 20 68 61 73 20 20 20 28 20 24 63 2d 66  ;.: has   ( $c-f
09a0: 20 29 20 5e 73 74 72 69 6e 67 73 27 66 69 6e 64   ) ^strings'find
09b0: 43 68 61 72 20 30 3c 3e 20 3b 0a 0a 3a 20 66 6f  Char 0<> ;..: fo
09c0: 75 6c 2b 20 28 20 20 63 2d 20 20 29 20 66 6f 75  ul+ (  c-  ) fou
09d0: 6c 2d 61 64 64 72 20 66 6f 75 6c 2d 63 6f 75 6e  l-addr foul-coun
09e0: 74 20 40 20 2b 20 21 20 31 20 66 6f 75 6c 2d 63  t @ + ! 1 foul-c
09f0: 6f 75 6e 74 20 2b 21 20 3b 0a 0a 3a 20 28 67 75  ount +! ;..: (gu
0a00: 65 73 73 29 20 28 20 63 2d 20 29 0a 20 20 40 67  ess) ( c- ).  @g
0a10: 75 65 73 73 65 64 20 6f 76 65 72 20 68 61 73 20  uessed over has 
0a20: 0a 20 20 20 20 5b 20 2e 61 6c 72 65 61 64 79 20  .    [ .already 
0a30: 5d 20 0a 20 20 20 20 5b 20 40 74 61 72 67 65 74  ] .    [ @target
0a40: 20 6f 76 65 72 20 68 61 73 0a 20 20 20 20 20 20   over has.      
0a50: 5b 20 64 75 70 20 67 75 65 73 73 43 68 61 72 20  [ dup guessChar 
0a60: 2e 63 6f 72 72 65 63 74 20 5d 20 0a 20 20 20 20  .correct ] .    
0a70: 20 20 5b 20 66 6f 75 6c 2d 61 64 64 72 20 6f 76    [ foul-addr ov
0a80: 65 72 20 68 61 73 0a 20 20 20 20 20 20 20 20 5b  er has.        [
0a90: 20 2e 61 6c 72 65 61 64 79 20 5d 20 0a 20 20 20   .already ] .   
0aa0: 20 20 20 20 20 5b 20 64 75 70 20 66 6f 75 6c 2b       [ dup foul+
0ab0: 20 6c 69 66 65 6c 69 6e 65 20 2d 2d 20 2e 77 72   lifeline -- .wr
0ac0: 6f 6e 67 20 5d 20 69 66 20 5d 20 69 66 20 5d 20  ong ] if ] if ] 
0ad0: 69 66 20 64 72 6f 70 20 3b 0a 0a 3a 20 67 75 65  if drop ;..: gue
0ae0: 73 73 20 28 20 2d 20 29 20 2e 70 72 6f 6d 70 74  ss ( - ) .prompt
0af0: 20 67 65 74 63 20 64 75 70 20 70 75 74 63 20 28   getc dup putc (
0b00: 67 75 65 73 73 29 20 3b 0a 0a 28 20 2d 2d 5b 20  guess) ;..( --[ 
0b10: 47 61 6d 65 20 4c 6f 67 69 63 20 5d 2d 2d 2d 2d  Game Logic ]----
0b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 20 29 0a 0a 3a 20 5f 73  -------- )..: _s
0b50: 74 72 69 6e 67 20 20 28 20 6e 2d 24 20 29 20 20  tring  ( n-$ )  
0b60: 68 65 72 65 20 73 77 61 70 20 5b 20 27 5f 20 2c  here swap [ '_ ,
0b70: 20 5d 20 74 69 6d 65 73 20 30 20 2c 20 3b 0a 0a   ] times 0 , ;..
0b80: 3a 20 3e 74 61 72 67 65 74 20 20 28 20 24 2d 20  : >target  ( $- 
0b90: 20 29 0a 20 20 77 69 74 68 4c 65 6e 67 74 68 20   ).  withLength 
0ba0: 73 77 61 70 20 74 61 72 67 65 74 20 21 20 5f 73  swap target ! _s
0bb0: 74 72 69 6e 67 20 67 75 65 73 73 65 64 20 21 20  tring guessed ! 
0bc0: 3b 0a 0a 3a 20 30 66 6f 75 6c 73 20 20 20 20 28  ;..: 0fouls    (
0bd0: 20 2d 20 20 29 20 20 30 20 66 6f 75 6c 2d 63 6f   -  )  0 foul-co
0be0: 75 6e 74 20 21 0a 20 20 20 20 20 20 20 20 20 20  unt !.          
0bf0: 20 20 20 20 20 20 20 20 20 20 66 6f 75 6c 2d 61            foul-a
0c00: 64 64 72 20 6c 69 76 65 73 20 5b 20 30 20 6f 76  ddr lives [ 0 ov
0c10: 65 72 20 21 20 31 2b 20 5d 20 74 69 6d 65 73 20  er ! 1+ ] times 
0c20: 64 72 6f 70 20 3b 0a 0a 3a 20 72 65 76 69 76 65  drop ;..: revive
0c30: 20 20 20 20 28 20 2d 20 20 29 20 20 6c 69 76 65      ( -  )  live
0c40: 73 20 6c 69 66 65 6c 69 6e 65 20 21 20 30 66 6f  s lifeline ! 0fo
0c50: 75 6c 73 20 3b 0a 3a 20 72 65 6d 61 69 6e 69 6e  uls ;.: remainin
0c60: 67 20 28 20 2d 66 20 29 20 20 67 75 65 73 73 65  g ( -f )  guesse
0c70: 64 20 40 20 27 5f 20 68 61 73 20 3b 0a 3a 20 61  d @ '_ has ;.: a
0c80: 6c 69 76 65 20 20 20 20 20 28 20 2d 66 20 29 20  live     ( -f ) 
0c90: 20 72 65 6d 61 69 6e 69 6e 67 20 6c 69 66 65 6c   remaining lifel
0ca0: 69 6e 65 20 40 20 30 3c 3e 20 61 6e 64 20 3b 0a  ine @ 0<> and ;.
0cb0: 3a 20 64 65 61 64 20 20 20 20 20 20 28 20 2d 66  : dead      ( -f
0cc0: 20 29 20 20 61 6c 69 76 65 20 6e 6f 74 20 3b 0a   )  alive not ;.
0cd0: 3a 20 66 6f 6f 74 20 20 20 20 20 20 28 20 20 2d  : foot      (  -
0ce0: 20 29 20 20 30 20 32 30 20 5e 63 6f 6e 73 6f 6c   )  0 20 ^consol
0cf0: 65 27 61 74 2d 78 79 20 3b 0a 3a 20 2e 6c 6f 73  e'at-xy ;.: .los
0d00: 65 20 20 20 20 20 28 20 20 2d 20 29 20 20 66 6f  e     (  - )  fo
0d10: 6f 74 20 22 59 6f 75 20 4c 4f 53 45 3b 20 74 68  ot "You LOSE; th
0d20: 65 20 77 6f 72 64 20 77 61 73 3a 20 22 20 70 75  e word was: " pu
0d30: 74 73 20 2e 74 61 72 67 65 74 20 3b 0a 3a 20 2e  ts .target ;.: .
0d40: 77 69 6e 20 20 20 20 20 20 28 20 20 2d 20 29 20  win      (  - ) 
0d50: 20 66 6f 6f 74 20 2e 74 61 72 67 65 74 20 63 72   foot .target cr
0d60: 20 22 59 6f 75 20 57 49 4e 21 22 20 70 75 74 73   "You WIN!" puts
0d70: 20 3b 0a 3a 20 65 6e 64 67 61 6d 65 20 20 20 28   ;.: endgame   (
0d80: 20 20 2d 20 29 20 20 40 6c 69 66 65 6c 69 6e 65    - )  @lifeline
0d90: 20 26 2e 77 69 6e 20 26 2e 6c 6f 73 65 20 69 66   &.win &.lose if
0da0: 20 3b 0a 0a 3a 20 28 68 61 6e 67 6d 61 6e 29 20   ;..: (hangman) 
0db0: 28 20 20 2d 20 29 20 20 63 6c 65 61 72 20 72 65  (  - )  clear re
0dc0: 70 65 61 74 20 64 65 61 64 20 69 66 3b 20 67 75  peat dead if; gu
0dd0: 65 73 73 20 61 67 61 69 6e 20 3b 0a 3a 20 68 61  ess again ;.: ha
0de0: 6e 67 6d 61 6e 20 20 20 28 20 24 2d 20 29 20 20  ngman   ( $- )  
0df0: 3e 74 61 72 67 65 74 20 72 65 76 69 76 65 20 28  >target revive (
0e00: 68 61 6e 67 6d 61 6e 29 20 65 6e 64 67 61 6d 65  hangman) endgame
0e10: 20 3b 0a 0a 28 20 2d 2d 5b 20 4d 61 69 6e 20 47   ;..( --[ Main G
0e20: 61 6d 65 20 5d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ame ]-----------
0e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0e50: 2d 2d 20 29 0a 0a 3a 20 79 2d 6f 72 2d 6e 20 20  -- )..: y-or-n  
0e60: 20 20 28 20 2d 66 20 29 20 20 67 65 74 63 20 5b    ( -f )  getc [
0e70: 20 27 79 20 3d 20 5d 20 5b 20 27 59 20 3d 20 5d   'y = ] [ 'Y = ]
0e80: 20 62 69 20 6f 72 20 3b 0a 3a 20 2e 61 67 61 69   bi or ;.: .agai
0e90: 6e 3f 20 20 20 28 20 2d 66 20 29 20 20 63 72 20  n?   ( -f )  cr 
0ea0: 63 72 20 22 50 6c 61 79 20 61 67 61 69 6e 3f 20  cr "Play again? 
0eb0: 5b 59 2f 4e 5d 20 22 20 70 75 74 73 20 79 2d 6f  [Y/N] " puts y-o
0ec0: 72 2d 6e 20 3b 0a 3a 20 70 6c 61 79 20 20 20 20  r-n ;.: play    
0ed0: 20 20 28 20 2d 20 20 29 0a 20 20 69 6e 69 74 69    ( -  ).  initi
0ee0: 61 6c 69 73 65 20 64 69 63 74 20 40 20 30 3b 20  alise dict @ 0; 
0ef0: 64 72 6f 70 0a 20 20 72 65 70 65 61 74 20 67 65  drop.  repeat ge
0f00: 74 2d 77 6f 72 64 20 68 61 6e 67 6d 61 6e 20 2e  t-word hangman .
0f10: 61 67 61 69 6e 3f 20 5b 20 63 6c 6f 73 65 2d 64  again? [ close-d
0f20: 69 63 74 20 62 79 65 20 5d 20 69 66 46 61 6c 73  ict bye ] ifFals
0f30: 65 20 61 67 61 69 6e 20 3b 0a 28 20 3d 3d 3d 3d  e again ;.( ====
0f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f70: 3d 3d 3d 3d 3d 3d 3d 3d 20 29 0a 70 6c 61 79 0a  ======== ).play.