Skip to content

Instantly share code, notes, and snippets.

@ardwalker
Created September 22, 2019 10:02
Show Gist options
  • Save ardwalker/a7c223241c14a6af769541052d4bdd1d to your computer and use it in GitHub Desktop.
Save ardwalker/a7c223241c14a6af769541052d4bdd1d to your computer and use it in GitHub Desktop.
import System.Random
import Data.Char
import Text.Printf
import Debug.Trace
-- <number-to-guess> <display-string> <character-guessed>
-- Returns: (Guessed correctly T/F , display-string)
check :: Int -> String -> Char -> (Bool,String)
check number display c =
(ord(c) == number, [c])
-- n is number of remaining turns word is the word to guess
turn :: Int -> String -> Int -> IO ()
turn number display n =
do
if n==0 -- No remaining guesses
then putStrLn "You lose"
else if number == (read display :: Int) -- number is correctly guessed
then putStrLn "You win!"
else mkguess number display n -- Make a guess
-- Make a guess
-- <word> <word-count dashes> <number of guesses>
mkguess :: Int -> String -> Int -> IO ()
mkguess number display n =
do
putStrLn (display ++ " " ++ take n (repeat '*')) -- Stars mean # of guesses
putStr " Enter your guess: "
q <- getLine -- Get character guessed
let (correct, display') = check number display (q!!0)
let n' = if correct then n else n-1 -- Reduce # guesses if incorrect
turn number display' n'
randomNumberRange :: [Int]
randomNumberRange = [1..10]
randomNumber :: IO Int
randomNumber = do
let numbers = randomNumberRange
index <- randomRIO (0, length numbers -1)
return (numbers !! index)
numberGame :: Int -> IO ()
numberGame numberGuesses =
do
number <- randomNumber
turn number "-1" numberGuesses
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment