我試圖爲用戶玩的每一個擲骰吐出隨機生成的骰子。用戶每回合3次擲骰,他可以玩5回合(我還沒有實現這個部分,我會很感激建議)。哈斯克爾的骰子游戲
我也想知道如何隨機顯示顏色。我有元組列表,但我認爲我需要一些使用隨機函數和該列表來匹配這些顏色的函數。我正在努力如何。
module Main where
import System.IO
import System.Random
import Data.List
diceColor = [("Black",1),("Green",2),("Purple",3),("Red",4),("White",5),("Yellow",6)]
{-
randomList :: (RandomGen g) -> Int -> g -> [Integer]
random 0 _ = []
randomList n generator = r : randomList (n-1) newGenerator
where (r, newGenerator) = randomR (1, 6) generator
-}
rand :: Int -> [Int] -> IO()
rand n rlst = do
num <- randomRIO (1::Int, 6)
if n == 0
then doSomething rlst
else rand (n-1) (num:rlst)
doSomething x = putStrLn (show (sort x))
main :: IO()
main = do
--hSetBuffering stdin LineBuffering
putStrLn "roll, keep, score?"
cmd <- getLine
doYahtzee cmd
--rand (read cmd) []
doYahtzee :: String -> IO()
doYahtzee cmd = do
if cmd == "roll"
then rand 5 []
else do print "You won"
您不能讓實現函數的代碼與函數的名稱保持同步。換句話說,你需要在函數內的'do'語句之後縮進每一行。 – 2012-03-06 04:54:07
我沒有縮進它,上面沒有正確顯示。無論如何,我克服了主要的縮進問題(儘管我仍然有它的元組列表),我現在得到:「異常:Prelude.read:沒有解析」錯誤,當我鍵入「roll」。 – rexbelia 2012-03-06 04:59:04
爲獲得最大程度的幫助,請務必張貼您實際使用的代碼,包括縮進。 – 2012-03-06 05:29:00