我正在制作一個撲克游戲,我需要將 5 張卡片的序列放入 7 張卡片的陣列中。由于有些卡片是像皇后、國王或王牌這樣的數字,我將這些值映射到一個單獨的陣列中,用于比較。在有問題的情況下,它找到了正確的答案。但是,如果我嘗試按照撲克規則用 A、2、3、4、5 形成順子,我就做不到。
const CARD_VALUE_MAP = {
"2": 2,
"3": 3,
"4": 4,
"5": 5,
"6": 6,
"7": 7,
"8": 8,
"9": 9,
"10": 10,
J: 11,
Q: 12,
K: 13,
A: 14,
}
然后我使用此映射通過此代碼瀏覽卡片
for(let i=0; i<6; i ){
if(CARD_VALUE_MAP[finalhand[i].value] === CARD_VALUE_MAP[finalhand[i 1].value]-1){
count ;
if(count === 5){
console.log("straight");
return 500;
}
}
}
- finalhand 看起來像這樣:
finalhand = [{suit: '?', value: '3'},
{suit: '?', value: 'J'},
{suit: '?', value: 'Q'},
{suit: '?', value: 'K'},
{suit: '?', value: 'A'}
{suit: '?', value: '10'},
{suit: '?', value: '4'}]
uj5u.com熱心網友回復:
有很多不同的方法可以做到這一點,但根據您已經擁有的,這里是最簡單的更改:首先,設定A: 14最后一手,然后排序(看起來您已經在做)。
然后像這樣更改代碼:
count = 0;
if (CARD_VALUE_MAP[finalhand[0].value] = "2" && CARD_VALUE_MAP[finalhand[6].value] = A) {
count ;
}
for(let i=0; i<6; i ){
if(CARD_VALUE_MAP[finalhand[i].value] === CARD_VALUE_MAP[finalhand[i 1].value]-1){
count ;
if(count === 4){
console.log("straight");
return 500;
}
else{
count = 0;
}
}
}
這會在低端對 Ace 進行初始檢查,如果存在,則在回圈開始之前增加計數。
我還添加了else { count = 0; }分支,因為如果它們之間有任何間隙,只有五張相鄰的牌在手就不是順子。
uj5u.com熱心網友回復:
這是一個概念驗證 (POC) 卡價值解決方案,可幫助您入門。它有效,但它不是最好的代碼。
const CARD_VALUE_MAP = {
"2": 2,
"3": 3,
"4": 4,
"5": 5,
"6": 6,
"7": 7,
"8": 8,
"9": 9,
"10": 10,
J: 11,
Q: 12,
K: 13,
}
const aceValues = function() {
return Object.assign(
Object.assign({}, CARD_VALUE_MAP),
{
AL: CARD_VALUE_MAP[2] - 1, // Ace Low
AH: CARD_VALUE_MAP["K"] 1, // Ace High
},
);
}();
function rankStraight(hand) {
if (hand.length < 5) {
return [];
}
let cards = [];
for (let card of hand) {
if (card === "A") {
cards.push("AL");
card = "AH";
}
cards.push(card);
}
cards.sort(function(a, b) {
return aceValues[b] - aceValues[a];
});
let straight = [cards[0]];
for (let [i, card] of cards.entries()) {
let last = straight[straight.length - 1];
if (card === last) {
continue;
}
if ((aceValues[last] - aceValues[card]) !== 1) {
straight = [card];
continue
}
if (straight.push(card) >= 5) {
break;
}
if ((straight.length (cards.length - (i 1))) < 5) {
break;
}
}
if (straight.length != 5) {
return [];
}
if (straight[0] === "AH") {
straight[0] = "A";
}
if (straight[straight.length - 1] === "AL") {
straight[straight.length - 1] = "A";
}
return straight;
}
let hand = [];
hand = ["A", "K", "Q","J",10];
console.log(rankStraight(hand));
hand = [5, 4, 3, 2, "A"];
console.log(rankStraight(hand));
hand = ["A", 5, 4, 3, 2];
console.log(rankStraight(hand));
hand = ["A", 5, 7, 4, 3, "K", 2, "A"];
console.log(rankStraight(hand));
$ node poker.js
[ 'A', 'K', 'Q', 'J', 10 ]
[ 5, 4, 3, 2, 'A' ]
[ 5, 4, 3, 2, 'A' ]
[ 5, 4, 3, 2, 'A' ]
$
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430975.html
標籤:javascript 算法 排序
