私は、ランダムに生成されたサイコロを、ユーザーがプレイするごとに吐き出しようとしています。ユーザーは1回転につき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'ステートメントの後のすべての行を関数内でインデントする必要があります。 –
私はそれを字下げしましたが、上に正しく表示されていません。とにかく、メインの字下げ問題を解決しましたが(まだタプルのリストのためにそれを持っていますが)、 "roll:"と入力すると "Exception:Prelude.read:no parse"エラーが発生します。 – rexbelia
最大限の助力を得るには、実際に使用するコード、字下げを投稿してください。 –