def enter_room(server: TexasServer, conn, room_index): player = server.players[conn] room = server.rooms[int(room_index)] room.receive_player(player) player.menu = RoomMenu text = f"进入房间成功,房间ID {room.id}\n" \ f"输入 h/H 查看帮助菜单" conn.send(Message(text=text, status=200).encode()) server.room_notice(room_index, text=f"玩家<{player.name}> 进入房间", ignore_players=[player])
def exit_room(server: TexasServer, conn): player = server.players[conn] room_index = server.rooms.index(player.room) player.exit_room() player.menu = HillMenu text = f"已退出房间\n" \ f"输入 h/H 查看帮助菜单" conn.send(Message(text=text, status=200).encode()) server.room_notice(room_index, text=f"玩家<{player.name}> 退出房间", ignore_players=[player])
def fold(server: TexasServer, conn): player = server.players[conn] room_index = server.rooms.index(player.room) player.fold() conn.send(Message(text=f"已弃牌").encode()) server.room_notice(room_index, text=f"玩家<{player.name}>弃牌", ignore_players=[player]) player.room.receive_chips(player, 0) if not player.room.is_bet_success() and player.room.is_ready(): current_player_conn = server.get_conn(player.room.current_player) server.room_notice(room_index, text=f"等待玩家<{player.room.current_player.name}>下注", ignore_players=[player.room.current_player]) current_player_conn.send(Message(text="请下注", status=200).encode())
def bet(server: TexasServer, conn, chips): player = server.players[conn] room_index = server.rooms.index(player.room) player.bet(int(chips)) conn.send(Message(text=f"下注{chips}成功").encode()) server.room_notice( room_index, text=f"玩家<{player.name}>下注{chips},当前注码{player.bet_round_chips}," f"底池{player.room.pot + player.bet_round_chips}", ignore_players=[player]) player.room.receive_chips(player, int(chips)) if not player.room.is_bet_success() and player.room.is_ready(): current_player_conn = server.get_conn(player.room.current_player) server.room_notice(room_index, text=f"等待玩家<{player.room.current_player.name}>下注", ignore_players=[player.room.current_player]) current_player_conn.send(Message(text="请下注", status=200).encode())
def allin(server: TexasServer, conn): player = server.players[conn] room_index = server.rooms.index(player.room) player.allin() conn.send(Message(text=f"All in {player.allin_chips}").encode()) server.room_notice( room_index, text= f"玩家<{player.name}> 全推,当前注码{max(player.room.public_bet, player.bet_round_chips)}," f"底池{player.room.pot + player.allin_chips}", ignore_players=[player]) player.room.receive_chips(player, player.allin_chips) if not player.room.is_bet_success() and player.room.is_ready(): current_player_conn = server.get_conn(player.room.current_player) server.room_notice(room_index, text=f"等待玩家<{player.room.current_player.name}>下注", ignore_players=[player.room.current_player]) current_player_conn.send(Message(text="请下注", status=200).encode())
def raise_(server: TexasServer, conn, chips): player = server.players[conn] room_index = server.rooms.index(player.room) public_bet = player.room.public_bet bet_chips = player.bet_round_chips player.raise_(public_bet, int(chips)) new_bet_chips = player.bet_round_chips - bet_chips conn.send(Message(text=f"加注到{public_bet + int(chips)}").encode()) server.room_notice( room_index, text=f"玩家<{player.name}>加注,当前注码{player.bet_round_chips}," f"底池{player.room.pot + new_bet_chips}", ignore_players=[player]) player.room.receive_chips(player, new_bet_chips) # 加注需要校准注码 player.room.public_bet = player.bet_round_chips if not player.room.is_bet_success() and player.room.is_ready(): current_player_conn = server.get_conn(player.room.current_player) server.room_notice(room_index, text=f"等待玩家<{player.room.current_player.name}>下注", ignore_players=[player.room.current_player]) current_player_conn.send(Message(text="请下注", status=200).encode())
def ready(server: TexasServer, conn): player = server.players[conn] player.ready() conn.send(Message(text=f"已准备,等待其他玩家准备", status=200).encode()) room = player.room if room.is_ready(): room_index = server.rooms.index(room) server.room_notice(room_index, text="牌局开始") room.trigger() room.card_set.deal(room) server.room_notice(room_index, text="发牌完成") for p in room.players: p.menu = GameMenu cards = ''.join([str(card) for card in p.hole_cards]) server.logger.info(f"玩家<{p.name}>,底牌{cards}") player_conn = server.get_conn(p) player_conn.send(Message(text=p.show_cards(), status=200).encode()) if p == room.current_player: player_conn.send(Message(text="请下注", status=200).encode()) server.room_notice(room_index, text=f"等待玩家<{room.current_player.name}>下注", ignore_players=[room.current_player])