我不確定最佳行動方案是從哪裏來的。對於每個玩家,我創建了一個既擁有公共牌又擁有自己牌的陣列,我只需要做的就是評估結果。如何評估德州撲克的手與Javascript?
我當然可以蠻力檢查每七張牌組合,但a)這不會很優雅快捷,b)我不知道如何處理領帶,因爲那樣你就不得不看看剩下的高牌。
這裏是小提琴,我使用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();
有人會投票的任何特定原因?我認爲這是一個巨大的問題。這裏簡短的回答是,它需要很多代碼。大約10年前我在Actionscript中做了這個,而且非常困難。沒有什麼是非常複雜的,我們只是沒有意識到涉及到多少個概念(例如,識別直線,識別同花,知道哪個手排在更高等等) –
這是一個了不起的問題,但涉及的代碼量這個算法可能超出了SO的範圍。 – Korgrue