我想在haskell中实现一个简单的8off solitaire game,但我不确定如何定义板,以及如何使函数返回随机的起始板。如何修改myBoard和数据结构?到目前为止,我有以下这些:

data Pip = A|TW0|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|TEN|J|Q|K  --pip value
       deriving (Eq,Show)
data Suit = S|H|D|C                                              --suit
       deriving (Eq,Show)
type Card = (Pip,Suit)                                           --card
type Deck = [(Card)]                                             --deck
type Foundations = [(Deck)]                                        foundations
type Columns = [(Deck)]                                          --columns
type Reserve = [(Deck)]                                          --reserve
type EOBoard = [(Deck)]

myBoard::Deck->EOBoard
myBoard pack = [shuffle pack]


返回我的,这是:

[[(K,D),(TW0,H),(SEVEN,C),(SEVEN,S),(THREE,D),(NINE,S),(THREE,C),(FOUR,H),(THREE,S),(TW0,D),(TW0,C),(FOUR,S),(K,S),(TEN,D),(J,S),(EIGHT,H),(FOUR,D),(NINE,H),(SEVEN,H),(A,S),(SIX,S),(EIGHT,S),(FIVE,S),(FOUR,C),(K,H),(Q,D),(THREE,H),(TEN,H),(A,D),(EIGHT,C),(NINE,D),(Q,H),(J,D),(J,C),(TEN,C),(Q,S),(Q,C),(J,H),(NINE,C),(SIX,C),(FIVE,H),(SEVEN,D),(A,C),(TW0,S),(EIGHT,D),(FIVE,D),(TEN,S),(K,C),(A,H),(SIX,D),(FIVE,C),(SIX,H)]]

最佳答案

看来您的开端很好!也许您已经准备好将其中的一些组件组合在一起以构成您的电路板。

您可以考虑制作棋盘/游戏ADT。

然后,您可能希望拥有一个默认功能,该功能可以设置开发板的默认状态。


一个defaultFoundation返回一个包含四个空FoundationDeck
一个defaultColumns接受一个Deck并将其分割,返回一个Columns,其中包含8个Deck,每个6张卡(也许您只想从Deck传入前48张卡)。
一个defaultReserves返回一个Reserve,其中Deck包含8个Deck,4个带有卡且4个为空(也许这是您要从传递其余4张卡的地方)


到目前为止,您一切都很好,每次只需一步。 :)

关于haskell - Haskell中的纸牌实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33354753/

10-12 07:07