diff options
| author | Camil Staps | 2015-04-19 13:58:23 +0200 | 
|---|---|---|
| committer | Camil Staps | 2015-04-19 13:58:23 +0200 | 
| commit | c4c6947589f778dfb9a2af79ee8fe72dd8f11733 (patch) | |
| tree | 77ab1decd344a2350d7a3993e85358be6168b20b /fp2/week1/camil | |
| parent | Working Hangman, but: NO max guess; NO ASCII gallow (diff) | |
Added mistakes left counter; now all that is left to do is an ASCII art gallow
Diffstat (limited to 'fp2/week1/camil')
| -rw-r--r-- | fp2/week1/camil/Galgje.icl | 21 | 
1 files changed, 14 insertions, 7 deletions
| diff --git a/fp2/week1/camil/Galgje.icl b/fp2/week1/camil/Galgje.icl index d800469..f8dd8f3 100644 --- a/fp2/week1/camil/Galgje.icl +++ b/fp2/week1/camil/Galgje.icl @@ -4,6 +4,11 @@ import StdEnv, SimpleFileIO, RandomGetallen  lexicon_file = "lexicon.txt"
 +// Is a Char a member of a String
 +isMemberString :: String Char -> Bool
 +isMemberString "" c = False
 +isMemberString s c = s.[0] == c || isMemberString (s % (1,size s - 1)) c
 +
  // From the slides
  skip_nl :: String -> String
  skip_nl str = if (size str > 0 && str.[size str-1] == '\n') (str%(0,size str-2)) str
 @@ -20,16 +25,18 @@ randomWord env  # (seed,env) = getNewRandomSeed env
  | otherwise = (Just (skip_nl ((shuffle (fromJust ss) seed)!!0)), env)
 -// word, guesses, stdio -> (win, new guesses, stdio)
 -round :: String [Char] *File -> (Bool, [Char], *File)
 -round w g io
 +// word, guesses, mistakes left, stdio -> (win, new guesses, stdio)
 +play :: String [Char] Int *File -> (Bool, [Char], *File)
 +play w g n io
  # io = io <<< stripUnknown w g <<< '\n'
  | stripUnknown w g == w = (True, g, io)
 -# io = io <<< "Guess: "
 +# io = io <<< "Guess (" <<< toString n <<< "): "
  # (ok,g`,io) = freadc io
  # (_,io) = freadline io // to read until the next \n
  | not ok = abort "Couldn't get guessed letter"
 -| otherwise = round w [g`:g] io
 +| isMemberString w g` = play w [g`:g] n io
 +| n == 0 = (False, [g`:g], io)
 +| otherwise = play w [g`:g] (n-1) io
  Start :: *World -> *World
  Start world
 @@ -37,8 +44,8 @@ Start world  | word == Nothing = abort "Couldn't get random word"
  # word = fromJust word
  # (io,world) = stdio world
 -# (win,g,io) = round word [] io
 -# io = if win (io <<< "You win!\n") io
 +# (win,g,io) = play word [] 5 io
 +# io = if win (io <<< "You win!\n") (io <<< "You lose!\n")
  # (ok,world) = fclose io world
  | not ok = abort "Couldn't close stdio"
  | otherwise = world
 | 
