Skip to main content

A texasholdem python package

Project description

texasholdem

A python package for Texas Hold 'Em Poker.

Latest Stable Release Version: v0.5.1
Changelog
Documentation

Latest Experimental Release Version v0.5.1
Changelog
Documentation

Roadmap
v1.0.0

Contributing

Want a new feature, found a bug, or have questions? Feel free to add to our issue board on Github! Open Issues.

We welcome any developer who enjoys the package enough to contribute! Please message me at evyn.machi@gmail.com if you want to be added as a contributor.

Install

The package is available on pypi and can be installed with

pip install texasholdem

For the latest experimental version

pip install texasholdem --pre

Quickstart

Play a game from the command line and take turns for every player out of the box.

from texasholdem import TexasHoldEm
from texasholdem.gui import TextGUI

game = TexasHoldEm(buyin=500,
                   big_blind=5,
                   small_blind=2,
                   max_players=6)
gui = TextGUI()
gui.set_player_ids(list(range(6)))      # see all cards
while game.is_game_running():
    game.start_hand()
    while game.is_hand_running():
        gui.print_state(game)

        action, val = gui.accept_input()
        while not game.validate_move(game.current_player, action, val):
            print(f"{action} {val} is not valid for player {game.current_player}")
            action, val = gui.accept_input()

        gui.print_action(game.current_player, action, val)
        game.take_action(action, val)

Overview

The following is a quick summary of what's in the package. Please see the docs for all the details.

Game Information

Get game information and take actions through intuitive attributes.

from texasholdem import TexasHoldEm, HandPhase, ActionType

game = TexasHoldEm(buyin=500,
                   big_blind=5,
                   small_blind=2,
                   max_players=9)
game.start_hand()

assert game.hand_phase == HandPhase.PREFLOP
assert HandPhase.PREFLOP.next_phase() == HandPhase.FLOP
assert game.chips_to_call(game.current_player) == game.big_blind
assert len(game.get_hand(game.current_player)) == 2

game.take_action(ActionType.CALL)

player_id = game.current_player
game.take_action(ActionType.RAISE, value=10)
assert game.player_bet_amount(player_id) == 10
assert game.chips_at_stake(player_id) == 20     # total amount in all pots the player is in

assert game.chips_to_call(game.current_player) == 10 - game.big_blind

Cards

The card module represents cards as 32-bit integers for simple and fast hand evaluations.

from texasholdem import Card

card = Card("Kd")                       # King of Diamonds
assert isinstance(card, int)            # True
assert card.rank == 11                  # 2nd highest rank (0-12)
assert card.pretty_string == "[ K ♦ ]"

Agents

The package also comes with basic agents including call_agent and random_agent

from texasholdem import TexasHoldEm
from texasholdem.agents import random_agent, call_agent

game = TexasHoldEm(buyin=500, big_blind=5, small_blind=2)
game.start_hand()

while game.is_hand_running():
    if game.current_player % 2 == 0:
        game.take_action(*random_agent(game))
    else:
        game.take_action(*call_agent(game))

Game History

Export and import the history of hands to files.

from texasholdem import TexasHoldEm
from texasholdem.gui import TextGUI

game = TexasHoldEm(buyin=500, big_blind=5, small_blind=2)
game.start_hand()

while game.is_hand_running():
    game.take_action(*some_strategy(game))

# export to file
game.export_history("./pgns/my_game.pgn")

# import and replay
gui = TextGUI()
for state in TexasHoldEm.import_history("./pgns/my_game.pgn"):
    gui.print_state(state)

PGN files also support single line and end of line comments starting with "#".

Poker Evaluator

The evaluator module returns the rank of the best 5-card hand from a list of 5 to 7 cards. The rank is a number from 1 (strongest) to 7462 (weakest).

from texasholdem import Card
from texasholdem.evaluator import  evaluate, rank_to_string

assert evaluate(cards=[Card("Kd"), Card("5d")],
                board=[Card("Qd"),
                       Card("6d"),
                       Card("5s"),
                       Card("2d"),
                       Card("5h")]) == 927
assert rank_to_string(927) == "Flush, King High"

GUIs

The GUI package currently comes with a text-based GUI to play games from the command line. Coming later will be web-app based GUIs.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

texasholdem-0.5.1.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

texasholdem-0.5.1-py3-none-any.whl (33.8 kB view details)

Uploaded Python 3

File details

Details for the file texasholdem-0.5.1.tar.gz.

File metadata

  • Download URL: texasholdem-0.5.1.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11

File hashes

Hashes for texasholdem-0.5.1.tar.gz
Algorithm Hash digest
SHA256 3510cf6bba8eb5f524acc0abcf48d9c42ae5711af23b0f051979379b0af0e213
MD5 3e3e286d2ff43886c25a965a26cbf6a8
BLAKE2b-256 fdedd4e8580ee3a546626073ad5ade0ca19fb6c1aa1d4598b1cdf3176abc230c

See more details on using hashes here.

Provenance

File details

Details for the file texasholdem-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: texasholdem-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 33.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11

File hashes

Hashes for texasholdem-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b65b406f01b6fd4a02db1b32e7beffac5b01c0ff3dff9bc54be68ef62ab2079b
MD5 8146c0a96ca7da7b4af17ff77b472be1
BLAKE2b-256 d61ebca0c6ebfaec2ef75ca3e77ce4f4456b77aaeb5234d68d85825d67c2f9c7

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page