gpt4 book ai didi

javascript - 我如何使用 Javascript 评估德州扑克手牌?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:37 25 4
gpt4 key购买 nike

我不确定从这里开始的最佳行动方案是什么。对于每个玩家,我都创建了一个数组,其中包含公共(public)牌和自己的牌,我剩下要做的一件事就是评估结果。

我当然可以暴力检查每七张牌的组合,但是 a) 这不会非常优雅和快速,并且 b) 我不知道如何处理平局,从那以后你必须看在剩下的高牌上。

这是 fiddle ,出于测试目的,我对所有内容都使用了 document.write():

https://jsfiddle.net/bjp11yjb/1/

如果有人能给我指出正确的方向,又不会让我感到困惑,我将不胜感激!

var suits = ['Clubs', 'Spades', 'Hearts', 'Diamonds'];
var ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace'];
var combinations = ['Royal Flush', 'Straight Flush', 'Four of a Kind', 'Full House', 'Flush', 'Straight', 'Three of a Kind', 'Two Pair', 'One Pair'];
var deck = [];
var players = [new Player(), new Player()];
var table = [];

function Player() {
this.hand = [];
this.result;
}

function Card(suit, rank) {
this.suit = suit;
this.rank = rank;
this.name = rank + ' of ' + suit;
}


function initDeck() {
deck = [];

for(var i = 0; i < 4; i++) {
for(var j = 0; j < 13; j++) {
deck.push(new Card(suits[i], ranks[j]));
}
}

}

function drawCard() {
var randNumber = Math.floor(Math.random() * deck.length);
var drawnCard = deck[randNumber];
deck.splice(randNumber, 1);

return drawnCard;
}


function dealCards() {
for(var i = 0; i < 2; i++) {
for(var j = 0; j < players.length; j++) {
var drawnCard = drawCard();
players[j].hand.push(drawnCard);
}
}
}

function flop() {
for(var i = 0; i < 3; i++) {
var drawnCard = drawCard();
table.push(drawnCard);
}
}

function turn() {
var drawnCard = drawCard();
table.push(drawnCard);
}

function river() {
var drawnCard = drawCard();
table.push(drawnCard);
}

function showDown() {
for(var i = 0; i < players.length; i++) {

evaluate(i);
document.write("<br>");

}

}

function evaluate(player) {
var totalHand = players[player].hand.concat(table);

for(var i = 0; i < totalHand.length; i++) {

}

}


initDeck();
dealCards();
document.write("Player 1: " + players[0].hand[0].name + ' and ' + players[0].hand[1].name + '<br>');
document.write("Player 2: " + players[1].hand[0].name + ' and ' + players[1].hand[1].name + '<br><br>');
flop();
document.write("Flop: " + table[0].name + ', ' + table[1].name + ' and ' + table[2].name + '<br>');
turn();
document.write("Turn: " + table[0].name + ', ' + table[1].name + ', ' + table[2].name + ' and ' + table[3].name + '<br>');
river();
document.write("River: " + table[0].name + ', ' + table[1].name + ', ' + table[2].name + ', ' + table[3].name + ' and ' + table[4].name + '<br>');
showDown();

最佳答案

我的建议是实现一系列函数,每个函数都知道如何测试一个特定条件。 (是的,会有一些看似冗余的代码。没有,完成之前不要担心。)

例如:has_royal_flush(player)

然后您可以将检测 逻辑与评分 逻辑分开。您可以根据需要构建评分逻辑。但是请注意,这里的规则可能会有所不同。在开始之前,您需要写下您正在使用的确切规则。

作为检测的一部分,您可能需要跟踪“最佳组合牌”和“最高非组合牌”,以便在两个玩家拥有相同“基本”手牌的情况下,打破平局的例程可以使用这些字段。

例如:

Common:  4 7 8
Player 1: Q 4
Player 2: 10 4

Player 1: Pair
Player 2: Pair
Player 1's best combo card (e.g., "pair of whats"): 4
Player 2's best combo card: 4
Player 1's best non-combo card (i.e., "high card"): Q
Player 2's best non-combo card: 10

在这个例子中,两位玩家都有相同的“基础”——一对。所以要打破平局,你可能会先问,“一对什么?”在这个例子中,从病态上看,两位玩家都有一对 4。所以你继续问,“好吧,既然组合是并列的,那么最大的牌是什么?”领带就此破裂。有可能在该级别出现平局,在这种情况下,您必须实现另一条规则。

由于这种对共同行为的期望,您可能会将不同的评分评估者视为某些基类的对象。

关于javascript - 我如何使用 Javascript 评估德州扑克手牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com