【发布时间】:2015-10-30 01:01:26
【问题描述】:
我正在尝试实现代码,根据二十一点标准规则检查二十一点手,以确定正确的玩法。这就是我所拥有的。这似乎很复杂,我什至不确定它是否 100% 正确,但我想不出更好的方法。
有什么建议吗?
二十一点标准规则
我的代码:
function determinePlay(dealerCard, playerCards) {
if (playerCards.length === 2) {
var c1 = playerCards[0].value;
var c2 = playerCards[1].value;
var play;
//ACES
if (c1 === 'A' || c2 === 'A') {
//A8, A9, A10
if (c1 === 8 || c2 === 8 || c1 === 9 || c2 === 9 || c1 === 10 || c2 === 10) {
play = 'stand';
}
//A7
if (c1 === 7 || c2 === 7) {
if (dealerCard === 2 || dealerCard === 7 || dealerCard === 8) {
play = 'stand';
} else if (dealerCard > 2 && dealerCard < 7) {
play = 'doubledown';
} else if (dealerCard > 8) {
play = 'hit';
}
}
//A6
if (c1 === 6 || c2 === 6) {
if (dealerCard < 3 || dealerCard > 6) {
play = 'hit';
} else {
play = 'doubledown';
}
}
//A5
if (c1 === 5 || c2 === 5) {
if (dealerCard < 4 || dealerCard > 6) {
play = 'hit';
} else {
play = 'doubledown';
}
}
//A4
if (c1 === 4 || c2 === 4) {
if (dealerCard < 4 || dealerCard > 6) {
play = 'hit';
} else {
play = 'doubledown';
}
}
//A3
if (c1 === 3 || c2 === 3) {
if (dealerCard < 5 || dealerCard > 6) {
play = 'hit';
} else {
play = 'doubledown';
}
}
//A2
if (c1 === 2 || c2 === 2) {
if (dealerCard < 5 || dealerCard > 6) {
play = 'hit';
} else {
play = 'doubledown';
}
}
//AA
if (c1 === 'A' && c2 === 'A') {
play = 'split';
}
//END ACES
}
// NO ACES
else {
var sum = c1 + c2;
//ALL PAIRS UNLESS JACK OR HIGHER
if ((c1 === c2) && (c1 < 11)) {
//8-8
if (c1 === 8) {
play = 'split';
}
//10-10
else if (c1 === 10) {
play = 'stand';
}
//9-9
else if (c1 === 9) {
if (dealerCard < 7 || dealerCard === 8 || dealerCard === 9) {
play = 'split';
} else {
play = 'stand';
}
}
//7-7
else if (c1 === 7) {
if (dealerCard < 8) {
play = 'split';
} else {
play = 'hit';
}
}
//6-6
else if (c1 === 6) {
if (dealerCard < 3 || dealerCard > 6) {
play = 'hit';
} else {
play = 'stand';
}
}
//5-5
else if (c1 === 5) {
if (dealerCard < 10) {
play = 'doubledown';
} else {
play = 'hit';
}
}
//4-4
else if (c1 === 4) {
play = 'hit';
}
//3-3, 2-2
else if (c1 === 3 || c1 === 2) {
if (dealerCard < 4 || dealerCard > 7) {
play = 'hit';
} else {
play = 'split';
}
}
// END ALL PAIRS UNLESS JACK OR HIGHER
}
//EVERYTHING ELSE
else {
//sum 8 or less
if (sum <= 8) {
play = 'hit';
}
//sum 9
else if (sum === 9) {
if ((dealerCard === 2) || (dealerCard > 6)) {
play = 'hit'
} else {
play = 'doubledown'
}
}
//sum 10
else if (sum === 10) {
if (dealerCard < 10) {
play = 'doubledown'
} else {
play = 'hit'
}
}
//sum 11
else if (sum === 11) {
if (dealerCard < 11) {
play = 'doubledown';
} else {
play = 'hit';
}
}
//sum 12
else if (sum === 12) {
if ((dealerCard < 4) || (dealerCard > 6)) {
play = 'hit';
} else {
play = 'stand';
}
}
//sum 13
else if (sum === 13) {
if (dealerCard < 7) {
play = 'stand';
} else {
play = 'hit';
}
}
//sum 14
else if (sum === 14) {
if (dealerCard < 7) {
play = 'stand';
} else {
play = 'hit';
}
}
//sum 15
else if (sum === 15) {
if (dealerCard < 7) {
play = 'stand';
} else {
play = 'hit';
}
}
//sum 16
else if (sum === 16) {
if (dealerCard < 7) {
play = 'stand';
} else {
play = 'hit';
}
}
//sum 17+
else if (sum > 16) {
play = 'stand';
}
}
}
return play;
}
}
【问题讨论】:
-
你能将你的规则实现为二维数组吗?
标签: javascript blackjack