【发布时间】:2015-10-05 17:37:48
【问题描述】:
- 我正在使用 Haskell 构建游戏(类似于扑克),但我是 Haskell 新手,在尝试思考如何用纯函数式语言实现事物时通常会卡住。*
游戏有 3 名玩家(只是为了便于解释)。两名玩家将从桌上的牌中玩,而一名玩家将从堆叠中玩。两种玩家都会拿一张牌并在有用时使用它(替换您手中的一张牌)或直接丢弃它(如果没有)。 胜利只是满堂彩或顺子。
他们两个有一些
understanding,他们之前同意互相帮助。就像我从牌桌上拿了 K(比如说),而下一手牌我从牌桌上拿了 4,这意味着我要满屋子了,因此如果可以的话,你应该提供帮助。这些玩家中的每一个都应该互相帮助,这样他们中的一个就应该在玩家玩筹码之前获胜,而不是以牺牲自己为代价。桌子共有 5 张牌,每个玩家也是如此
实现两个玩家之间的理解:
我不知道如何跟踪其他玩家从牌桌上拿走了什么。我试图通过将卡片添加到我的手上来做到这一点(实际上记住了这件事)并且当我的手(真实)的东计算时我将只取前五张卡片并且在计算帮助他时我'要丢五张牌,然后用它来计算。 有没有更好的策略来做同样的事情?这可能是微不足道的,但我是haskell世界的业余爱好者。如果你想要代码,我可以把它放上来。
我的游戏的基本设置:
data Card = Card {
c :: (Int, Char)
} deriving (Eq, Ord, Show)
data Deck = Deck {
d :: [Card]
} deriving (Show, Eq, Ord)
data Game = Game {
bact1Hand :: [Card],
bact2Hand :: [Card],
orgHand :: [Card],
tableCards :: [Card],
deck :: Deck
} deriving (Show, Eq, Ord)
type GameState a = State Game a`
【问题讨论】:
-
我们在 Haskell 中没有变量!使用recursion。
-
至少我知道。但是你要怎么记住?关于最后一手牌或其他玩家从桌上拿走的牌?谢谢
-
函数的附加参数。
-
从游戏位置的角度思考。一个位置完全决定了游戏的状态。您传递代表位置的数据。移动将一个位置转换为另一个位置。从定义能够表示位置的数据类型开始。
-
是的,提交你的代码。