在这之后,玩家和发牌人(在二十一点游戏中)将所有卡抽出后,我需要确定谁赢得了游戏。得分最高不超过21的玩家将获胜,如果两人的得分相同,则获胜。
所以我有这个Scala代码:
def determineWinner(gamer: Gamer, dealer: Dealer): Player = {
List(gamer, dealer).filter(_.points <= blackJack).maxBy(_.points)
}
问题:
答案 0 :(得分:2)
maxBy
显式返回第一个最大值,因此将玩家放在列表中的第一位可确保玩家始终赢得并列。请注意不要使用具有不确定的迭代顺序的集合,例如Set。
我认为这是相当简洁和惯用的代码,除了您不能同时处理两个玩家的失败。我可能会考虑像下面这样使规则更明确一些,但这将是我与同事讨论的一个近距离电话:
if (!busted(gamer) && (gamer.points >= dealer.points || busted(dealer)))
Some(gamer)
else if (!busted(dealer))
Some(dealer)
else
None