Example #1
0
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])
Example #2
0
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])
Example #3
0
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())
Example #4
0
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())
Example #5
0
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())
Example #6
0
def login(server: TexasServer, conn, username, chips=None):
    if username in [player.name for player in server.players.values()]:
        conn.send(Message(text=f"{username}已登录", status=400).encode())
        return
    player = TexasPlayer(username)
    player.menu = HillMenu
    server.players[conn] = player
    server.logger.info(f"玩家<{username}>登录游戏")
    conn.send(Message(text=f"{username},欢迎来到德州扑克", status=200).encode())
    conn.send(Message(text='输入 h/H 查看帮助菜单').encode())
Example #7
0
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())
Example #8
0
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])