在haskell中实现单人纸牌

Vla*_*scu 2 haskell

我想在haskell中实现一个简单的8off单人纸牌游戏,我不太清楚如何定义我的棋盘,以及如何制作一个返回随机起始板的功能.如何修改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]
Run Code Online (Sandbox Code Playgroud)

返回我,这个:

[[(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)]]
Run Code Online (Sandbox Code Playgroud)

Mar*_*rio 5

看起来你有一个良好的开端!也许您已准备好将这些组件中的一些组合在一起以形成您的电路板.

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

然后,您可能希望使用默认功能,该功能可设置主板的默认状态.

  • defaultFoundation返回Foundation包含四个空Decks的A.
  • A defaultColumns取一个Deck并分割它,返回一个Columns包含8 Deck秒,每个6张牌(也许你只想从甲板上传入前48张牌).
  • A defaultReserves返回Reserve8 Deck秒,4张牌,4张空(也许这里是你要传递剩下的4张牌的地方Deck)

到目前为止你做得很好,一次一步.:)