如何用JS写一个算法,总的三副牌,162张扑克,玩家手里牌40张,按同心(三个花色牌值一样),然后炸弹(四个牌值一样以上),三张,对子,单牌的优先级排序。
// 定义扑克牌
let poker = [];
for (let i = 0; i < 3; i++) {
for (let j = 1; j <= 54; j++) {
poker.push({suit: i, value: j});
}
}
// 玩家手中的牌
let playerHand = [];
for (let i = 0; i < 40; i++) {
playerHand.push(poker.shift());
}
// 按照花色和牌值进行排序
playerHand.sort((a, b) => {
if (a.suit !== b.suit) {
return a.suit - b.suit;
} else {
return a.value - b.value;
}
});
// 排序函数
function sortCards(cards) {
let groups = {};
let sortedCards = [];
// 根据牌值分组
for (let card of cards) {
let value = card.value;
if (!groups[value]) {
groups[value] = [];
}
groups[value].push(card);
}
// 同心
let sameSuitValues = Object.keys(groups).sort((a, b) => b - a);
for (let value of sameSuitValues) {
let group = groups[value];
if (group.length >= 3) {
sortedCards.push(...group);
delete groups[value];
}
}
// 炸弹
let bombValues = Object.keys(groups).sort((a, b) => b - a);
for (let value of bombValues) {
let group = groups[value];
if (group.length >= 4) {
sortedCards.push(...group);
delete groups[value];
}
}
// 三张
for (let value of bombValues) {
let group = groups[value];
if (group.length >= 3) {
sortedCards.push(...group);
delete groups[value];
}
}
// 对子
for (let value of bombValues) {
let group = groups[value];
if (group.length >= 2) {
sortedCards.push(...group);
delete groups[value];
}
}
// 单牌
for (let value of bombValues) {
let group = groups[value];
if (group.length >= 1) {
sortedCards.push(...group);
delete groups[value];
}
}
return sortedCards;
}
console.log(sortCards(playerHand));
(帖子被作者删除,如无标记将在 24 小时后自动删除)
(帖子被作者删除,如无标记将在 24 小时后自动删除)
。。。建议先学点js基础