我正在寫一個Cardguess遊戲,用戶在這裏設置答案並讓PC猜測。對於我的項目,輸入卡號爲2.Haskell Cardguess遊戲
然後,我需要編寫cardguess算法。 我已經創建了卡模塊。
data Suit = Club | Diamond | Heart | Spade
deriving (Eq, Ord, Bounded, Enum)
suitchars = "CDHS"
data Rank =
R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
Jack | Queen | King | Ace
deriving (Eq, Ord, Bounded, Enum)
rankchars = "23456789TJQKA"
data Card = Card {suit::Suit, rank::Rank}
deriving (Eq, Bounded)
instance Ord Card where
compare (Card s1 r1) (Card s2 r2) =
let suitorder = compare s1 s2
in if suitorder == EQ then compare r1 r2 else suitorder
instance Enum Card where
fromEnum (Card s r) = (fromEnum s)*13 + (fromEnum r)
toEnum n = (Card s r)
where s = toEnum (n `div` 13)
r = toEnum (n `mod` 13)
而我的策略是將Suit和Rank分成兩部分。最初的猜測可能是Card Club R5
,Card Heart Jack
然後我會給出反饋,並據此,我會嘗試nextGuess
,等到目前爲止,直到得到正確的答案。
我寫了initialGuess
函數。
我把其餘的卡在GameState
。我想寫nextGuess
的代碼。
nextGuess :: ([Card],GameState) -> (Int,Int,Int,Int,Int) ->([Card],GameState)
(Int,Int,Int,Int,Int)
是反饋值。 我怎麼能代表第一個參數([Card],GameState)
,這意味着以前的猜測卡和以前的GameState
。
你問*「我怎麼能代表第一個參數'([卡],遊戲狀態)'」 * 。我不明白你的意思。請澄清。第一個參數是*「先前的猜測牌和先前的」GameState「*的表示。 – dave4420
我怎麼能得到以前的卡和gamestate ..好像是遞歸的 – Chwa
這將是一段代碼,調用'nextGuess'的關注。就「nextGuess」而言,它只是一個參數,與'card_number'相同的是'initialGuess'。你的問題真的是關於如何調用nextGuess? – dave4420