将两个值分配给对象中的一个键

时间:2017-01-09 21:13:48

标签: javascript blackjack

我正在尝试用JavaScript创建二十一点。我完成游戏的大部分工作只是试图解决Ace可以是1或11的问题。

解决这个问题的最佳方法是什么?

我有这个对象:

let rank = {
  'A': 1,
  '2': 2,
  '3': 3,
  '4': 4,
  '5': 5,
  '6': 6,
  '7': 7,
  '8': 8,
  '9': 9,
  '10': 10,
  'J': 10,
  'Q': 10,
  'K': 10
};

这是我的西装:

让西装= ['俱乐部','钻石','心脏','黑桃'];

4 个答案:

答案 0 :(得分:2)

您可以将数组作为值:

let rank  = {
  'A': [1, 11],
  '2': 2,
  '3': 3,
  '4': 4,
  '5': 5,
  '6': 6,
  '7': 7,
  '8': 8,
  '9': 9,
  '10': 10,
  'J': 10,
  'Q': 10,
  'K': 10
};

let rank  = {
  'A': [1, 11],
  '2': [2],
  '3': [3],
  '4': [4],
  '5': [5],
  '6': [6],
  '7': [7],
  '8': [8],
  '9': [9],
  '10': [10],
  'J': [10],
  'Q': [10],
  'K': [10]
};

答案 1 :(得分:1)

let rank = {
  'A': {
    yourKey  : 1,
    yourKey2 : 11
  },
  '2': 2,
  '3': 3,
  '4': 4,
  '5': 5,
  '6': 6,
  '7': 7,
  '8': 8,
  '9': 9,
  '10': 10,
  'J': 10,
  'Q': 10,
  'K': 10
};

答案 2 :(得分:0)

这很简单。 Ace的值是1,句点。然后,当您评估一手牌的总数时,您应用以下规则:

  1. 每张卡的总价值。
  2. 当且仅当总数小于12时,并且手中至少有一个ace,加10。
  3. 就是这样。从来没有任何关于它的“选择”,也绝不会超过一个。你还必须跟踪这样一只手是“软”的事实,因为这会影响规​​则。

    这应该在“手动评估”程序中完成。没有必要复杂每张卡的评估 - 这就是我们如何向人类描述它,因为我们的大脑不起作用。此外,你真的不应该首先使用字符串来表示卡片。使用数字,并仅在输出到人类时转换为字符串。

答案 3 :(得分:-1)

您可以将rank.A分配给值数组,但在某些时候您可能需要编写一个函数来根据玩家持有的其他牌来计算要返回的值。

例如,

let rank  = {
  'A': [1, 11],
  '2': 2,
  '3': 3,
  '4': 4,
  '5': 5,
  '6': 6,
  '7': 7,
  '8': 8,
  '9': 9,
  '10': 10,
  'J': 10,
  'Q': 10,
  'K': 10
};

function calulateSum(hand) {
  let sum = 0;

  if (hand.some(v => v === rank.A)) { // if hand contains 'rank.A'
    // calculate value of 'A' based on total value
    // of the other cards in the hand
  }

  return sum;
}