【发布时间】:2018-07-24 11:23:27
【问题描述】:
所以我最近在做 BlackJack 项目,我现在有点卡在 Ace 值程序上。
根据规则,玩家可以假设 Ace 可以是 1 或 11,如果你有 2 张牌,那就太平了,3 张牌有问题。
我有一组 3 张牌和 2 个 A,可以是 - [A, A, 9], [A, 9, A], [9, A, A]
我如何对 ruby 说其中一个 A 的值应该是 11,而另一个应该是 1?数组的元素是具有 value 属性的 Card 类的对象。
更新
我拿了一个答案并稍微编辑了一下,所以如果我没有 A 并且得分超过 21,我得到的不是零值
def score_array
aces, non_aces = current_cards.partition(&:ace?)
base_value = non_aces.sum(&:value) + aces.size
return base_value unless aces?
score_array = Array.new(aces.size + 1) { |high_aces| base_value + 10 * high_aces }
ace_value = score_array.select { |score| score <= 21 }.max
end
更新 2
我已经使用 cmets 的想法将方法重构为 2 行:
def count_score
@score = current_cards.sum(&:value)
@score += 10 if score < 12 && aces?
end
【问题讨论】: