Created
September 22, 2019 10:02
-
-
Save ardwalker/a7c223241c14a6af769541052d4bdd1d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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