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.