Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Description

pokersolver is a poker hand solver and comparison tool written in Javascript. It was written for and is being used in production on CasinoRPG, an HTML5 MMORPG that features Texas Hold'em as one of its main casino games. It is designed for use on either the client (browser) or the server (Node.js). This library is capable of:

  • Evaluating a hand of up to 7 cards
  • Calculating the score of the hand (0-9)
  • Returning the name of the hand (Pair, Flush, etc)
  • Returning a detailed description (Two Pair, A's & 8's)
  • Comparing an array of hands and returning the winner(s)
  • Identifying all cards involved in creating the winning hand
  • Support for wilds and other game types
  • Works in both the browser and Node.js

Installation

npm install pokersolver

Examples

Server Usage

varHand=require('pokersolver').Hand;

Browser Usage

<scriptsrc="/path/to/pokersolver.js"></script><script>varhand=Hand.solve(['...']);
...
</script>

Solve two hands and then determine the winner between the two of them.

varhand1=Hand.solve(['Ad','As','Jc','Th','2d','3c','Kd']);varhand2=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);varwinner=Hand.winners([hand1,hand2]);// hand2

Solve a hand and return the type and the description.

varhand=Hand.solve(['Ad','As','Jc','Th','2d','Qs','Qd']);console.log(hand.name);// Two Pairconsole.log(hand.descr);// Two Pair, A's & Q's

API

Hand Methods

solve(cards, game, canDisqualify)

Solves the hand passed in, whether 3 cards or 7. Returns various information such as name, description, score and cards involved.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h']. Note that a 10 should be passed as a T (Th for example).
  • game: String Which rule set is used, based on the game being played. Default: 'standard'
  • canDisqualify: Boolean Is this hand subject to qualification rules, which some games have? Default: false

winners(hands)

Compare the passed hands and determine which is the best hand(s). Can return multiple if there is a tie.

  • handsArray All hands solved with Hand.solve that should be compared.

toString()

Returns a formatted string of all cards involved in the identified hand type (maximum of 5 cards).

Solved Hand Properties

cardPool Array

All of the cards passed into the hand.

cards Array

All of the cards involved in the identified hand type.

descr String

Detailed description of the identified hand type (Two Pair, A's & Q's for example).

name String

Type of hand identified (Two Pair for example).

rank Number

Ranking of the hand type (Varies from game to game; 0 being the lowest hand).

PaiGowPokerHelper Methods

solve(cards)

Solves the hand passed in, sets it according to House Way, and solves both hands.

  • cards: Array All cards involved in the hand, example: ['Ad', '2d', '3d', '4d', 'Qc', 'Ks', '7h'].

setHands(hiHand, loHand)

Sets the hands according to the input, and solves both hands.

  • hiHandArray Five cards involved in the high hand, example: ['Ad', '2d', '3d', '4d', '7h'].
  • loHandArray Two cards involved in the low hand, example: ['Qc', 'Ks'].

winners(player, banker)

Compare the passed PaiGowPokerHelper hands and determine who wins. 1 = Player, -1 = Banker, 0 = Push.

  • playerPaiGowPokerHelper Non-banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.
  • bankerPaiGowPokerHelper Banking hand solved with PaiGowPokerHelper.solve or PaiGowPokerHelper.setHands.

Solved PaiGowPokerHelper Properties

baseHand Hand

All of the cards passed into the helper, run against Hand.solve.

hiHand Hand

Five card high hand, whether calculated or passed into the helper, run against Hand.solve.

loHand Hand

Two card low hand, whether calculated or passed into the helper, run against Hand.solve.

Games Available

standard

Useful for Texas Hold'em, Seven Card Stud, Five Card Draw, and other Standard Poker Games.

jacksbetter

Useful for Jacks or Better Video Poker. Use qualification to determine if a hand is a Pair of Jacks or better.

joker

Useful for Joker Video Poker. Jokers are notated as 'Or' and may be anything. Qualification: Kings or better.

deuceswild

Useful for Deuces Wild Video Poker. Deuces may be anything. Hands lower than Three of a Kind are High Card and not paying hands.

threecard

Useful for Three Card Poker. Qualification: Dealer must have Queen High or better.

fourcard

Useful for Four Card Poker. No qualifying hand.

fourcardbonus

Useful for calculating the Aces Up Bonus for Four Card Poker. Qualification: Pair of Aces or better.

paigowpokerfull

HELPER GAME: Used by PaiGowPokerHelper to create a hand that will eventually be split.

paigowpokeralt

HELPER GAME: Used by PaiGowPokerHelper on a straight and/or flush to create another possible hand.

paigowpokersf6

HELPER GAME: Used by PaiGowPokerHelper to determine if a six-card straight and/or flush is possible.

paigowpokersf7

HELPER GAME: Used by PaiGowPokerHelper to determine if a seven-card straight and/or flush is possible.

paigowpokerhi

Useful for Pai Gow Poker's High Hand. A2345 is the second highest straight. One joker in the deck as 'Or'; it may be used to complete a straight and/or flush, else is counted as an Ace.

paigowpokerlo

Useful for Pai Gow Poker's Low Hand. One joker in the deck as 'Or'; it is counted as an Ace.

Testing

npm install
npm test

License

Copyright (c) 2016 James Simpson and GoldFire Studios, Inc.

Released under the MIT License.

About

Javascript poker hand solver.

Resources

Stars

436 stars

Watchers

27 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages