From 8f30e75e1a6f45287205a95f85ffa2194a13559e Mon Sep 17 00:00:00 2001 From: jianghaiying Date: Sat, 11 Oct 2025 18:24:24 +0800 Subject: [PATCH] shortdeck1.3:ui and fix --- __init__.py | 13 + __pycache__/__init__.cpython-313.pyc | Bin 0 -> 397 bytes __pycache__/demo_server.cpython-313.pyc | Bin 0 -> 8722 bytes .../simple_test_server.cpython-313.pyc | Bin 0 -> 1543 bytes client/index.html | 856 ++++++++++++++++++ client/simple.html | 585 ++++++++++++ client2_random_agent.py | 243 +++++ shortdeck_arena/__init__.py | 19 + .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 567 bytes .../__pycache__/card.cpython-313.pyc | Bin 3338 -> 3283 bytes .../__pycache__/game_stage.cpython-313.pyc | Bin 4068 -> 4022 bytes .../hand_evaluator.cpython-313.pyc | Bin 6958 -> 6858 bytes .../__pycache__/hand_ranking.cpython-313.pyc | Bin 6281 -> 5074 bytes .../__pycache__/side_pot.cpython-313.pyc | Bin 5360 -> 5023 bytes .../__pycache__/simulation.cpython-313.pyc | Bin 26149 -> 28493 bytes shortdeck_arena/card.py | 1 - shortdeck_arena/hand_ranking.py | 1 + shortdeck_arena/side_pot.py | 1 - shortdeck_arena/simulation.py | 131 ++- shortdeck_arena_history.jsonl | 118 +++ shortdeck_server/__init__.py | 7 + .../__pycache__/__init__.cpython-313.pyc | Bin 0 -> 296 bytes .../__pycache__/arena_adapter.cpython-313.pyc | Bin 10382 -> 16990 bytes .../__pycache__/main.cpython-313.pyc | Bin 3000 -> 11596 bytes .../__pycache__/main_package.cpython-313.pyc | Bin 0 -> 9471 bytes shortdeck_server/arena_adapter.py | 170 +++- ...0f9dbc71-050b-445b-bd3c-8ff31baec1fc.jsonl | 68 ++ ...106221b0-6463-4598-842b-008ce3900934.jsonl | 36 + ...19bdd797-0603-45d9-934d-f7abdb30ca71.jsonl | 7 + ...2c24ddb9-581f-44df-b14e-0bb904d918e1.jsonl | 9 + ...39f51229-8c0a-4a53-b6cf-e21d9e9e49b2.jsonl | 5 + ...49705745-32f4-4161-bc02-4d65fc4a6081.jsonl | 9 + ...519ef99d-edd2-4d31-956b-c39e7bc72506.jsonl | 20 + ...52482f92-1af8-4b20-8efc-3ca2188350c1.jsonl | 1 + ...5be4fc33-5c99-41cf-a51e-02614f8b8365.jsonl | 7 + ...6b5b7218-e5d4-4616-b902-f2fee6552578.jsonl | 4 + ...6efc8ba0-e9b5-40a9-af79-863f92e2619d.jsonl | 32 + ...6fecc21b-5614-4dae-ab2a-d179772350e9.jsonl | 6 + ...720fe666-fa9c-4d73-a4b1-247d49e8e2a3.jsonl | 1 + ...78b6abaf-75a7-4f14-85f0-f27f49ed9a6d.jsonl | 5 + ...7cfd6443-9bb3-4a7f-b71f-6d21a601ecd9.jsonl | 6 + ...7f2989fa-63f3-4a0c-ab1e-1262af568162.jsonl | 3 + ...7f2c27d4-4f40-4056-9cc9-7b9a41c8b440.jsonl | 22 + ...847df1f7-0470-4086-b3a1-7680ad190f3d.jsonl | 6 + ...925d78a3-d647-458a-9a74-2200b4199e13.jsonl | 3 + ...97e7ded5-0930-43e0-b99e-ec1253db0b00.jsonl | 5 + ...9876a5c4-152a-4e8c-9130-e8d035bf62b5.jsonl | 3 + ...9d4ef610-012e-48e6-93b0-95344a2b9ab8.jsonl | 48 + ...9fd090b6-acfd-4483-8bd2-f5565aa466ac.jsonl | 4 + ...a0fe4e18-ef0b-4426-be59-ef0ed794ce71.jsonl | 7 + ...a2f1f761-f709-4aa7-8ca7-d73b6eec394c.jsonl | 21 + ...a49bf62c-0133-4041-a5af-008ed7a6e365.jsonl | 1 + ...a5cce7d5-7828-4cb1-9731-0d43664cd2e7.jsonl | 2 + ...aa241ea0-f0e7-4dd6-8f8e-0a74fcb24d25.jsonl | 12 + ...ab93c6e8-10a4-4032-8a4d-2e44d2fcb2c7.jsonl | 3 + ...bc07666b-6ae1-4721-82a1-637c102f88cf.jsonl | 2 + ...c0990ec7-faa1-44a7-9135-be9c1159a55f.jsonl | 40 + ...c5182b9b-2e3c-4652-a48e-d7e276b384d2.jsonl | 2 + ...c5431574-a9e1-4366-ad33-534acf1e9875.jsonl | 17 + ...d7545cff-76d5-4261-93a3-d3400a7dc4a5.jsonl | 2 + ...de5172b9-c67e-45ff-a16c-4a2a5be772ec.jsonl | 5 + ...dedb9c5f-4727-4089-8966-624d78fcd7da.jsonl | 1 + ...e98a2fdd-8578-4771-9caf-bdf140de9c2e.jsonl | 7 + ...ee73daeb-1377-486d-9bdb-fbe8254ca8d9.jsonl | 7 + shortdeck_server/main.py | 157 +++- shortdeck_server/random_cli.py | 1 + .../test_game.cpython-313-pytest-8.4.2.pyc | Bin 6639 -> 0 bytes shortdeck_server/tests/test_game.py | 33 - waitress_server.py | 75 ++ 69 files changed, 2753 insertions(+), 97 deletions(-) create mode 100644 __init__.py create mode 100644 __pycache__/__init__.cpython-313.pyc create mode 100644 __pycache__/demo_server.cpython-313.pyc create mode 100644 __pycache__/simple_test_server.cpython-313.pyc create mode 100644 client/index.html create mode 100644 client/simple.html create mode 100644 client2_random_agent.py create mode 100644 shortdeck_arena/__init__.py create mode 100644 shortdeck_arena/__pycache__/__init__.cpython-313.pyc create mode 100644 shortdeck_server/__init__.py create mode 100644 shortdeck_server/__pycache__/__init__.cpython-313.pyc create mode 100644 shortdeck_server/__pycache__/main_package.cpython-313.pyc create mode 100644 shortdeck_server/data/0f9dbc71-050b-445b-bd3c-8ff31baec1fc.jsonl create mode 100644 shortdeck_server/data/106221b0-6463-4598-842b-008ce3900934.jsonl create mode 100644 shortdeck_server/data/19bdd797-0603-45d9-934d-f7abdb30ca71.jsonl create mode 100644 shortdeck_server/data/2c24ddb9-581f-44df-b14e-0bb904d918e1.jsonl create mode 100644 shortdeck_server/data/39f51229-8c0a-4a53-b6cf-e21d9e9e49b2.jsonl create mode 100644 shortdeck_server/data/49705745-32f4-4161-bc02-4d65fc4a6081.jsonl create mode 100644 shortdeck_server/data/519ef99d-edd2-4d31-956b-c39e7bc72506.jsonl create mode 100644 shortdeck_server/data/52482f92-1af8-4b20-8efc-3ca2188350c1.jsonl create mode 100644 shortdeck_server/data/5be4fc33-5c99-41cf-a51e-02614f8b8365.jsonl create mode 100644 shortdeck_server/data/6b5b7218-e5d4-4616-b902-f2fee6552578.jsonl create mode 100644 shortdeck_server/data/6efc8ba0-e9b5-40a9-af79-863f92e2619d.jsonl create mode 100644 shortdeck_server/data/6fecc21b-5614-4dae-ab2a-d179772350e9.jsonl create mode 100644 shortdeck_server/data/720fe666-fa9c-4d73-a4b1-247d49e8e2a3.jsonl create mode 100644 shortdeck_server/data/78b6abaf-75a7-4f14-85f0-f27f49ed9a6d.jsonl create mode 100644 shortdeck_server/data/7cfd6443-9bb3-4a7f-b71f-6d21a601ecd9.jsonl create mode 100644 shortdeck_server/data/7f2989fa-63f3-4a0c-ab1e-1262af568162.jsonl create mode 100644 shortdeck_server/data/7f2c27d4-4f40-4056-9cc9-7b9a41c8b440.jsonl create mode 100644 shortdeck_server/data/847df1f7-0470-4086-b3a1-7680ad190f3d.jsonl create mode 100644 shortdeck_server/data/925d78a3-d647-458a-9a74-2200b4199e13.jsonl create mode 100644 shortdeck_server/data/97e7ded5-0930-43e0-b99e-ec1253db0b00.jsonl create mode 100644 shortdeck_server/data/9876a5c4-152a-4e8c-9130-e8d035bf62b5.jsonl create mode 100644 shortdeck_server/data/9d4ef610-012e-48e6-93b0-95344a2b9ab8.jsonl create mode 100644 shortdeck_server/data/9fd090b6-acfd-4483-8bd2-f5565aa466ac.jsonl create mode 100644 shortdeck_server/data/a0fe4e18-ef0b-4426-be59-ef0ed794ce71.jsonl create mode 100644 shortdeck_server/data/a2f1f761-f709-4aa7-8ca7-d73b6eec394c.jsonl create mode 100644 shortdeck_server/data/a49bf62c-0133-4041-a5af-008ed7a6e365.jsonl create mode 100644 shortdeck_server/data/a5cce7d5-7828-4cb1-9731-0d43664cd2e7.jsonl create mode 100644 shortdeck_server/data/aa241ea0-f0e7-4dd6-8f8e-0a74fcb24d25.jsonl create mode 100644 shortdeck_server/data/ab93c6e8-10a4-4032-8a4d-2e44d2fcb2c7.jsonl create mode 100644 shortdeck_server/data/bc07666b-6ae1-4721-82a1-637c102f88cf.jsonl create mode 100644 shortdeck_server/data/c0990ec7-faa1-44a7-9135-be9c1159a55f.jsonl create mode 100644 shortdeck_server/data/c5182b9b-2e3c-4652-a48e-d7e276b384d2.jsonl create mode 100644 shortdeck_server/data/c5431574-a9e1-4366-ad33-534acf1e9875.jsonl create mode 100644 shortdeck_server/data/d7545cff-76d5-4261-93a3-d3400a7dc4a5.jsonl create mode 100644 shortdeck_server/data/de5172b9-c67e-45ff-a16c-4a2a5be772ec.jsonl create mode 100644 shortdeck_server/data/dedb9c5f-4727-4089-8966-624d78fcd7da.jsonl create mode 100644 shortdeck_server/data/e98a2fdd-8578-4771-9caf-bdf140de9c2e.jsonl create mode 100644 shortdeck_server/data/ee73daeb-1377-486d-9bdb-fbe8254ca8d9.jsonl delete mode 100644 shortdeck_server/tests/__pycache__/test_game.cpython-313-pytest-8.4.2.pyc delete mode 100644 shortdeck_server/tests/test_game.py create mode 100644 waitress_server.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..3c373a9 --- /dev/null +++ b/__init__.py @@ -0,0 +1,13 @@ +from .shortdeck_arena import Simulation, Agent, HumanAgent, Card, HandEvaluator, HandRanking +from .shortdeck_server import ArenaGame + + +__all__ = [ + "Simulation", + "Agent", + "HumanAgent", + "Card", + "HandEvaluator", + "HandRanking", + "ArenaGame" +] \ No newline at end of file diff --git a/__pycache__/__init__.cpython-313.pyc b/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ffb240a3bd07d043ff75885ae4bafe4eebb5edf6 GIT binary patch literal 397 zcmaKo%}T>S6ov2PzbVyjbY0v?Ho6rNp{Q7f*0)$6XmJNI#AFJTAfXmo)JB^+ z=uj73>Y+C>du!^`0D}?iLu_9V>}5{mzUp3xJQc=y)s?)>YpL9ECSKl8>Ws%D)BC0n=A^AD4MC7BbYtb=q4Lk$iATa1@%%V_jHj5hD zRLl#;P5A$q8vdO(0#^b*iX?VKJaS2Y&RlFvo*n@JeUW!^Hjx4c%t mQB|j1DUNZdBjyRsmd2Y+2zi3!0g^}9efNUCb>riP-h2Q@<76=a literal 0 HcmV?d00001 diff --git a/__pycache__/demo_server.cpython-313.pyc b/__pycache__/demo_server.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96e92f28875d1126ce0cbc90331bc0637630e45a GIT binary patch literal 8722 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 literal 0 HcmV?d00001 diff --git a/__pycache__/simple_test_server.cpython-313.pyc b/__pycache__/simple_test_server.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..670179105b690cfe98418c0e2f2f1ddfaea95adc GIT binary patch literal 1543 zcmZ`&-D@0G6uoFpM)dn=!jH!=2ft zjR;YMmfB(-j8rK|5iu3C`XJ3ii~mAG1jj34#cWca+>i%fJ$LpaeQ{>)z2|rDIcLr} zzjF_g$rys?j|Wc{-V_n~i-GnNX$c204xu%qB7#&-<)^s|JmD`0L>OUMm=-TcL<(hb zS|)OdA4RI9%2OOsO3G}y?e1_bNvcxh)JQlpDLMuApqo9^X-jJC6#Sh%YJ3o#YKn-& z{zp5}(N31)CwVnBh~5!9R*6zl?K=GyLi!PeN-2o5yR8rZmuHW*+&{I9LR@NE&8XQa z$hRz(#e7e#2nw;i?^fzJKi&KM!`(Z#>NoDzKU?4Z@uMgA*Zz5Ub7$k$&ZD39K3P9Q zu&uwMS8?ob<}=Sz<-G3sXD+=)ldsOrU3&S7fnDEn>^w(PXJ4OHFIuKq!Am;9Gt2Qg z?D-=qCYLdRbIG^-3Z~rnTwbI}y;52Ga%l2rx2@QfxZ2Oj8@!A?y>@PTG2QFaU z#Kc>ciat0uo=Oz)00bBZtRsMKpn8HELwR9_Dpl-xdKuSx;pi~kZ@;W>Y}6lowe#rC zJw#H>76zivo;zJya>%0R>IN=(3l8y3Y%G>MtLj#;#{R5%VOj0;T2TAhz?&>WDQ&3Ri%)Ej3YBtWI+*D5~?iemT%eR^R)!PCda$$ck2&7 zW^@|5t?7nOWrB4NcubK@XjBH$AvUTsL-T0D#CnCrYn%8AO&B!-z2R$qjo4K3e5fvs z`i`$xG}rNI)U!;?Brt3xXXpfYjKA%`sx^TOcE%!*+fo4tanpF)IrF4IbkJa4$WNXN z!}C~`MhL49jg+wuLCrhl7{GoQ-U~3TpoWb4hJ)-tknIin2iTV$40`*5-dxZ>7~}?m zOiwUygbBlA->0^+FYOO?CFBO`lH`ym8qu_>ZrPev8v=)oFTVa}q`rE;exr3yI(<|q z6qcitC!Q-zz&mN39S$#wxZrp`6Y{cBLt^6k^0qMWs~Fvk<$o5(12KMW`h)3J;r8+MbKBx%Lqg(U Gn9_e+g}Ube literal 0 HcmV?d00001 diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..0e2df1e --- /dev/null +++ b/client/index.html @@ -0,0 +1,856 @@ + + + + + + ShortDeck Poker - Professional Client + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/client/simple.html b/client/simple.html new file mode 100644 index 0000000..c62e230 --- /dev/null +++ b/client/simple.html @@ -0,0 +1,585 @@ + + + + + + ShortDeck Poker - Professional Client + + + + + + + + + + + + + + +
+
+ 正在加载... +
+
+ + + + \ No newline at end of file diff --git a/client2_random_agent.py b/client2_random_agent.py new file mode 100644 index 0000000..6bef483 --- /dev/null +++ b/client2_random_agent.py @@ -0,0 +1,243 @@ +#!/usr/bin/env python3 +import requests +import time +import random +import json +import sys +from typing import Dict, List, Optional + +class RandomAgentClient: + def __init__(self, server_url: str = "http://localhost:8001", player_name: str = "RandomBot"): + self.server_url = server_url.rstrip('/') + self.player_name = player_name + self.player_id: Optional[int] = None + self.game_active = False + + def join_game(self) -> bool: + response = requests.post( + f"{self.server_url}/join", + json={"name": self.player_name}, + timeout=5 + ) + + if response.status_code == 200: + data = response.json() + self.player_id = data["player_id"] + print(f" {self.player_name} 成功加入游戏,玩家ID: {self.player_id}") + return True + else: + print(f" 加入游戏失败: {response.status_code} - {response.text}") + return False + + + def get_game_info(self) -> Optional[Dict]: + if self.player_id is None: + return None + + try: + response = requests.get( + f"{self.server_url}/info/{self.player_id}", + timeout=5 + ) + + if response.status_code == 200: + return response.json() + else: + print(f" 获取游戏信息失败: {response.status_code}") + return None + + except requests.RequestException as e: + print(f" 获取游戏信息时连接失败: {e}") + return None + + def get_valid_actions(self) -> List[str]: + if self.player_id is None: + return [] + + try: + response = requests.get( + f"{self.server_url}/valid_actions/{self.player_id}", + timeout=5 + ) + + if response.status_code == 200: + data = response.json() + return data.get("valid_actions", []) + else: + return [] + + except requests.RequestException: + return [] + + def make_random_action(self, valid_actions, game_info) -> bool: + if not valid_actions: + print(" 没有可用动作") + return False + + # 随机选择一个动作, 弃牌率高, todo + action = random.choice(valid_actions) + amount = 10 + + if action in ["raise", "bet"]: + player_stack = game_info.get("stacks", [1000])[self.player_id] if self.player_id < len(game_info.get("stacks", [])) else 1000 + min_bet = max(game_info.get("current_pot", [0])) if game_info.get("current_pot") else 10 + max_bet = min(player_stack, player_stack // 2) # 最多下注一半筹码 + + if max_bet > min_bet: + amount = random.randint(min_bet, max_bet) + else: + amount = min_bet + + + payload = { + "player_id": self.player_id, + "action": action, + "amount": amount + } + + response = requests.post( + f"{self.server_url}/apply_action", + json=payload, + timeout=5 + ) + + if response.status_code == 200: + action_str = f"{action}" + (f" {amount}" if amount else "") + print(f" {self.player_name} 执行动作: {action_str}") + return True + else: + print(f" 动作执行失败: {response.status_code} - {response.text}") + return False + + + + def is_my_turn(self, game_info: Dict) -> bool: + if not game_info or self.player_id is None: + return False + + current_turn = game_info.get("current_turn", -1) + + return current_turn == self.player_id + + def display_game_state(self, game_info: Dict): + if not game_info: + return + + print(f"\n游戏状态:") + print(f" 阶段: {game_info.get('stage', 'unknown')}") + print(f" 总奖池: {game_info.get('total_pot', 0)}") + print(f" 当前轮到: 玩家 {game_info.get('current_turn', -1)}") + print(f" 我的ID: {self.player_id}") + print(f" 我的手牌: {game_info.get('player_cards', [])}") + print(f" 公共牌: {game_info.get('board_cards', [])}") + + stacks = game_info.get('stacks', []) + if stacks and self.player_id is not None and self.player_id < len(stacks): + print(f" 我的筹码: {stacks[self.player_id]}") + + def wait_for_players(self) -> bool: + print(" 等待其他玩家加入游戏...") + + for _ in range(60): #60S + game_info = self.get_game_info() + if game_info: + players = game_info.get("players", []) + if len(players) >= 2: + print(f" 游戏开始!玩家列表: {players}") + return True + + time.sleep(1) + + print(" 等待超时,未能开始游戏......") + return False + + def game_loop(self): + print(f" {self.player_name} 开始游戏循环......") + + consecutive_errors = 0 + + while self.game_active and consecutive_errors < 5: + try: + game_info = self.get_game_info() + if not game_info: + consecutive_errors += 1 + time.sleep(2) + continue + + consecutive_errors = 0 + + self.display_game_state(game_info) + + if self.is_my_turn(game_info): + print(f" 轮到 {self.player_name} 行动...") + + valid_actions = self.get_valid_actions() + if valid_actions: + print(f"可用动作: {valid_actions}") + self.make_random_action(valid_actions, game_info) + else: + print(" 没有可用动作") + + stage = game_info.get("stage", "") + if stage in ["game_over", "showdown", "finished"]: + print(" 游戏结束") + self.show_final_results(game_info) + time.sleep(3) + print(" 准备下一轮游戏...") + continue + + time.sleep(2) + except Exception as e: + print(f" 游戏循环出错: {e}") + consecutive_errors += 1 + time.sleep(2) + + if consecutive_errors >= 5: + print(" 连续错误过多,退出游戏") + + def show_final_results(self, game_info): + print("\n 游戏结果:") + # todo + response = requests.get(f"{self.server_url}/showdown", timeout=5) + if response.status_code == 200: + showdown_data = response.json() + print(json.dumps(showdown_data, indent=2)) + + + def run(self): + print(f" 启动 RandomAgent 客户端: {self.player_name}") + print(f" 连接服务器: {self.server_url}") + + if not self.join_game(): + return False + + if not self.wait_for_players(): + return False + + self.game_active = True + self.game_loop() + + return True + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description="RandomAgent") + parser.add_argument("--server", default="http://localhost:8001") + parser.add_argument("--name", default="RandomBot") + parser.add_argument("--seed", type=int) + + args = parser.parse_args() + + if args.seed: + random.seed(args.seed) + print(f" 设置随机种子: {args.seed}") + + client = RandomAgentClient(args.server, args.name) + + success = client.run() + sys.exit(0 if success else 1) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/shortdeck_arena/__init__.py b/shortdeck_arena/__init__.py new file mode 100644 index 0000000..543e9bd --- /dev/null +++ b/shortdeck_arena/__init__.py @@ -0,0 +1,19 @@ +from .simulation import Simulation +from .agent import Agent, HumanAgent +from .game_stage import GameStage, BlindConfig +from .hand_evaluator import HandEvaluator +from .hand_ranking import HandRanking +from .card import Card +from .side_pot import SidePot + +__all__ = [ + "Simulation", + "Agent", + "HumanAgent", + "GameStage", + "BlindConfig", + "HandEvaluator", + "HandRanking", + "Card", + "SidePot" +] \ No newline at end of file diff --git a/shortdeck_arena/__pycache__/__init__.cpython-313.pyc b/shortdeck_arena/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f322709274bad8c307024366f61c7868e78c1b8d GIT binary patch literal 567 zcmYL_&5G1O5XY4wT-aoTjlKBD^RICKf zkeyiXl^*xe=K%&T_REmZaKG+?|)tZnvl-{>6X-jxww0!$^=5R?QqPb>s?ahHp;$J>D%mfQUbR$hX5~bJ- z+6_065VG%u_zF8>0rTkD+5E$Rt8pV2&3s%AsOx62+B+e!QF1Osr#daf>E@$}AFqdc t+c!_}Hnp%TAMcX<@)=_j+`EGNS8zH(F~NfgZcT9KcaUb@rwDJ-uRnP0lf(c3 literal 0 HcmV?d00001 diff --git a/shortdeck_arena/__pycache__/card.cpython-313.pyc b/shortdeck_arena/__pycache__/card.cpython-313.pyc index 0949e2695c660e5ef445caaeae8c575ef40956fd..4556eb4d2c600d2ab4353b1657838dbbeb973e5d 100644 GIT binary patch delta 292 zcmeB@x-7}}nU|M~0SE+DUuE25naC$mp8@1eWe8>nX7pz8Vk}}*0I`|8nY@^bn89pj zZx%1sB31Y}ZaR$s delta 321 zcmcaC*(JsInU|M~0SGP!J{VhCmoX7XnAVk%-%0I`|9nY~zw zSio!+Z&ok1A~ppE2?iyGU{)!HV73?*Q)ZA!3=Bo=U{Q9UC%1(A**~q9g`4dYGquS(r)(MP4lh|%B zYEQn&*376gIhOqlqrqe?j@gXHn~!mrGBKKM{=>z=2$W~#vE<^q#U3A@lAjzOKiQrq cNHh^>EF%yX8v}_C%#4hTHyN}iFXk}-07Aw^;{X5v diff --git a/shortdeck_arena/__pycache__/game_stage.cpython-313.pyc b/shortdeck_arena/__pycache__/game_stage.cpython-313.pyc index 75546cdc56a6b3a046f315ab6676b380f8b25ee9..b879fc9ae77d54bf17324979ff8d30ade353bbac 100644 GIT binary patch delta 350 zcmaDNzfGR^GcPX}0}v>sJkNNvk=K)*(P-jbH9@Xmb}5D|mLkqzjv}sfPEGE~)7UL1 z-(_!N;yBoIxq{Y4a_nHDPk-Ft7R!ln7oHiQ!f~#7;bq{B8Y1PBEU|T r09! delta 378 zcmdlc|3semGcPX}0}vzxJkPkdk=K)*(Q4vdEm4jlu3(;EPAP^gmLl$8t|FdvZcX0F zee9Nex7f=QGfOh_(r+>6mzGRE&fdhxJK2lF3Mdio=o#Ya=YEUXKQv@=3x@`y*5tJu zay&Qq#2egiaPc=de`lF|mg60F2++QwP!JKe`55PMMu8|0TLwfJf{5tNbGZ*PGDb~~ z=M|NU1BoO82~CzFQ6P1TwYVfPJ+&wXBpy3?67QOTFc1@L9>`=rO=gH$U{jfZBARSP zU@Ohw>cA|pHZaQ+q=>Nytd^xHWpW>%rd~KmG2HT^R1nt&M1Y+r1!9STh(Itg`6-`1 fW8h>_etUVa0IH%}95%W6DWy57c12l}i}{@aZkJa3 diff --git a/shortdeck_arena/__pycache__/hand_evaluator.cpython-313.pyc b/shortdeck_arena/__pycache__/hand_evaluator.cpython-313.pyc index 6b61c539299069d1c31305180c6b3d2ec9947d1c..fd917b973ebee69137c6060ac07465c1d7e67fa5 100644 GIT binary patch delta 315 zcmZ2ycFL6RGcPX}0}v>sJkQ`4-pKb)l+kZ8uh;=bhRNr|R2f+(e-YD?3uQ872xiM> zw2EM0NEBjV2xg4t0BHh&Ag;-N;^Kipz$yTHfQlJVXZm||6=B1|=iGl<`Zn?!2WI35vB1e5ckki2ML{NMu z>tzYMU91~eu1jiPk<{MFdQrme1j|K1-ww71a!QkzNLVx8nEXJ(LGuB(;3ZMj%iO9r zgvIBG%om?2KEd_^kHQUpsh^)z86@qCS%F4&i8?7w4wQVOCd?{5!(;)=OsfwJK;{b7 q4J;c{HgH|kvi=O>e`aQ26Z*^~JULlv4}S(Dqx2^R5Lu)MGy(wD%ur$g delta 446 zcmX?Qy3UO6GcPX}0}$}|KhKyex{>dnC}YB8Ua7lAww{GHltMp14E(^14A%lG}suBTo4aL1u|*Eq{5KSQOu;kP|TFan8u*VS!xE9 zf3~>c+5Dx?W~_fYVcC-%yIwBb^>poo_j`JtOQ6vl^1VCJnt6zeg^^y-rXfnC^X|fmT1DQpt zK;jl_QDRMwmJ|Z5=eHzGaVEDquAS5waOG29U z0~>?9@?;MQYsLqYTO=F|zi=_|@OPATTVImWyUeY3Ls)!{$b5;J5)w^??D%T%o#wWkbpau8UgMpF#Z3%nWQo ZpPA$*|CijuU&6>J{fPlY7AXRa001|7caH!7 diff --git a/shortdeck_arena/__pycache__/hand_ranking.cpython-313.pyc b/shortdeck_arena/__pycache__/hand_ranking.cpython-313.pyc index ddce3d14d315333fdbfc0c1bec3ddd65afecca72..885a8ac869a6aac273c976d6783386a2ad5da70b 100644 GIT binary patch delta 240 zcmeA)yrjGa&4j4#}Q2{^f*tcuxVw#nROv1CCkS&{QXhP+Ll7$oMFDs{hk zl5c0vrG{XK1`A0VuC;J&DS#2uLaV@2Ll40dS|>+{g5Ekp@`;)aF4YE@)~MCEJ`eEY z8H%DFgjlfw5HD>eO`!8`Yo<*c^YF3^+W+l{2YR3oHp^$SS|Kx- zXiTBTd8Uw4&%zPvQA8!;7-BDxx^Dh268f6q1wZz+pRD{lOJO-HELlc{VPV|%rgWlo zK`PrO)O0v31$TNkwKT0f6;)eOQq{MIs_1LQ54(imaB$c!DbsQh79*q;^h_9Ns$mOy znVm4%gB6-1$&KU?7jhA<+vD$!3l-4?`fl`gCGqxbLqxciXJn2PB+_TA*z#H_pmq4d!}k zVK2=N$7$G7od_H?6+5V2MzkT^h)zI6+v5wUy)0rbpe>Bbjv_&~FQ!mkNsOnuJcJVC sIbC_okbJD!R diff --git a/shortdeck_arena/__pycache__/side_pot.cpython-313.pyc b/shortdeck_arena/__pycache__/side_pot.cpython-313.pyc index 6db3e822c004c18aa4686235555a72f7df5b921b..e9f87f4f4937e2342c10d1914d79e6b6d3848d06 100644 GIT binary patch delta 1058 zcmZXSO>7fa5Xax_m)Gmvb;z!1`Zs0samDS9>}2=5F#l^APYebz0gDDCP8h=rSq2d)II!mX8!YL z-t27Mn@`(omSr${`a6C*UA3;;ci-Pf-q-9n=Okma%)?NB4J}m#VC3Ph(dBKU*Nk7A+wfYUDEH@K)pp7)9Ug zqK0$kJLZTeE5^9Qp5i@o2h{MDnS%S6w9;?VRnHDj!XU|0H1{}dHLpxa<2GXvmSknM ztmM@Usp1JTb}U@9_5(b?pX?-c8;<6z7Sd>J(THbpKAMCvyc696KE8_f9OxCQ#>L#h zN2$qY3Kw2~qX7|nOXwzdg?)rj(?2Vf%cb&kg^!9@7E28y@HT$maCGk>3RM0e{6*_< zVpV;`iQmY6m8}k~q&pv{2Y*QqK8#NiZ_0PhEbsT{<>mBXb!;g<`OIm?{HEKxT9~`7 z-pd*i)#%1*7fa+}W7UNCzRG5*dMiBCu6?Hw78BM`MqBi>p$v94UfIm}CemrhV14ST znPP#{TAw%enMHA@HUeDWTK@z6=)J5W z+$(HVlGHuxx=b)Ks=Gc3p!Tn8O={xhZb|KVeY_Qi-4QJ~--6fN1We(#ZmK;5opnZ7 UlbIB$OJx1&<^g(EnP71AAC)lh3;+NC delta 1500 zcmY*ZT})I*6rQ<%d-v|$AJ`Rvf-bVSTolZE?eHU@NX>cG22u zAg1ER6n{FRqVcblw0)sc8k<6G%R^uK&}e;-Zu?*pFAHxQptZC~(=&IqiTB~V=Wot@ zbIzH$?$2nB1-o5A@GWjhcRzHVbNtx11+*cw2NA3z!s(dsWk~0Up!0h~UGRff7eSIt z$wDMu2F+?}N+BW^-A3dtRkNoodNdqqJCK;Oz?$A%fZ1=qo*BC_Gjw}qa5OzhXRf`U z;-j%dN(${i&>KsF8eV%HTD9{jfn=TZhw*?@m>Y^!Gbh|E@lB_#)iz!)k8KM>4N^D(<=1e)Bl5Ppb zLR}Fu=VsiU|8q}|-b|kzFor+v#0b%0{tV8enlR$yG(LO6(c8w|q4ep`jL|zYr-qCZ zBZPy+tr{k)>94|0wGgy;H9$XlG`>*`VJy(=QXdxSO3UtMsh3q>F_Kq|$%$;WvUO67 z>l2SBPCrfDKbg%vck$;wF>`6>s6oiCxl{rJHMTyZK`MUP9e@!p*ZJ8&2Xxi&@Sx2b+9H3jcBnU)GoAf zEpSvD@}igsez6?9>@y<*S-%@i3W{ zDJ4HkPnwx6NE@Avcq1Kj?s{zp7~=l|`~|&JktZ)HKXNa>SbM%U+3?6;@z7uQv%hWu z;rsynZ}8KF#W#xY7p{B4qk^LQ{<>syhWY-Kkf(_HTq7@*B2RH#)X|t)DwNn7%vubl9I=FE*Iw?1`N{ zkr08IyqFVE4>RJc0O0b_2RVM^tEx4dufGap!3dH#01 z8tqK%hR0{E7vN1|286%^MJ!;!?4ptv7!)xmX22dfvW7te1NQuoT@2o0z#b>!Wx#G2 zVPj1gSpaAedr0E!NCW5>pHKMA-7R7 mb9m_{cRtL*8*X2zj4Lt-V1Y-REyIEIB(DqO%6Y`lT>2lc?6RH! diff --git a/shortdeck_arena/__pycache__/simulation.cpython-313.pyc b/shortdeck_arena/__pycache__/simulation.cpython-313.pyc index 1747fda18748d0643a102e5d6b6c5cdb20a52d65..e71049373af8f9702c9a9ffd11daeda3b40763f1 100644 GIT binary patch delta 8618 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 delta 7305 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 V)(STGyT4jnpFm8vIZ9cl{|DXO&;9@a diff --git a/shortdeck_arena/card.py b/shortdeck_arena/card.py index eb4ba5c..de52533 100644 --- a/shortdeck_arena/card.py +++ b/shortdeck_arena/card.py @@ -1,4 +1,3 @@ -"""ShortDeck card model (6-A, 36 cards).""" from __future__ import annotations from enum import IntEnum diff --git a/shortdeck_arena/hand_ranking.py b/shortdeck_arena/hand_ranking.py index c6cd0d5..093faea 100644 --- a/shortdeck_arena/hand_ranking.py +++ b/shortdeck_arena/hand_ranking.py @@ -73,6 +73,7 @@ class HandRanking: def get_strength(self) -> int: # 返回牌力 还是 牌型+点数 # 基础强度 = 牌型强度 * 1000000 + # todo strength = self.hand_type.strength * 1000000 for i, rank in enumerate(self.key_ranks): diff --git a/shortdeck_arena/side_pot.py b/shortdeck_arena/side_pot.py index bad36a6..3630b6f 100644 --- a/shortdeck_arena/side_pot.py +++ b/shortdeck_arena/side_pot.py @@ -99,6 +99,5 @@ class SidePotManager: return winnings def reset(self): - """重置边池管理器""" self.pots.clear() self.player_total_investment.clear() \ No newline at end of file diff --git a/shortdeck_arena/simulation.py b/shortdeck_arena/simulation.py index ca48dc7..1416818 100644 --- a/shortdeck_arena/simulation.py +++ b/shortdeck_arena/simulation.py @@ -42,6 +42,9 @@ class Simulation: self.side_pot_manager = SidePotManager() self.stacks: List[int] = [1000] * len(agents) # 默认筹码 + # 用于结算 + self.hand_completed = False + self.new_round() def new_round(self): @@ -54,6 +57,7 @@ class Simulation: self.current_stage = GameStage.PREFLOP self.player_states = [PlayerState.ACTIVE] * len(self.agents) self.betting_round_complete = False + self.hand_completed = False # 重置完成标志 # 重置下注状态 self.pot = [0] * len(self.agents) @@ -141,25 +145,19 @@ class Simulation: return max(0, max_pot - self.pot[pid]) def get_min_raise_amount(self, pid) -> int: - """最小加注金额""" call_amount = self.get_call_amount(pid) min_raise = call_amount + max(self.last_raise_amount, self.blind_config.big_blind) return min_raise def get_max_bet_amount(self, pid) -> int: - """最大下注金额(剩余筹码)""" if pid >= len(self.stacks): return 0 return self.stacks[pid] def is_all_in_amount(self, pid, amount) -> bool: - """检查是否为allin""" return amount >= self.stacks[pid] def validate_bet_amount(self, pid, action, amount) -> tuple[bool, str, int]: - """ - 验证下注金额合法性 - """ if pid >= len(self.stacks): return False, "无效玩家", amount @@ -178,12 +176,16 @@ class Simulation: if call_amount == 0: return False, "不需要跟注", 0 - # All-in call if call_amount >= available_stack: return True, "", available_stack return True, "", call_amount + elif action == "allin": + if available_stack <= 0: + return False, "没有筹码进行 all-in", 0 + return True, "", available_stack + elif action in ["bet", "raise"]: if amount <= 0: return False, "无效下注金额", amount @@ -207,6 +209,9 @@ class Simulation: return False, "无效行为", amount def get_available_actions(self, pid: int) -> dict: + if self.current_stage in [GameStage.FINISHED, GameStage.SHOWDOWN]: + return {"can_act": False, "reason": "游戏已结束" if self.current_stage == GameStage.FINISHED else "摊牌阶段"} + if pid != self.current_turn: return {"can_act": False, "reason": "不是你的回合"} @@ -214,7 +219,7 @@ class Simulation: return {"can_act": False, "reason": "无效玩家"} state = self.player_states[pid] - if state in [PlayerState.FOLDED, PlayerState.ALLIN, PlayerState.OUT]: + if state in [PlayerState.FOLDED, PlayerState.ALLIN]: return {"can_act": False, "reason": f"Player state: {state}"} call_amount = self.get_call_amount(pid) @@ -225,7 +230,7 @@ class Simulation: "can_fold": True, "can_check": call_amount == 0, "can_call": call_amount > 0 and call_amount < available_stack, - "can_bet": max(self.pot) == 0 and available_stack > 0, + "can_bet": call_amount == 0 and available_stack > 0, "can_raise": call_amount > 0 and available_stack > call_amount, "can_allin": available_stack > 0, "call_amount": call_amount, @@ -241,27 +246,33 @@ class Simulation: """ 检查当前下注轮是否完成 """ - active_players = [i for i, state in enumerate(self.player_states) - if state in (PlayerState.ACTIVE, PlayerState.CALLED)] + # 首先检查是否只剩一个未弃牌的玩家 + non_folded_players = [i for i, state in enumerate(self.player_states) + if state != PlayerState.FOLDED] - if len(active_players) <= 1: + if len(non_folded_players) <= 1: + return True + + active_or_allin_players = [i for i, state in enumerate(self.player_states) + if state in (PlayerState.ACTIVE, PlayerState.CALLED, PlayerState.ALLIN)] + + all_allin_or_folded = all(state in (PlayerState.ALLIN, PlayerState.FOLDED) + for state in self.player_states) + if all_allin_or_folded: return True - # 检查所有active玩家是否都已投入相同金额,且所有人都已经行动过 max_pot = self.get_current_max_bet() # 统计还需要行动的玩家 players_need_action = [] - for i in active_players: + for i in active_or_allin_players: # allin if self.player_states[i] == PlayerState.ALLIN: - continue - # 投入金额不足的玩家需要行动 + continue if self.pot[i] < max_pot: players_need_action.append(i) - # Active状态的玩家如果还没有在本轮行动过,也需要行动 elif self.player_states[i] == PlayerState.ACTIVE: - # 在翻前,大盲玩家即使投入了足够金额,也有权行动一次 + if (self.current_stage == GameStage.PREFLOP and i == self.blind_config.get_bb_position(len(self.agents), self.dealer_position)): # 检查大盲是否已经行动过(除了盲注) @@ -289,6 +300,12 @@ class Simulation: self.complete_hand() return + + if self.current_stage == GameStage.SHOWDOWN: + self.current_stage = GameStage.FINISHED + self.complete_hand() + return + # 重置下注轮状态 self.betting_round_complete = False @@ -306,6 +323,7 @@ class Simulation: def get_next_active_player(self, start_pos) -> Optional[int]: for i in range(len(self.agents)): pos = (start_pos + i) % len(self.agents) + # 只有ACTIVE状态的玩家可以行动,ALLIN和FOLDED的玩家不能行动 if self.player_states[pos] == PlayerState.ACTIVE: return pos return None @@ -313,7 +331,7 @@ class Simulation: def get_side_pots(self) -> List: active_players = [ i for i, state in enumerate(self.player_states) - if state not in [PlayerState.FOLDED, PlayerState.OUT] + if state not in [PlayerState.FOLDED] ] return self.side_pot_manager.create_side_pots(active_players) @@ -375,6 +393,29 @@ class Simulation: raise ValueError("跟注金额>0, 无法过牌,需要跟注或弃牌") self.player_states[pid] = PlayerState.CALLED + elif action == "allin": + # all-in + actual_amount = self.stacks[pid] + if actual_amount <= 0: + raise ValueError("没有可用筹码进行 all-in") + + self.player_states[pid] = PlayerState.ALLIN + self.pot[pid] += actual_amount + self.stacks[pid] = 0 + self.total_pot += actual_amount + self.side_pot_manager.add_investment(pid, actual_amount) + + # 更新最后加注金额(如果 all-in 金额超过跟注金额) + call_amount = self.get_call_amount(pid) + raise_amount = actual_amount - call_amount + if raise_amount > 0: + self.last_raise_amount = raise_amount + self.min_raise = raise_amount + + for i, state in enumerate(self.player_states): + if i != pid and state == PlayerState.CALLED: + self.player_states[i] = PlayerState.ACTIVE + elif action in ("bet", "raise"): if amount is None: raise ValueError(f"{action} 需要指定金额") @@ -446,7 +487,6 @@ class Simulation: def evaluate_player_hand(self, pid: int) -> Optional[HandRanking]: - """评估玩家手牌强度""" if pid >= len(self.agents): return None @@ -454,22 +494,17 @@ class Simulation: return None try: - # 获取玩家手牌 player_cards = self.player_cards(pid) - # 获取公共牌 board_cards = self.board_cards(self.current_stage.value) - # 至少需要5张牌才能评估 all_cards = player_cards + board_cards if len(all_cards) < 5: return None - - # 如果正好5张牌,直接评估 + if len(all_cards) == 5: return HandEvaluator.evaluate5Cards(all_cards) - - # 如果超过5张牌,找最佳组合 + return HandEvaluator.evaluateHand(all_cards) except Exception as e: @@ -478,7 +513,7 @@ class Simulation: def get_active_players(self) -> List[int]: return [i for i, state in enumerate(self.player_states) - if state not in [PlayerState.FOLDED, PlayerState.OUT]] + if state not in [PlayerState.FOLDED]] def is_hand_complete(self) -> bool: active_players = self.get_active_players() @@ -522,9 +557,8 @@ class Simulation: winner_id = list(winners.keys())[0] return {winner_id: self.total_pot} - # 多人摊牌,使用边池分配 + # 多人摊牌 if len(winners) > 1: - #转换HandRanking为数值强度 hand_strengths = {} for pid, ranking in winners.items(): if ranking is not None: @@ -539,16 +573,31 @@ class Simulation: def complete_hand(self) -> Dict: if not self.is_hand_complete(): return {"complete": False, "message": "牌局未结束"} + + if self.hand_completed: + return { + "complete": True, + "winners": [], + "winnings": {}, + "final_stacks": self.stacks.copy(), + "showdown_hands": {}, + "message": "手牌已完成" + } winners = self.determine_winners() winnings = self.distribute_pot() - # 更新筹码 for pid, amount in winnings.items(): if pid < len(self.stacks): self.stacks[pid] += amount + + self.total_pot = 0 + self.pot = [0] * len(self.agents) + self.side_pot_manager.reset() + self.current_stage = GameStage.FINISHED + self.hand_completed = True result = { "complete": True, @@ -557,14 +606,22 @@ class Simulation: "final_stacks": self.stacks.copy(), "showdown_hands": {} } + + active_players = [i for i, state in enumerate(self.player_states) + if state != PlayerState.FOLDED] - # 摊牌信息 - for pid, ranking in winners.items(): - if ranking is not None: + for pid in active_players: + player_hand = self.player_cards(pid) + if len(player_hand) >= 2: + evaluator = HandEvaluator() + board_cards = self.board_cards() + ranking = evaluator.evaluate(player_hand, board_cards) + result["showdown_hands"][pid] = { - "cards": [str(card) for card in self.player_cards(pid)], - "hand_type": ranking.hand_type.type_name, - "description": str(ranking) + "cards": [str(card) for card in player_hand], + "hand_type": ranking.hand_type.type_name if ranking else "无牌型", + "description": str(ranking) if ranking else "无效手牌", + "is_winner": pid in winners } return result \ No newline at end of file diff --git a/shortdeck_arena_history.jsonl b/shortdeck_arena_history.jsonl index 68383b6..1b4ab7b 100644 --- a/shortdeck_arena_history.jsonl +++ b/shortdeck_arena_history.jsonl @@ -4,3 +4,121 @@ {"history": [{"pid": 0, "action": "check", "amount": null}], "players": ["Agent0", "Agent1"], "player_cards": ["Ac6s", "8hQs"], "board": "9s8s9h7cJh"} {"history": [{"pid": 0, "action": "check", "amount": null}], "players": ["Agent0", "Agent1"], "player_cards": ["Kc6c", "9hKs"], "board": "8dJs7h7dTs"} {"history": [{"pid": 0, "action": "check", "amount": null}], "players": ["Agent0", "Agent1"], "player_cards": ["AhTd", "QcTc"], "board": "9hKdKcQh7h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "bet", "amount": 269}], "players": ["Agent0", "Agent1"], "player_cards": ["AsAd", "8dJc"], "board": "7s8cKcJdTh"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "bet", "amount": 474}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["6s9s", "Ks7c", "6hQs", "6cAd"], "board": "7hQh7d8dAs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 3, "action": "bet", "amount": 486}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["QsAs", "6sAc", "6hKd", "Tc7c"], "board": "7dTdQcKsKc"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["AhTc", "As9c"], "board": "9hKd8sJc7d"} +{"history": [{"pid": 0, "action": "bet", "amount": 123}], "players": ["Agent0"], "player_cards": ["TdKs"], "board": "AhQs7c9hQc"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 4}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["AdKd", "JhQc", "7d7c"], "board": "Kh9c7hTc8h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}], "players": ["Agent0", "Agent1"], "player_cards": ["Qh6s", "Ac9c"], "board": "QdKcKdQs7h"} +{"history": [{"pid": 0, "action": "bet", "amount": 477}], "players": ["Agent0"], "player_cards": ["9d6d"], "board": "KdKsQdKhJs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}], "players": ["Agent0", "Agent1"], "player_cards": ["TcJs", "KcAd"], "board": "Qh6s7dTd8h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["As9d", "AhQs", "Ad6d"], "board": "6s6h9hAc8h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["ThAh", "KsJd"], "board": "Js8sTc6hTd"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["TcAh", "Kh8d", "TdKc"], "board": "Jd8hJs9h7h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}], "players": ["Agent0", "Agent1"], "player_cards": ["7hTh", "QsTd"], "board": "JcKc9cAh9s"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["8s6h", "7sKd", "TdJs"], "board": "QhJdJh7d7c"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["KhQh", "7cJc"], "board": "AdAh7sQsTc"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8c9d", "Ah8d"], "board": "6c6dTsQsJs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["TdJs", "9cQd"], "board": "8cTc8sAs9s"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}], "players": ["Agent0", "Agent1"], "player_cards": ["Qc7h", "QsAc"], "board": "Jc8hQhJh6s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}], "players": ["Agent0", "Agent1"], "player_cards": ["Th7s", "Ac6c"], "board": "QcKc7dQs8d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}], "players": ["Agent0", "Agent1"], "player_cards": ["Kc6s", "JdAc"], "board": "Th8s7c9h9c"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}], "players": ["Agent0", "Agent1"], "player_cards": ["7sTh", "Kh6c"], "board": "7cKdKcAcJd"} +{"history": [{"pid": 3, "action": "small_blind", "amount": 1}, {"pid": 4, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}], "players": ["Agent0", "Agent1", "Agent2", "Agent3", "Agent4"], "player_cards": ["Ts8c", "9dJs", "As6d", "Kd8s", "Tc8d"], "board": "QdThQcAdTd"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Qc7s", "7hJh"], "board": "Jd9sTcQh6h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 276}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["7dTc", "9d6d", "7cAs"], "board": "Qc6h8c9sTs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 310}], "players": ["Agent0", "Agent1"], "player_cards": ["Td6s", "9h9d"], "board": "QcKs6dKh9s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Td7c", "Qh7s"], "board": "8dKs9dTsJs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8cKc", "7d6h"], "board": "9dTcJh6d7h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}], "players": ["Agent0", "Agent1"], "player_cards": ["Ad6h", "8h7s"], "board": "Ts6c8cThAs"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["9s9d", "AsTh", "7d9h", "Kh7s"], "board": "7c6dKd6hJh"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 4, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3", "Agent4"], "player_cards": ["9cKc", "AhQc", "7hQd", "Ac8h", "JsTd"], "board": "QhQsTcTsKh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}], "players": ["Agent0", "Agent1"], "player_cards": ["Qh8c", "6sAd"], "board": "9s9h7h6h7c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Tc8c", "As8s"], "board": "Qs7cJd7dQh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Ah7d", "KcKd"], "board": "6cQdQhTh8c"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 13}], "players": ["Agent0", "Agent1"], "player_cards": ["KdTs", "8s6h"], "board": "ThKhJsAc8d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Ac7c", "Jc9h"], "board": "JdAsQh6hKh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Ks8s", "Qh9h"], "board": "8cTd7cJdAs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 15}], "players": ["Agent0", "Agent1"], "player_cards": ["8s6h", "9dTh"], "board": "JdJh9c8cTc"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 33}], "players": ["Agent0", "Agent1"], "player_cards": ["Qh8c", "TcAd"], "board": "9dTdJdJh6s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 22}], "players": ["Agent0", "Agent1"], "player_cards": ["8cTd", "9sKd"], "board": "8h6d7cTsKc"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["KdKc", "Td7s", "TsQd"], "board": "9hAh7dAsAd"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["8sAs", "Ac6d", "8d9s", "Kh7s"], "board": "6cJdTs8cTh"} +{"history": [{"pid": 3, "action": "small_blind", "amount": 1}, {"pid": 4, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3", "Agent4"], "player_cards": ["7c6d", "8d9d", "JdQs", "KsAs", "JsAd"], "board": "Td9c9sQhQd"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["9cQs", "8cQc"], "board": "9h9sThAhJs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6d6s", "9s8d"], "board": "7hJdAhTd6h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Tc9h", "AsKs"], "board": "ThKdKc8cAd"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Kc9d", "8h7c"], "board": "Jc7hJhQsJs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}], "players": ["Agent0", "Agent1"], "player_cards": ["6cAd", "JcJh"], "board": "QcQh9cQd8c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Qc9s", "9cTh"], "board": "Ac8sKhTd6s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}], "players": ["Agent0", "Agent1"], "player_cards": ["KhTc", "9cQs"], "board": "7sTdAs8d9h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6dQd", "AhTd"], "board": "9dJh7sAsQh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6hQc", "JcJh"], "board": "Qh6c7c9c6s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}], "players": ["Agent0", "Agent1"], "player_cards": ["8cTs", "KdTd"], "board": "8dJc9s9cQd"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}], "players": ["Agent0", "Agent1"], "player_cards": ["Ad9d", "Ah7d"], "board": "8dTsJc9s7c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}], "players": ["Agent0", "Agent1"], "player_cards": ["TsQh", "7dQd"], "board": "8h6sTcJdQs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}], "players": ["Agent0", "Agent1"], "player_cards": ["TcTd", "AhKc"], "board": "6s9cAcJs7s"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}], "players": ["Agent0", "Agent1"], "player_cards": ["Ts8d", "QdQs"], "board": "TcJdKhJs7c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}], "players": ["Agent0", "Agent1"], "player_cards": ["Qc7h", "Jd7s"], "board": "8c9sAhQdQh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}], "players": ["Agent0", "Agent1"], "player_cards": ["8d9h", "6s8c"], "board": "Tc9d6dQsKs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["7hAs", "JdTc"], "board": "6sTd8cQdKh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 118}], "players": ["Agent0", "Agent1"], "player_cards": ["JdTh", "TdJh"], "board": "Qh7dKc8sAs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8dKs", "Qh9h"], "board": "Td7c8h9cKd"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}], "players": ["Agent0", "Agent1"], "player_cards": ["Qh6h", "Qc9d"], "board": "7hJsTd7cKh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["7hTs", "As9h"], "board": "6d6c8cJs7d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}], "players": ["Agent0", "Agent1"], "player_cards": ["9hTh", "7c6h"], "board": "8h8d6cQh7d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 108}], "players": ["Agent0", "Agent1"], "player_cards": ["TcAh", "9h9c"], "board": "Qc6hJc7hAc"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}], "players": ["Agent0", "Agent1"], "player_cards": ["7cKd", "8s9c"], "board": "6dQsTs8dTc"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 937}], "players": ["Agent0", "Agent1"], "player_cards": ["JhTd", "Qs6s"], "board": "Qd7c9cQc7d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["TdAh", "JdAd"], "board": "Js9cTc8h7c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8c8h", "Jh7d"], "board": "7cAs9hKdTs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["TsJs", "Kd7c"], "board": "8dKs6h8h9d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 404}], "players": ["Agent0", "Agent1"], "player_cards": ["KhJh", "8cTc"], "board": "Qh7d8sQs6s"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Qh6s", "9s7d"], "board": "6h8cKh8hJh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["AsKc", "QsJc"], "board": "KsQcAd9cTh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1404}], "players": ["Agent0", "Agent1"], "player_cards": ["AsTc", "KhJd"], "board": "9d6h9cQhKs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["JcQh", "8hQc"], "board": "As6h7sTc6c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}], "players": ["Agent0", "Agent1"], "player_cards": ["Ac6s", "9dAh"], "board": "AsTs8h8c7d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}], "players": ["Agent0", "Agent1"], "player_cards": ["As7d", "Kh9h"], "board": "Jh6sJc7h6c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["AsQs", "Qd6d"], "board": "Tc8c8dTdQc"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 663}], "players": ["Agent0", "Agent1"], "player_cards": ["9sQs", "7d6s"], "board": "7cKh7h9d7s"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 554}], "players": ["Agent0", "Agent1"], "player_cards": ["7d9h", "8s7s"], "board": "TsAh8cQdJs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 509}], "players": ["Agent0", "Agent1"], "player_cards": ["Ah8d", "AsKh"], "board": "7h6h7sKc6s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Kh6h", "9cAs"], "board": "9dQs8dKsAd"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 644}], "players": ["Agent0", "Agent1"], "player_cards": ["Kc6s", "Tc8h"], "board": "AsTs6h7hJh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1254}], "players": ["Agent0", "Agent1"], "player_cards": ["AdKs", "Ac7s"], "board": "Td8h7d6h6c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1257}], "players": ["Agent0", "Agent1"], "player_cards": ["8h6s", "KsTc"], "board": "Qc8d8sKh6c"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["7cAd", "6dJh"], "board": "QdQh7hTd8s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6d7d", "TdAh"], "board": "Ad7s8s9cKd"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Kc9s", "TcJc"], "board": "Ad7c6c8s9c"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["9s9c", "QcQs"], "board": "JsJh8h6dTh"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["TsQd", "Ad6s", "8s9d", "6h9s"], "board": "TcKd8dJs7h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["TdAd", "6h8d"], "board": "9h6c9cKdJs"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["QdJc", "9c6s", "9s9h"], "board": "KdAsTsKh7d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["9h8d", "9d9s"], "board": "7sQsAdKd9c"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["QsJd", "KsAd"], "board": "8d6sJs7cKh"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8dQh", "ThQc"], "board": "Ks9cAdTd8h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6hTh", "QcKs"], "board": "As6sJh9c9d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["QhJd", "9s7s"], "board": "Td9d9c8d9h"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Ah6s", "6h7d"], "board": "AdQdQhTs8d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["7hKh", "8dJh"], "board": "TsKcQsKd7d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8s6d", "9sAd"], "board": "Qh8h9c8dTs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["KhQs", "Ah9h"], "board": "Qc8dQhKcAd"} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2", "Agent3"], "player_cards": ["9h7c", "JdQc", "Tc7d", "8c9c"], "board": "Kc6cKs7h7s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 384}], "players": ["Agent0", "Agent1"], "player_cards": ["7sAd", "KsAs"], "board": "QhAcKhTc6d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 4}], "players": ["Agent0", "Agent1"], "player_cards": ["Ts7c", "Td8d"], "board": "KcTh6cAc6d"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 93}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["JhQd", "ThAc", "9cAd"], "board": "Qs6h8cAh7s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["9dJd", "Ad7c"], "board": "KsTdJcAc8h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["Qs9c", "8hKc"], "board": "QdQhJs6sTh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["QsKd", "As7d"], "board": "9s8c7c9c8s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 75}], "players": ["Agent0", "Agent1"], "player_cards": ["Ks6h", "9s7s"], "board": "9d7d6cJd6d"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6cAh", "9cKc"], "board": "6dTcTsAsQs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}], "players": ["Agent0", "Agent1", "Agent2"], "player_cards": ["9c9d", "Kh6d", "9hTc"], "board": "KcJhJcKd7h"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 296}], "players": ["Agent0", "Agent1"], "player_cards": ["Js8c", "Tc9d"], "board": "AdAsJhQhTs"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8cJd", "6dAs"], "board": "9d6s9s6hKh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6h7d", "6dAh"], "board": "KcKh8sThKs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6cTh", "QdJc"], "board": "8hQcKsJhJs"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["8dQc", "JsQd"], "board": "TsTcJdAdKh"} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["6dQd", "Jd6c"], "board": "AdJhThQs8s"} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}], "players": ["Agent0", "Agent1"], "player_cards": ["KsQs", "7sTh"], "board": "9c9dQh6sJs"} diff --git a/shortdeck_server/__init__.py b/shortdeck_server/__init__.py new file mode 100644 index 0000000..948a8db --- /dev/null +++ b/shortdeck_server/__init__.py @@ -0,0 +1,7 @@ +from .arena_adapter import ArenaGame +from .persistence import append_game_history + +__all__ = [ + "ArenaGame", + "append_game_history" +] \ No newline at end of file diff --git a/shortdeck_server/__pycache__/__init__.cpython-313.pyc b/shortdeck_server/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3065b3f47851ea0d28202f45da39a28b32a5e494 GIT binary patch literal 296 zcmYL@u}Z{15QcZN$(?5i2v%BIToVv2>_h}X5bofbfK^~vlHn3Amn^eUxl-^2EPM#x zNEWWL(Jqh|aB?V4G4uV*x6AZVv@f{sU%rZ0o}WYbEAJQjDZ`scL?Y*6CP|(Q?9IKI zBE_r{|J);g8N{P+$!aX!`+ZpCyfPP>r^4nF*&E>NNOJf;b+e*o3jPZ0nB literal 0 HcmV?d00001 diff --git a/shortdeck_server/__pycache__/arena_adapter.cpython-313.pyc b/shortdeck_server/__pycache__/arena_adapter.cpython-313.pyc index 210aab313a741740bf1f9b80f00db4b7cb69b68f..1554c4a285ca6db3fb433eaf9629adbbdf4ad84a 100644 GIT binary patch literal 16990 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 OdQ>TMeL-PNfc#(X@QVQe delta 3823 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 diff --git a/shortdeck_server/__pycache__/main.cpython-313.pyc b/shortdeck_server/__pycache__/main.cpython-313.pyc index 206c5ed8ee4df751d0c8aa908b45974a4e850f0c..0311354896967843a90ffd203483b94decc72ae2 100644 GIT binary patch literal 11596 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 literal 3000 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

Xjlon^OI%XKL^5O| zE1@xZ7{g)4KiB!fPSuX+P`8cpRmY2BG9&Gz#u%rkoyRSZ3vr|u8Q6x(N-{zc3SLg#PWUST?uh3<# z_x?Pr5cy-MeA!I)L!$Btu%D{k@W+XP`(;i;8x5r*kv{?H#jtx8Pn(D!@d8S90WlV! z!vCKAf_*%ct7yrZX94`m(LEIM>K}%@0vbA5y@Yw+v4#7o{~7MOc?&mE8O9-pUo#xM zzog^*gF&4u-4~fvFpYcXuTQ`A?##K<)4%xO?)l5pzxW)!sAg{5n906%_w460qbKfs zb!q0r6@uHIE>JItU^WV5G3+*k9U&kwC_8}V&jJC!Ej+65BEa)rf7bQeZ=L=h1bdEx z9Vh|Y9fohKROnqAHgfgLj}5KN-*09Oxu=`2X~U=mn2!!8wBNp#9f z9@rlSr_W<#jm$cB;d8pM+Ykl%7`x4(y z9^S5G0OgUq41YNR1Xae2DpOf~yRvDjvI)%O)=OKjHeX-;+3FjyuMYq6aISK9*7B{b z{-dss_q@MnqT^cpdh)a6EkIh6~=?-2Ogkv ze*xr&cdi~HO@Xl~dm^z1u|@hUI+0lYETcXHOMM2mlU?u`7QtxK$6AV>NpTYKw(#*pDpeZb`NKrjiO>{=`!KLpy`&UUatuL4@){!fED!_9s=)24rm3o?Tvbcf zn)e2>p2xzHq@j@!OBf84q?Ff3Tsf+baH43Bu6xH=y!H^dHqC40_40z1W{NbBFY<{P zLj%oVr5UP$Oec7&hSzH8-9J);-;qH&u3#ZV(4R>rhaoO#N*^IlLT3x-GVFTvt*N~( z1(elxH;%sGnmTB!nv0tO_UrIB&_vsN$6NcO*Rp&*P&c{i*(q=5q^R2xTU(OR-jH7Pm~;o(VvIE+zF&eQQup0VGZbL#gg%7CcVv* zw&vdhTVH^A*U`aU^tW@@%pKf_M?0os>7zqQNs-EfI|}`mfQy#4L;YRfsci;6Ro{FH{FySil!t6pKzm^-thW z!||ic9j9lsn+`$c2h(uP!Vf`sADu`Dh{R(!4E-^Vw>N=He8KgeR0yUSUNd!NP;3f`l`=Vl89D-e8&?J3WiYZZ&hLAFk(y9fnAtj>S@MvMi zCR%xmb_ckP{2jca0g*3)+C$`uWgnP$mj5po!#?pH^VE0DvVUXNY(sWf)Nw+DSG%YcjK2vPb3^Nai@kw2m@nJt$XmqGr-wmt*T6fKVltHehLG zQE9`({;SPb<*TiiUmmTQWVg(kEbI<;oSTE;?_jaYR*f}Vq4yk~Xqk|&?wEM>avP4I zW7cE^(Xpd*45nCRlg66$8-rMpV^?C=JJ^dp9I7U_N@HnF!(g-ZIkp(EBog%c3 z+5d#K^geJ{*iB=?EI_ttVh2sW=6{24Ff-nj9m#P^zUMvP@eTh9_XV~eZ@cYlo$|Hb v_JyZ>;n6*L-g^4^6VIRCdt&cc=LLCuORlE%CLj7W?|Ea-te4^Is0RNp5hdiC literal 0 HcmV?d00001 diff --git a/shortdeck_server/arena_adapter.py b/shortdeck_server/arena_adapter.py index 4b92947..5f505a8 100644 --- a/shortdeck_server/arena_adapter.py +++ b/shortdeck_server/arena_adapter.py @@ -1,8 +1,8 @@ import uuid +import random from typing import List, Optional, Dict -from shortdeck_arena.simulation import Simulation -from shortdeck_arena.agent import Agent, HumanAgent -from shortdeck_arena.game_stage import BlindConfig + +from shortdeck_arena import Simulation, Agent, HumanAgent, BlindConfig class ArenaGame: @@ -42,6 +42,51 @@ class ArenaGame: self.sim.new_round() return player_id + + def get_valid_actions(self, player_id) -> List[str]: + if not self.sim: + return [] + + try: + actions_info = self.sim.get_available_actions(player_id) + if isinstance(actions_info, dict) and actions_info.get("can_act", False): + valid_actions = [] + + if actions_info.get("can_fold", False): + valid_actions.append("fold") + if actions_info.get("can_check", False): + valid_actions.append("check") + if actions_info.get("can_call", False): + valid_actions.append("call") + if actions_info.get("can_bet", False): + valid_actions.append("bet") + if actions_info.get("can_raise", False): + valid_actions.append("raise") + + return valid_actions + else: + return [] + # 是否需要添加日志 + except Exception as e: + print(f"Error getting valid actions: {e}") + valid_actions = ["fold"] + + try: + if hasattr(self.sim, 'current_bet') and self.sim.current_bet > 0: + valid_actions.append("call") + else: + valid_actions.append("check") + + if hasattr(self.sim, 'stacks') and player_id < len(self.sim.stacks): + if self.sim.stacks[player_id] > getattr(self.sim, 'current_bet', 0): + if getattr(self.sim, 'current_bet', 0) > 0: + valid_actions.append("raise") + else: + valid_actions.append("bet") + except Exception: + pass + + return valid_actions def apply_action(self, player_id, action, amount: Optional[int] = None) -> dict: if not self.sim: @@ -50,6 +95,16 @@ class ArenaGame: try: self.sim.apply_action(player_id, action, amount) + if (hasattr(self.sim, 'current_stage') and + getattr(self.sim.current_stage, 'value', '') == 'finished' and + hasattr(self.sim, 'hand_completed') and + self.sim.hand_completed): + + import time + time.sleep(10) + print("游戏结束,自动开始新一轮...") + self.reset_hand_keep_chips() + self.sim.dump_data() return {"success": True, "message": f"Applied {action}"} @@ -59,41 +114,100 @@ class ArenaGame: def info(self, player_id: Optional[int] = None) -> Dict: if not self.sim: - return {"error": "游戏未初始化"} + return { + "game_id": self.game_id, + "players": self.player_names, + "dealer_index": 0, + "current_turn": 0, + "stage": "waiting", + "total_pot": 0, + "side_pots": [], + "player_cards": [], + "board_cards": [], + "stacks": [self.starting_stack] * len(self.agents), + "player_states": ["WAITING"] * len(self.agents), + "current_pot": [0] * len(self.agents), + "actions": {"can_act": False, "reason": "游戏未开始"} + } info_data = { "game_id": self.game_id, "players": self.player_names, - "dealer_index": self.sim.dealer_position, - "current_turn": self.sim.current_turn, - "stage": self.sim.current_stage.value, - "total_pot": self.sim.total_pot, - "side_pots": [{"amount": pot.amount, "eligible_players": list(pot.eligible_players)} - for pot in self.sim.get_side_pots()], + "dealer_index": getattr(self.sim, 'dealer_position', 0), + "current_turn": getattr(self.sim, 'current_turn', 0), + "stage": getattr(self.sim.current_stage, 'value', 'pre_flop') if hasattr(self.sim, 'current_stage') else 'pre_flop', + "total_pot": getattr(self.sim, 'total_pot', 0), + "side_pots": [], } + + try: + side_pots = self.sim.get_side_pots() + info_data["side_pots"] = [{"amount": pot.amount, "eligible_players": list(pot.eligible_players)} + for pot in side_pots] + except Exception: + info_data["side_pots"] = [] + if player_id is not None and 0 <= player_id < len(self.sim.stacks): try: player_cards = self.sim.player_cards(player_id) info_data["player_cards"] = [str(card) for card in player_cards] - except Exception: + print(f"DEBUG - Player {player_id} cards: {info_data['player_cards']} (raw: {player_cards})") + except Exception as e: + print(f"DEBUG - Error getting player {player_id} cards: {e}") info_data["player_cards"] = [] - info_data["actions"] = self.sim.get_available_actions(player_id) + try: + actions_result = self.sim.get_available_actions(player_id) + info_data["actions"] = actions_result + except Exception as e: + info_data["actions"] = {"can_act": False, "reason": f"Error getting actions: {str(e)}"} else: info_data["player_cards"] = [] info_data["actions"] = {"can_act": False, "reason": "Invalid player"} try: - board_cards = self.sim.board_cards(self.sim.current_stage.value) + stage_value = getattr(self.sim.current_stage, 'value', 'pre_flop') if hasattr(self.sim, 'current_stage') else 'pre_flop' + board_cards = self.sim.board_cards(stage_value) info_data["board_cards"] = [str(card) for card in board_cards] except Exception: info_data["board_cards"] = [] - info_data["stacks"] = self.sim.stacks.copy() - info_data["player_states"] = [state.value for state in self.sim.player_states] - info_data["current_pot"] = self.sim.pot.copy() + try: + info_data["stacks"] = self.sim.stacks.copy() if hasattr(self.sim, 'stacks') else [] + except Exception: + info_data["stacks"] = [] + + try: + info_data["player_states"] = [state.value for state in self.sim.player_states] if hasattr(self.sim, 'player_states') else [] + except Exception: + info_data["player_states"] = [] + + try: + info_data["current_pot"] = self.sim.pot.copy() if hasattr(self.sim, 'pot') else [] + except Exception: + info_data["current_pot"] = [] + if (hasattr(self.sim, 'current_stage') and + getattr(self.sim.current_stage, 'value', '') == 'finished' and + self.sim.is_hand_complete()): + + result = self.sim.complete_hand() + if result.get("complete", False): + info_data["showdown_hands"] = result.get("showdown_hands", {}) + info_data["winnings"] = result.get("winnings", {}) + info_data["winners"] = result.get("winners", []) + + if not hasattr(self, '_result_shown_count'): + self._result_shown_count = 0 + self._result_shown_count += 1 + + if self._result_shown_count >= 3: + print(" 自动开始新一轮游戏...") + self.sim.new_round() + self._result_shown_count = 0 + info_data["stage"] = "preflop" + ## todo return info_data @@ -163,4 +277,26 @@ class ArenaGame: @property def history(self) -> List[Dict]: - return self.sim.history if self.sim else [] \ No newline at end of file + return self.sim.history if self.sim else [] + + def reset_hand_keep_chips(self): + if not self.sim or len(self.agents) < 2: + return + + if hasattr(self.sim, 'hand_completed') and not self.sim.hand_completed: + if self.sim.is_hand_complete(): + self.sim.complete_hand() + + current_stacks = self.sim.stacks.copy() + + self.sim = Simulation(self.agents, blind_config=self.blind_config) + + self.sim.stacks = current_stacks + + self.sim.new_round() + + def full_reset(self): + self.agents = [] + self.player_names = [] + self.sim = None + self.game_id = str(uuid.uuid4()) \ No newline at end of file diff --git a/shortdeck_server/data/0f9dbc71-050b-445b-bd3c-8ff31baec1fc.jsonl b/shortdeck_server/data/0f9dbc71-050b-445b-bd3c-8ff31baec1fc.jsonl new file mode 100644 index 0000000..728c5c4 --- /dev/null +++ b/shortdeck_server/data/0f9dbc71-050b-445b-bd3c-8ff31baec1fc.jsonl @@ -0,0 +1,68 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 404}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 404}, {"pid": 1, "action": "call", "amount": 403}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 404}, {"pid": 1, "action": "call", "amount": 403}, {"pid": 1, "action": "allin", "amount": 595}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 404}, {"pid": 1, "action": "call", "amount": 403}, {"pid": 1, "action": "allin", "amount": 595}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "allin", "amount": 1403}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "allin", "amount": 1403}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1404}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1404}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 492}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 492}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 492}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}, {"pid": 1, "action": "call", "amount": 246}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}, {"pid": 1, "action": "call", "amount": 246}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}, {"pid": 1, "action": "call", "amount": 246}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 247}, {"pid": 1, "action": "call", "amount": 246}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 78}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 78}, {"pid": 1, "action": "raise", "amount": 156}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 78}, {"pid": 1, "action": "raise", "amount": 156}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 663}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 663}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 554}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 554}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 509}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 509}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 509}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 509}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 644}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 644}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1254}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1254}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1257}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 1257}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 55}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 55}, {"pid": 1, "action": "call", "amount": 52}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 55}, {"pid": 1, "action": "call", "amount": 52}, {"pid": 1, "action": "bet", "amount": 107}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 55}, {"pid": 1, "action": "call", "amount": 52}, {"pid": 1, "action": "bet", "amount": 107}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/106221b0-6463-4598-842b-008ce3900934.jsonl b/shortdeck_server/data/106221b0-6463-4598-842b-008ce3900934.jsonl new file mode 100644 index 0000000..8061e20 --- /dev/null +++ b/shortdeck_server/data/106221b0-6463-4598-842b-008ce3900934.jsonl @@ -0,0 +1,36 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}, {"pid": 1, "action": "call", "amount": 204}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}, {"pid": 1, "action": "call", "amount": 204}, {"pid": 0, "action": "bet", "amount": 257}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}, {"pid": 1, "action": "call", "amount": 204}, {"pid": 0, "action": "bet", "amount": 257}, {"pid": 1, "action": "call", "amount": 257}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 205}, {"pid": 1, "action": "call", "amount": 204}, {"pid": 0, "action": "bet", "amount": 257}, {"pid": 1, "action": "call", "amount": 257}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 34}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 34}, {"pid": 1, "action": "call", "amount": 34}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 118}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 118}, {"pid": 1, "action": "call", "amount": 117}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 118}, {"pid": 1, "action": "call", "amount": 117}, {"pid": 1, "action": "bet", "amount": 235}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 118}, {"pid": 1, "action": "call", "amount": 117}, {"pid": 1, "action": "bet", "amount": 235}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 113}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 113}, {"pid": 1, "action": "call", "amount": 113}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 113}, {"pid": 1, "action": "call", "amount": 113}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}, {"pid": 1, "action": "call", "amount": 130}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}, {"pid": 1, "action": "call", "amount": 130}, {"pid": 0, "action": "bet", "amount": 132}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}, {"pid": 1, "action": "call", "amount": 130}, {"pid": 0, "action": "bet", "amount": 132}, {"pid": 1, "action": "call", "amount": 132}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}, {"pid": 1, "action": "call", "amount": 130}, {"pid": 0, "action": "bet", "amount": 132}, {"pid": 1, "action": "call", "amount": 132}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 131}, {"pid": 1, "action": "call", "amount": 130}, {"pid": 0, "action": "bet", "amount": 132}, {"pid": 1, "action": "call", "amount": 132}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 4}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 4}, {"pid": 1, "action": "raise", "amount": 603}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 4}, {"pid": 1, "action": "raise", "amount": 603}, {"pid": 1, "action": "bet", "amount": 603}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 4}, {"pid": 1, "action": "raise", "amount": 603}, {"pid": 1, "action": "bet", "amount": 603}, {"pid": 1, "action": "bet", "amount": 603}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 108}]} diff --git a/shortdeck_server/data/19bdd797-0603-45d9-934d-f7abdb30ca71.jsonl b/shortdeck_server/data/19bdd797-0603-45d9-934d-f7abdb30ca71.jsonl new file mode 100644 index 0000000..eecad02 --- /dev/null +++ b/shortdeck_server/data/19bdd797-0603-45d9-934d-f7abdb30ca71.jsonl @@ -0,0 +1,7 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}, {"pid": 1, "action": "call", "amount": 2}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 1, "action": "bet", "amount": 5}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 1, "action": "bet", "amount": 5}, {"pid": 0, "action": "call", "amount": 5}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 1, "action": "bet", "amount": 5}, {"pid": 0, "action": "call", "amount": 5}, {"pid": 1, "action": "bet", "amount": 5}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 3}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 1, "action": "bet", "amount": 5}, {"pid": 0, "action": "call", "amount": 5}, {"pid": 1, "action": "bet", "amount": 5}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 3, "action": "small_blind", "amount": 1}, {"pid": 4, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/2c24ddb9-581f-44df-b14e-0bb904d918e1.jsonl b/shortdeck_server/data/2c24ddb9-581f-44df-b14e-0bb904d918e1.jsonl new file mode 100644 index 0000000..2ea8a8f --- /dev/null +++ b/shortdeck_server/data/2c24ddb9-581f-44df-b14e-0bb904d918e1.jsonl @@ -0,0 +1,9 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 400}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 400}, {"pid": 1, "action": "call", "amount": 400}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 400}, {"pid": 1, "action": "call", "amount": 400}, {"pid": 0, "action": "bet", "amount": 420}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 400}, {"pid": 1, "action": "call", "amount": 400}, {"pid": 0, "action": "bet", "amount": 420}, {"pid": 1, "action": "raise", "amount": 580}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 18}, {"pid": 0, "action": "call", "amount": 18}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 400}, {"pid": 1, "action": "call", "amount": 400}, {"pid": 0, "action": "bet", "amount": 420}, {"pid": 1, "action": "raise", "amount": 580}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/39f51229-8c0a-4a53-b6cf-e21d9e9e49b2.jsonl b/shortdeck_server/data/39f51229-8c0a-4a53-b6cf-e21d9e9e49b2.jsonl new file mode 100644 index 0000000..6ce3e42 --- /dev/null +++ b/shortdeck_server/data/39f51229-8c0a-4a53-b6cf-e21d9e9e49b2.jsonl @@ -0,0 +1,5 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 2, "action": "call", "amount": 1}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 2, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 4}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 2, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 4}, {"pid": 2, "action": "call", "amount": 4}]} diff --git a/shortdeck_server/data/49705745-32f4-4161-bc02-4d65fc4a6081.jsonl b/shortdeck_server/data/49705745-32f4-4161-bc02-4d65fc4a6081.jsonl new file mode 100644 index 0000000..0086142 --- /dev/null +++ b/shortdeck_server/data/49705745-32f4-4161-bc02-4d65fc4a6081.jsonl @@ -0,0 +1,9 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} diff --git a/shortdeck_server/data/519ef99d-edd2-4d31-956b-c39e7bc72506.jsonl b/shortdeck_server/data/519ef99d-edd2-4d31-956b-c39e7bc72506.jsonl new file mode 100644 index 0000000..7edba19 --- /dev/null +++ b/shortdeck_server/data/519ef99d-edd2-4d31-956b-c39e7bc72506.jsonl @@ -0,0 +1,20 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}, {"pid": 1, "action": "call", "amount": 298}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}, {"pid": 1, "action": "call", "amount": 298}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}, {"pid": 1, "action": "call", "amount": 298}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 320}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}, {"pid": 1, "action": "call", "amount": 298}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 320}, {"pid": 1, "action": "call", "amount": 320}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 299}, {"pid": 1, "action": "call", "amount": 298}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 320}, {"pid": 1, "action": "call", "amount": 320}, {"pid": 0, "action": "bet", "amount": 376}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/52482f92-1af8-4b20-8efc-3ca2188350c1.jsonl b/shortdeck_server/data/52482f92-1af8-4b20-8efc-3ca2188350c1.jsonl new file mode 100644 index 0000000..d4c4129 --- /dev/null +++ b/shortdeck_server/data/52482f92-1af8-4b20-8efc-3ca2188350c1.jsonl @@ -0,0 +1 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/5be4fc33-5c99-41cf-a51e-02614f8b8365.jsonl b/shortdeck_server/data/5be4fc33-5c99-41cf-a51e-02614f8b8365.jsonl new file mode 100644 index 0000000..2cc5efe --- /dev/null +++ b/shortdeck_server/data/5be4fc33-5c99-41cf-a51e-02614f8b8365.jsonl @@ -0,0 +1,7 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 384}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 384}, {"pid": 1, "action": "call", "amount": 383}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 384}, {"pid": 1, "action": "call", "amount": 383}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 4}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 4}, {"pid": 1, "action": "call", "amount": 3}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 4}, {"pid": 1, "action": "call", "amount": 3}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 93}]} diff --git a/shortdeck_server/data/6b5b7218-e5d4-4616-b902-f2fee6552578.jsonl b/shortdeck_server/data/6b5b7218-e5d4-4616-b902-f2fee6552578.jsonl new file mode 100644 index 0000000..27d4dc8 --- /dev/null +++ b/shortdeck_server/data/6b5b7218-e5d4-4616-b902-f2fee6552578.jsonl @@ -0,0 +1,4 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 310}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 310}, {"pid": 1, "action": "call", "amount": 309}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 310}, {"pid": 1, "action": "call", "amount": 309}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} diff --git a/shortdeck_server/data/6efc8ba0-e9b5-40a9-af79-863f92e2619d.jsonl b/shortdeck_server/data/6efc8ba0-e9b5-40a9-af79-863f92e2619d.jsonl new file mode 100644 index 0000000..4d11beb --- /dev/null +++ b/shortdeck_server/data/6efc8ba0-e9b5-40a9-af79-863f92e2619d.jsonl @@ -0,0 +1,32 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 340}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 340}, {"pid": 1, "action": "allin", "amount": 999}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 340}, {"pid": 1, "action": "allin", "amount": 999}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 207}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 207}, {"pid": 1, "action": "call", "amount": 207}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 207}, {"pid": 1, "action": "call", "amount": 207}, {"pid": 0, "action": "bet", "amount": 217}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 207}, {"pid": 1, "action": "call", "amount": 207}, {"pid": 0, "action": "bet", "amount": 217}, {"pid": 1, "action": "call", "amount": 217}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 207}, {"pid": 1, "action": "call", "amount": 207}, {"pid": 0, "action": "bet", "amount": 217}, {"pid": 1, "action": "call", "amount": 217}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 6}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 6}, {"pid": 1, "action": "call", "amount": 6}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 22}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 22}, {"pid": 1, "action": "call", "amount": 22}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 22}, {"pid": 1, "action": "call", "amount": 22}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} diff --git a/shortdeck_server/data/6fecc21b-5614-4dae-ab2a-d179772350e9.jsonl b/shortdeck_server/data/6fecc21b-5614-4dae-ab2a-d179772350e9.jsonl new file mode 100644 index 0000000..360c626 --- /dev/null +++ b/shortdeck_server/data/6fecc21b-5614-4dae-ab2a-d179772350e9.jsonl @@ -0,0 +1,6 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}, {"pid": 1, "action": "call", "amount": 60}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}, {"pid": 1, "action": "call", "amount": 60}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}, {"pid": 1, "action": "call", "amount": 60}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 61}, {"pid": 1, "action": "call", "amount": 60}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "allin", "amount": 937}]} diff --git a/shortdeck_server/data/720fe666-fa9c-4d73-a4b1-247d49e8e2a3.jsonl b/shortdeck_server/data/720fe666-fa9c-4d73-a4b1-247d49e8e2a3.jsonl new file mode 100644 index 0000000..92a1a57 --- /dev/null +++ b/shortdeck_server/data/720fe666-fa9c-4d73-a4b1-247d49e8e2a3.jsonl @@ -0,0 +1 @@ +{"history": [{"pid": 0, "action": "bet", "amount": 682}]} diff --git a/shortdeck_server/data/78b6abaf-75a7-4f14-85f0-f27f49ed9a6d.jsonl b/shortdeck_server/data/78b6abaf-75a7-4f14-85f0-f27f49ed9a6d.jsonl new file mode 100644 index 0000000..e37c90d --- /dev/null +++ b/shortdeck_server/data/78b6abaf-75a7-4f14-85f0-f27f49ed9a6d.jsonl @@ -0,0 +1,5 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 486}]} diff --git a/shortdeck_server/data/7cfd6443-9bb3-4a7f-b71f-6d21a601ecd9.jsonl b/shortdeck_server/data/7cfd6443-9bb3-4a7f-b71f-6d21a601ecd9.jsonl new file mode 100644 index 0000000..a495444 --- /dev/null +++ b/shortdeck_server/data/7cfd6443-9bb3-4a7f-b71f-6d21a601ecd9.jsonl @@ -0,0 +1,6 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 203}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 203}, {"pid": 1, "action": "call", "amount": 203}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 203}, {"pid": 1, "action": "call", "amount": 203}, {"pid": 0, "action": "check", "amount": 0}]} diff --git a/shortdeck_server/data/7f2989fa-63f3-4a0c-ab1e-1262af568162.jsonl b/shortdeck_server/data/7f2989fa-63f3-4a0c-ab1e-1262af568162.jsonl new file mode 100644 index 0000000..b7ce757 --- /dev/null +++ b/shortdeck_server/data/7f2989fa-63f3-4a0c-ab1e-1262af568162.jsonl @@ -0,0 +1,3 @@ +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 3, "action": "bet", "amount": 486}]} diff --git a/shortdeck_server/data/7f2c27d4-4f40-4056-9cc9-7b9a41c8b440.jsonl b/shortdeck_server/data/7f2c27d4-4f40-4056-9cc9-7b9a41c8b440.jsonl new file mode 100644 index 0000000..76761d4 --- /dev/null +++ b/shortdeck_server/data/7f2c27d4-4f40-4056-9cc9-7b9a41c8b440.jsonl @@ -0,0 +1,22 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 215}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 215}, {"pid": 1, "action": "call", "amount": 213}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 215}, {"pid": 1, "action": "call", "amount": 213}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 215}, {"pid": 1, "action": "call", "amount": 213}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 3}, {"pid": 0, "action": "raise", "amount": 215}, {"pid": 1, "action": "call", "amount": 213}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 40}]} diff --git a/shortdeck_server/data/847df1f7-0470-4086-b3a1-7680ad190f3d.jsonl b/shortdeck_server/data/847df1f7-0470-4086-b3a1-7680ad190f3d.jsonl new file mode 100644 index 0000000..3c2421b --- /dev/null +++ b/shortdeck_server/data/847df1f7-0470-4086-b3a1-7680ad190f3d.jsonl @@ -0,0 +1,6 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 393}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 393}, {"pid": 1, "action": "call", "amount": 393}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 393}, {"pid": 1, "action": "call", "amount": 393}, {"pid": 0, "action": "bet", "amount": 395}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 393}, {"pid": 1, "action": "call", "amount": 393}, {"pid": 0, "action": "bet", "amount": 395}, {"pid": 1, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/925d78a3-d647-458a-9a74-2200b4199e13.jsonl b/shortdeck_server/data/925d78a3-d647-458a-9a74-2200b4199e13.jsonl new file mode 100644 index 0000000..f5b7594 --- /dev/null +++ b/shortdeck_server/data/925d78a3-d647-458a-9a74-2200b4199e13.jsonl @@ -0,0 +1,3 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/97e7ded5-0930-43e0-b99e-ec1253db0b00.jsonl b/shortdeck_server/data/97e7ded5-0930-43e0-b99e-ec1253db0b00.jsonl new file mode 100644 index 0000000..8d2e7d2 --- /dev/null +++ b/shortdeck_server/data/97e7ded5-0930-43e0-b99e-ec1253db0b00.jsonl @@ -0,0 +1,5 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "bet", "amount": 269}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "bet", "amount": 474}]} diff --git a/shortdeck_server/data/9876a5c4-152a-4e8c-9130-e8d035bf62b5.jsonl b/shortdeck_server/data/9876a5c4-152a-4e8c-9130-e8d035bf62b5.jsonl new file mode 100644 index 0000000..526c036 --- /dev/null +++ b/shortdeck_server/data/9876a5c4-152a-4e8c-9130-e8d035bf62b5.jsonl @@ -0,0 +1,3 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/9d4ef610-012e-48e6-93b0-95344a2b9ab8.jsonl b/shortdeck_server/data/9d4ef610-012e-48e6-93b0-95344a2b9ab8.jsonl new file mode 100644 index 0000000..0d71638 --- /dev/null +++ b/shortdeck_server/data/9d4ef610-012e-48e6-93b0-95344a2b9ab8.jsonl @@ -0,0 +1,48 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}, {"pid": 1, "action": "call", "amount": 381}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}, {"pid": 1, "action": "call", "amount": 381}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}, {"pid": 1, "action": "call", "amount": 381}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 382}, {"pid": 1, "action": "call", "amount": 381}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}, {"pid": 1, "action": "call", "amount": 92}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}, {"pid": 1, "action": "call", "amount": 92}, {"pid": 0, "action": "bet", "amount": 224}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}, {"pid": 1, "action": "call", "amount": 92}, {"pid": 0, "action": "bet", "amount": 224}, {"pid": 1, "action": "call", "amount": 224}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}, {"pid": 1, "action": "call", "amount": 92}, {"pid": 0, "action": "bet", "amount": 224}, {"pid": 1, "action": "call", "amount": 224}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 3}, {"pid": 0, "action": "raise", "amount": 95}, {"pid": 1, "action": "call", "amount": 92}, {"pid": 0, "action": "bet", "amount": 224}, {"pid": 1, "action": "call", "amount": 224}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 13}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 13}, {"pid": 1, "action": "call", "amount": 12}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 13}, {"pid": 1, "action": "call", "amount": 12}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "call", "amount": 25}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "call", "amount": 25}, {"pid": 1, "action": "bet", "amount": 25}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "call", "amount": 25}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "raise", "amount": 118}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "call", "amount": 25}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "raise", "amount": 118}, {"pid": 1, "action": "call", "amount": 93}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "call", "amount": 25}, {"pid": 1, "action": "bet", "amount": 25}, {"pid": 0, "action": "raise", "amount": 118}, {"pid": 1, "action": "call", "amount": 93}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 15}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 15}, {"pid": 1, "action": "call", "amount": 14}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 15}, {"pid": 1, "action": "call", "amount": 14}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 33}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 33}, {"pid": 1, "action": "call", "amount": 32}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 33}, {"pid": 1, "action": "call", "amount": 32}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 22}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 22}, {"pid": 1, "action": "call", "amount": 21}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 22}, {"pid": 1, "action": "call", "amount": 21}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 22}, {"pid": 1, "action": "call", "amount": 21}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}]} +{"history": [{"pid": 3, "action": "small_blind", "amount": 1}, {"pid": 4, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/9fd090b6-acfd-4483-8bd2-f5565aa466ac.jsonl b/shortdeck_server/data/9fd090b6-acfd-4483-8bd2-f5565aa466ac.jsonl new file mode 100644 index 0000000..189089c --- /dev/null +++ b/shortdeck_server/data/9fd090b6-acfd-4483-8bd2-f5565aa466ac.jsonl @@ -0,0 +1,4 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 296}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 296}, {"pid": 1, "action": "call", "amount": 295}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 296}, {"pid": 1, "action": "call", "amount": 295}, {"pid": 1, "action": "allin", "amount": 703}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 296}, {"pid": 1, "action": "call", "amount": 295}, {"pid": 1, "action": "allin", "amount": 703}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/a0fe4e18-ef0b-4426-be59-ef0ed794ce71.jsonl b/shortdeck_server/data/a0fe4e18-ef0b-4426-be59-ef0ed794ce71.jsonl new file mode 100644 index 0000000..77a9530 --- /dev/null +++ b/shortdeck_server/data/a0fe4e18-ef0b-4426-be59-ef0ed794ce71.jsonl @@ -0,0 +1,7 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "allin", "amount": 1001}]} diff --git a/shortdeck_server/data/a2f1f761-f709-4aa7-8ca7-d73b6eec394c.jsonl b/shortdeck_server/data/a2f1f761-f709-4aa7-8ca7-d73b6eec394c.jsonl new file mode 100644 index 0000000..d1bb673 --- /dev/null +++ b/shortdeck_server/data/a2f1f761-f709-4aa7-8ca7-d73b6eec394c.jsonl @@ -0,0 +1,21 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 360}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 360}, {"pid": 1, "action": "call", "amount": 360}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 360}, {"pid": 1, "action": "call", "amount": 360}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 360}, {"pid": 1, "action": "call", "amount": 360}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 360}, {"pid": 1, "action": "call", "amount": 360}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 157}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} diff --git a/shortdeck_server/data/a49bf62c-0133-4041-a5af-008ed7a6e365.jsonl b/shortdeck_server/data/a49bf62c-0133-4041-a5af-008ed7a6e365.jsonl new file mode 100644 index 0000000..7862bdb --- /dev/null +++ b/shortdeck_server/data/a49bf62c-0133-4041-a5af-008ed7a6e365.jsonl @@ -0,0 +1 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 75}]} diff --git a/shortdeck_server/data/a5cce7d5-7828-4cb1-9731-0d43664cd2e7.jsonl b/shortdeck_server/data/a5cce7d5-7828-4cb1-9731-0d43664cd2e7.jsonl new file mode 100644 index 0000000..31a3f69 --- /dev/null +++ b/shortdeck_server/data/a5cce7d5-7828-4cb1-9731-0d43664cd2e7.jsonl @@ -0,0 +1,2 @@ +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 2, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/aa241ea0-f0e7-4dd6-8f8e-0a74fcb24d25.jsonl b/shortdeck_server/data/aa241ea0-f0e7-4dd6-8f8e-0a74fcb24d25.jsonl new file mode 100644 index 0000000..979e9a6 --- /dev/null +++ b/shortdeck_server/data/aa241ea0-f0e7-4dd6-8f8e-0a74fcb24d25.jsonl @@ -0,0 +1,12 @@ +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "bet", "amount": 477}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 2, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 2, "action": "check", "amount": 0}, {"pid": 2, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 2, "action": "check", "amount": 0}, {"pid": 2, "action": "check", "amount": 0}, {"pid": 2, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/ab93c6e8-10a4-4032-8a4d-2e44d2fcb2c7.jsonl b/shortdeck_server/data/ab93c6e8-10a4-4032-8a4d-2e44d2fcb2c7.jsonl new file mode 100644 index 0000000..6673887 --- /dev/null +++ b/shortdeck_server/data/ab93c6e8-10a4-4032-8a4d-2e44d2fcb2c7.jsonl @@ -0,0 +1,3 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 276}]} diff --git a/shortdeck_server/data/bc07666b-6ae1-4721-82a1-637c102f88cf.jsonl b/shortdeck_server/data/bc07666b-6ae1-4721-82a1-637c102f88cf.jsonl new file mode 100644 index 0000000..e7c9b39 --- /dev/null +++ b/shortdeck_server/data/bc07666b-6ae1-4721-82a1-637c102f88cf.jsonl @@ -0,0 +1,2 @@ +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "raise", "amount": 4}]} diff --git a/shortdeck_server/data/c0990ec7-faa1-44a7-9135-be9c1159a55f.jsonl b/shortdeck_server/data/c0990ec7-faa1-44a7-9135-be9c1159a55f.jsonl new file mode 100644 index 0000000..af90d46 --- /dev/null +++ b/shortdeck_server/data/c0990ec7-faa1-44a7-9135-be9c1159a55f.jsonl @@ -0,0 +1,40 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}, {"pid": 1, "action": "call", "amount": 107}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}, {"pid": 1, "action": "call", "amount": 107}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}, {"pid": 1, "action": "call", "amount": 107}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 108}, {"pid": 1, "action": "call", "amount": 107}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 124}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 124}, {"pid": 0, "action": "raise", "amount": 341}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 124}, {"pid": 0, "action": "raise", "amount": 341}, {"pid": 1, "action": "call", "amount": 217}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "bet", "amount": 62}, {"pid": 1, "action": "call", "amount": 62}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "bet", "amount": 124}, {"pid": 0, "action": "raise", "amount": 341}, {"pid": 1, "action": "call", "amount": 217}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}, {"pid": 1, "action": "call", "amount": 100}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}, {"pid": 1, "action": "call", "amount": 100}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}, {"pid": 1, "action": "call", "amount": 100}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 157}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}, {"pid": 1, "action": "call", "amount": 100}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 101}, {"pid": 1, "action": "call", "amount": 100}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 157}, {"pid": 1, "action": "call", "amount": 157}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}, {"pid": 0, "action": "bet", "amount": 65}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}, {"pid": 0, "action": "bet", "amount": 65}, {"pid": 1, "action": "call", "amount": 65}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}, {"pid": 0, "action": "bet", "amount": 65}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 0, "action": "bet", "amount": 112}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}, {"pid": 0, "action": "bet", "amount": 65}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 0, "action": "bet", "amount": 112}, {"pid": 1, "action": "call", "amount": 112}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 46}, {"pid": 1, "action": "call", "amount": 45}, {"pid": 0, "action": "bet", "amount": 65}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 0, "action": "bet", "amount": 112}, {"pid": 1, "action": "call", "amount": 112}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 0}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 0}, {"pid": 1, "action": "bet", "amount": 224}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/data/c5182b9b-2e3c-4652-a48e-d7e276b384d2.jsonl b/shortdeck_server/data/c5182b9b-2e3c-4652-a48e-d7e276b384d2.jsonl new file mode 100644 index 0000000..112d29d --- /dev/null +++ b/shortdeck_server/data/c5182b9b-2e3c-4652-a48e-d7e276b384d2.jsonl @@ -0,0 +1,2 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 2, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/c5431574-a9e1-4366-ad33-534acf1e9875.jsonl b/shortdeck_server/data/c5431574-a9e1-4366-ad33-534acf1e9875.jsonl new file mode 100644 index 0000000..9da98ae --- /dev/null +++ b/shortdeck_server/data/c5431574-a9e1-4366-ad33-534acf1e9875.jsonl @@ -0,0 +1,17 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 142}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 142}, {"pid": 1, "action": "call", "amount": 142}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 142}, {"pid": 1, "action": "call", "amount": 142}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 142}, {"pid": 1, "action": "call", "amount": 142}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 2}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 2}, {"pid": 1, "action": "call", "amount": 2}, {"pid": 0, "action": "bet", "amount": 325}]} +{"history": [{"pid": 3, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}]} diff --git a/shortdeck_server/data/d7545cff-76d5-4261-93a3-d3400a7dc4a5.jsonl b/shortdeck_server/data/d7545cff-76d5-4261-93a3-d3400a7dc4a5.jsonl new file mode 100644 index 0000000..b1ff3c9 --- /dev/null +++ b/shortdeck_server/data/d7545cff-76d5-4261-93a3-d3400a7dc4a5.jsonl @@ -0,0 +1,2 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "allin", "amount": 998}]} diff --git a/shortdeck_server/data/de5172b9-c67e-45ff-a16c-4a2a5be772ec.jsonl b/shortdeck_server/data/de5172b9-c67e-45ff-a16c-4a2a5be772ec.jsonl new file mode 100644 index 0000000..9620291 --- /dev/null +++ b/shortdeck_server/data/de5172b9-c67e-45ff-a16c-4a2a5be772ec.jsonl @@ -0,0 +1,5 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}]} +{"history": [{"pid": 1, "action": "small_blind", "amount": 1}, {"pid": 0, "action": "big_blind", "amount": 2}, {"pid": 1, "action": "call", "amount": 1}, {"pid": 0, "action": "fold", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/dedb9c5f-4727-4089-8966-624d78fcd7da.jsonl b/shortdeck_server/data/dedb9c5f-4727-4089-8966-624d78fcd7da.jsonl new file mode 100644 index 0000000..a6025a6 --- /dev/null +++ b/shortdeck_server/data/dedb9c5f-4727-4089-8966-624d78fcd7da.jsonl @@ -0,0 +1 @@ +{"history": [{"pid": 0, "action": "bet", "amount": 123}]} diff --git a/shortdeck_server/data/e98a2fdd-8578-4771-9caf-bdf140de9c2e.jsonl b/shortdeck_server/data/e98a2fdd-8578-4771-9caf-bdf140de9c2e.jsonl new file mode 100644 index 0000000..bb2eb19 --- /dev/null +++ b/shortdeck_server/data/e98a2fdd-8578-4771-9caf-bdf140de9c2e.jsonl @@ -0,0 +1,7 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}, {"pid": 1, "action": "call", "amount": 65}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "raise", "amount": 66}, {"pid": 1, "action": "call", "amount": 65}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 2}]} +{"history": [{"pid": 2, "action": "small_blind", "amount": 1}, {"pid": 3, "action": "big_blind", "amount": 2}, {"pid": 4, "action": "call", "amount": 2}]} diff --git a/shortdeck_server/data/ee73daeb-1377-486d-9bdb-fbe8254ca8d9.jsonl b/shortdeck_server/data/ee73daeb-1377-486d-9bdb-fbe8254ca8d9.jsonl new file mode 100644 index 0000000..ca020da --- /dev/null +++ b/shortdeck_server/data/ee73daeb-1377-486d-9bdb-fbe8254ca8d9.jsonl @@ -0,0 +1,7 @@ +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 332}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 332}, {"pid": 1, "action": "call", "amount": 332}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 332}, {"pid": 1, "action": "call", "amount": 332}, {"pid": 0, "action": "bet", "amount": 334}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 332}, {"pid": 1, "action": "call", "amount": 332}, {"pid": 0, "action": "bet", "amount": 334}, {"pid": 1, "action": "call", "amount": 334}]} +{"history": [{"pid": 0, "action": "small_blind", "amount": 1}, {"pid": 1, "action": "big_blind", "amount": 2}, {"pid": 0, "action": "call", "amount": 1}, {"pid": 1, "action": "check", "amount": 0}, {"pid": 0, "action": "bet", "amount": 332}, {"pid": 1, "action": "call", "amount": 332}, {"pid": 0, "action": "bet", "amount": 334}, {"pid": 1, "action": "call", "amount": 334}, {"pid": 0, "action": "fold", "amount": 0}]} diff --git a/shortdeck_server/main.py b/shortdeck_server/main.py index 5ee71bb..5aaa0e9 100644 --- a/shortdeck_server/main.py +++ b/shortdeck_server/main.py @@ -1,12 +1,35 @@ +import sys +import os +from pathlib import Path +project_root = Path(__file__).resolve().parent.parent +if str(project_root) not in sys.path: + sys.path.insert(0, str(project_root)) + from fastapi import FastAPI, HTTPException +from fastapi.middleware.cors import CORSMiddleware +from fastapi.staticfiles import StaticFiles from pydantic import BaseModel +from typing import List, Optional, Dict, Any -from .persistence import append_game_history -from .arena_adapter import ArenaGame +from shortdeck_server.persistence import append_game_history +from shortdeck_server.arena_adapter import ArenaGame + +app = FastAPI(title="ShortDeck Poker Server", version="1.0.0") + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) -app = FastAPI(title="shortdeck-server") GAME = ArenaGame() +client_path = project_root / "client" +if client_path.exists(): + app.mount("/client", StaticFiles(directory=str(client_path)), name="client") + class JoinRequest(BaseModel): name: str @@ -19,16 +42,67 @@ class JoinResponse(BaseModel): class ActionRequest(BaseModel): player_id: int action: str # "fold", "call", "raise", "check", "bet" - amount: int | None = None + amount: Optional[int] = None +class ApiResponse(BaseModel): + success: bool = True + message: Optional[str] = None + data: Optional[Dict[str, Any]] = None + error: Optional[str] = None + +class GameInfo(BaseModel): + game_id: str + players: List[str] + dealer_index: int + current_turn: int + stage: str + total_pot: int + side_pots: List[Dict[str, Any]] + player_cards: List[str] + board_cards: List[str] + stacks: List[int] + player_states: List[str] + current_pot: List[int] + actions: Dict[str, Any] + +class HandStrength(BaseModel): + hand_type: str + description: str + strength: float + cards: List[str] + +class Game1v1Response(BaseModel): + success: bool + message: str + human_player_id: Optional[int] = None + ai_player_id: Optional[int] = None + game_id: Optional[str] = None + + +@app.post("/reset_game") +def reset_game(): + global GAME + try: + GAME = ArenaGame() + return {"success": True, "message": "游戏已重置"} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e @app.post("/join", response_model=JoinResponse) def join(req: JoinRequest): try: + print(f"收到加入请求: {req.name}") player_id = GAME.join_game(req.name) + print(f"玩家 {req.name} 成功加入,ID: {player_id}") + return JoinResponse(player_id=player_id, name=req.name) except ValueError as e: + print(f"加入游戏失败 - ValueError: {e}") raise HTTPException(status_code=400, detail=str(e)) from e - return JoinResponse(player_id=player_id, name=req.name) + except Exception as e: + print(f"加入游戏失败 - Exception: {e}") + import traceback + traceback.print_exc() + raise HTTPException(status_code=500, detail=str(e)) from e @app.get("/get_game_state") @@ -40,11 +114,78 @@ def get_game_state(player_id): return state -@app.post("/apply_action") +@app.post("/apply_action", response_model=Dict[str, Any]) def apply_action(req: ActionRequest): try: - GAME.apply_action(req.player_id, req.action, req.amount) + result = GAME.apply_action(req.player_id, req.action, req.amount) append_game_history(GAME.game_id, {"history": GAME.history}) + return result except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) from e - return {"ok": True} + +@app.get("/valid_actions/{player_id}") +def get_valid_actions(player_id: int): + try: + actions = GAME.get_valid_actions(player_id) + return {"valid_actions": actions} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e + +@app.get("/hand_strength/{player_id}") +def get_hand_strength(player_id: int): + try: + strength = GAME.get_hand_strength(player_id) + return strength + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e + + +@app.get("/winners") +def get_winners(): + try: + winners = GAME.get_winners() + return winners + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e + +@app.post("/reset") +def reset_game(request: dict = None): + try: + global GAME + keep_chips = False + + if request and isinstance(request, dict): + keep_chips = request.get("keep_chips", False) + + if keep_chips and GAME and len(GAME.agents) >= 2: + GAME.reset_hand_keep_chips() + message = "游戏重置,筹码保持" + else: + GAME = ArenaGame() + message = "游戏完全重置" + return {"ok": True, "message": message} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e + +@app.get("/hand_complete") +def check_hand_complete(): + try: + is_complete = GAME.check_hand_complete() + return {"hand_complete": is_complete} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) from e + + +if __name__ == "__main__": + import uvicorn + + print(" Starting ShortDeck Poker Server...") + print(" Server will run on http://localhost:8001") + print(" API docs available at http://localhost:8001/docs") + + uvicorn.run( + app, + host="127.0.0.1", + port=8001, + reload=False + ) diff --git a/shortdeck_server/random_cli.py b/shortdeck_server/random_cli.py index 94032ed..4a1841c 100644 --- a/shortdeck_server/random_cli.py +++ b/shortdeck_server/random_cli.py @@ -7,6 +7,7 @@ from typing import Any, Dict, Optional import requests +## 注掉 BASE_PATH = "/get_game_state" APPLY_PATH = "/apply_action" diff --git a/shortdeck_server/tests/__pycache__/test_game.cpython-313-pytest-8.4.2.pyc b/shortdeck_server/tests/__pycache__/test_game.cpython-313-pytest-8.4.2.pyc deleted file mode 100644 index 8b018d655fa1049bae7152bb6312ce14d7d093b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6639 zcmeHLPfQ!x8K1GAjqNdi42D1g)L{$FlwAiKI|&JpW}9WVq)EFxjY3Pbqro1)jhV6D zn9V{JiAt3ktGf-CO03iammXHC+MKFYPkZR0haNDHl8#!bQvXEUR^rx6`@NZY<1vH< z)ZOl3cQo_n``-J#@B7~Oee=GV*>7x&aBxh&`FtURIPUM1VTaEq`2A5Je$HVI^S8K3 zp704u`)>J&-@2p8fZ`_r7ZwiX0>1Cx{&^6-@ z@ZlRo)s)wjMKwne>}UYO&vE>Iw3%w2;n@J@u@Cz(!hsQ_aS}HLsDlR%W*xl7AAx9a z5k4H!Q2XAsoZ47k&D=6t=Q|n5{go*JapI+3$z!Z=0^v zqH^r|L(Ip=BEt-c<4#6Ka69ghB2GpMr^rZw$zpdqBef7@2KHkf;&I;Y~|Qmm~AK872H{nt)0il05KiMBBKn6yOMr;$G~Ut zIVtEwtML@kYGkt5-H8^0X#E1B)pamd90&EFJL}Xctx0OaJx+f2ez9}=A_sZ=6@45h zs6X_5shL(C{g3*)ENk-T!F%Vm7Vw#c(PC0;>g-_;Ypqgit#)Z`Qj63^WodCKu7#u! zllMBG&z#^H>64=HjJz~`z4nY8n`3T`Iu_Z?G6#Rv**gT>j|U{d$;NgGP4ygJqtwpk zB{(U{R+NADB1FrYF0R4ep!wm7 z!qp5{3tVxyVsN!Ww!V1R2;oVW^tI>0=BT%Jmwe;r8Ti&^K3z=~<&a9+Zm zc+raKuV61cU2PwdXl+k@S=&FO+TM3KS~yK>7an#hdh&~1(dRiab7wCP9@(Q=zDGZE z_vo9Ch|DIVtdMd+o0oye-8Y3rLBZ){BDS6cfol$M7?BQZ9XpyaSFW-VCC z3|bZ#dpT;}EH%#&nyLxSh=wgLMQ3K}#9gw*U4m&DYCu{vB0qG9gl!X;m&`2@_<2y4 z%S%LyJY?2VTljg=Pw4k4m7OMWpz0J{wiR49(VSk)n+?WNE~gsC#1j1m|Hp^#{cHU< z&wuv8KY#sOvtbeXm3h@fR15sD@D-r7T?Bqf6g0~LV6o^UZ7`d_M?JUFK&`!EYqW30Xb@ z*HAt^w9@PeQQD5;a(dWAImiXmKdYAa=syY(;yzB}KIpjkMZPZSWpMGh?R;?Y-hbdQ zgG!G6$q`!#{l#F0f1npMc^-b|n2~RkmdmP9mK9>gWU5dmYKi3Z#gal)GYZ4<>{6i! z32T_aq7Ded?39fKeW{qYpz?fCpH+&oM#Y6?Lzz>l1heUem3N@_H9~Y^w#jokSyalh z`VM5fX8l?+Q9+y2&8Rm+%&1Z-6_;h(WHVs76jo3wsqjoRF)6dUUersFH+tD@SST1} zoh*xINjD8G{R=|q$F(U?`)%*0y-dnxY>P5p=8_qJr=qNS(L-Kl*o)43naf^SozN?0 zkf_E|vFt@;ZSUIFrH1Ob;X1A!dAV-PS(d$$5qrpHQgvK9>$r?TKPD1K9_H1X zSMNR0$$g`w2^Rm2!%fcj9W0?}JAA z%fh$~Il0RHB^29edvgAx*dLT?=)0>oo(a*%*DBZ6%G*Ns>dgaOTYMA6*HV>{T@<&^ zEfjy0aXFiKTGv;taWJr!IsgV15YIj{$$yJBKAxyd{Pd00*FFw%(b!sN<@zQXSSK6l z^#w{SRE2?EeB8@lDjb{-)Jbh2CA{oLi{((YVXm z#8c=4Cpd^|jiUn&c$-RdF)jh!ps=a=@mrO*)^Du8z1=vlI`K@1t%+5kdlU6<1gxei z^zS0)+(P}ELbuKCc<614c2OeGM~1tdbG<`@xxAvR(U< z_7)74DoNA_qyU?L*zGbKoIaAKb9&vq&)M;kP$o4+R`N=ztP-ofT3g!(9GQU$@d{!E^k}*0lculw+xj diff --git a/shortdeck_server/tests/test_game.py b/shortdeck_server/tests/test_game.py deleted file mode 100644 index 14d5603..0000000 --- a/shortdeck_server/tests/test_game.py +++ /dev/null @@ -1,33 +0,0 @@ -from __future__ import annotations - -from shortdeck_server.arena_adapter import ArenaGame - - -def test_join_and_actions(): - g = ArenaGame(starting_stack=100, max_players=3, small_blind=1, big_blind=2) - pid0 = g.join_game("aa") - pid1 = g.join_game("bb") - assert pid0 == 0 - assert pid1 == 1 - - state = g.info() - # 在短牌扑克中,玩家加入后盲注已自动扣除 - # 小盲(pid0): 100-1=99, 大盲(pid1): 100-2=98 - assert state["stacks"] == [99, 98] - - # 验证轮次管理:heads-up时小盲先行动 - assert g.current_turn == 0 - - # 测试错误的玩家尝试行动 - result = g.apply_action(1, "fold") - assert result["success"] == False - assert "不是玩家" in result["message"] or "turn" in result["message"].lower() - - # 小盲玩家call (跟注到大盲) - g.apply_action(0, "call") - assert g.current_turn == 1 - - # 大盲玩家加注 - g.apply_action(1, "bet", 10) - assert g.pot >= 10 # 底池至少包含加注金额 - assert g.history[-1]["action"] == "bet" diff --git a/waitress_server.py b/waitress_server.py new file mode 100644 index 0000000..e99e5ed --- /dev/null +++ b/waitress_server.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +import sys +import os +from pathlib import Path +project_root = Path(__file__).parent +sys.path.insert(0, str(project_root)) + +if __name__ == "__main__": + print("🚀 使用Waitress启动原始FastAPI扑克服务器...") + print("📍 服务器地址: http://127.0.0.1:8005") + print("🎮 游戏界面: http://127.0.0.1:8005/client/index.html") + print("✅ 使用原始ArenaGame实现") + print("🪟 Windows优化版本") + + try: + from shortdeck_server.main import app + from waitress import serve + + def wsgi_app(environ, start_response): + import asyncio + import json + from urllib.parse import parse_qs + + method = environ['REQUEST_METHOD'] + path = environ['PATH_INFO'] + query_string = environ.get('QUERY_STRING', '') + + scope = { + 'type': 'http', + 'method': method, + 'path': path, + 'query_string': query_string.encode(), + 'headers': [(k.lower().replace('_', '-').encode(), v.encode()) + for k, v in environ.items() if k.startswith('HTTP_')], + } + + response_data = {'status': 500, 'headers': [], 'body': b''} + + async def receive(): + content_length = int(environ.get('CONTENT_LENGTH', 0)) + if content_length > 0: + body = environ['wsgi.input'].read(content_length) + return {'type': 'http.request', 'body': body} + return {'type': 'http.request', 'body': b''} + + async def send(message): + if message['type'] == 'http.response.start': + response_data['status'] = message['status'] + response_data['headers'] = message.get('headers', []) + elif message['type'] == 'http.response.body': + response_data['body'] += message.get('body', b'') + + try: + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(app(scope, receive, send)) + loop.close() + except Exception as e: + response_data['status'] = 500 + response_data['body'] = f"Server Error: {str(e)}".encode() + + status = f"{response_data['status']} OK" + headers = [(h[0].decode(), h[1].decode()) for h in response_data['headers']] + start_response(status, headers) + return [response_data['body']] + + serve(wsgi_app, host='127.0.0.1', port=8005, threads=4) + + except KeyboardInterrupt: + print("\n 服务器停止") + except Exception as e: + print(f" 服务器错误: {e}") + import traceback + traceback.print_exc() \ No newline at end of file