コード例 #1
0
ファイル: base.py プロジェクト: bianQ/blueyes
 def process(self, conn: socket.socket, message: Message):
     """
     根据 signal 获取执行函数并调用
     Args:
         conn: socket 连接
         message:
     """
     if message.signal:
         signal_name, signal_value = message.signal.split('.')
     else:
         player = self.players[conn]
         _signal = player.menu.get_signal(message.code)
         if _signal:
             ignore_list = ignore_menu(player)
             signal_name, signal_value = _signal.split('.')
             if signal_value in ignore_list:
                 signal_name = None
         else:
             signal_name = signal_value = None
     signal = self.signals.get(signal_name)
     if signal is None:
         self.logger.error(f"{message.signal} is not found")
         conn.send(Message(text="指令错误,请重新输入").encode())
         return
     func = signal.deferred_functions.get(signal_value)
     if func is None:
         self.logger.error(f"{message.signal} is not found")
         conn.send(Message(text="指令错误,请重新输入").encode())
         return
     func(self, conn, *message.args)
コード例 #2
0
ファイル: views.py プロジェクト: bianQ/blueyes
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())
コード例 #3
0
ファイル: views.py プロジェクト: bianQ/blueyes
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())
コード例 #4
0
ファイル: base.py プロジェクト: bianQ/blueyes
 def room_notice(self, room_index, text, ignore_players=None):
     ignore_players = ignore_players or []
     for conn, player in self.players.items():
         room = self.rooms[int(room_index)]
         if player not in ignore_players and player.room == room:
             conn.send(Message(text=text, status=200).encode())
     self.logger.info(text)
コード例 #5
0
ファイル: views.py プロジェクト: bianQ/blueyes
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())
コード例 #6
0
ファイル: views.py プロジェクト: bianQ/blueyes
def create_rooms(server: TexasServer, conn):
    room = TexasRoom()
    player = server.players[conn]
    room.receive_player(player)
    server.rooms.append(room)
    player.menu = RoomMenu
    text = f"创建房间成功,房间ID {room.id}\n" \
           f"输入 h/H 查看帮助菜单"
    conn.send(Message(text=text, status=200).encode())
コード例 #7
0
ファイル: views.py プロジェクト: bianQ/blueyes
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())
コード例 #8
0
ファイル: base.py プロジェクト: bianQ/blueyes
 def thread(self, conn):
     while True:
         try:
             rec_msg = conn.recv(1024)
             if not rec_msg:
                 return
             self.process(conn, Message.decode(rec_msg))
         except ConnectionResetError:
             self.players.pop(conn, None)
コード例 #9
0
ファイル: views.py プロジェクト: bianQ/blueyes
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])
コード例 #10
0
ファイル: views.py プロジェクト: bianQ/blueyes
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])
コード例 #11
0
ファイル: views.py プロジェクト: bianQ/blueyes
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())
コード例 #12
0
ファイル: views.py プロジェクト: bianQ/blueyes
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])
コード例 #13
0
ファイル: views.py プロジェクト: bianQ/blueyes
def get_rooms(server: TexasServer, conn):
    text = '\n'.join([f"{i}\t{r}"
                      for i, r in enumerate(server.rooms)]) or '无房间'
    conn.send(Message(text=text, status=200).encode())
コード例 #14
0
ファイル: views.py プロジェクト: bianQ/blueyes
def player_list(server: TexasServer, conn):
    player = server.players[conn]
    room = player.room
    text = '\n'.join([str(p) for p in room.players])
    conn.send(Message(text=text, status=200).encode())
コード例 #15
0
ファイル: views.py プロジェクト: bianQ/blueyes
def help_list(server: TexasServer, conn):
    player = server.players[conn]
    ignore_list = ignore_menu(player)
    conn.send(
        Message(text=_format_menu(player.menu, ignore_list),
                status=200).encode())
コード例 #16
0
ファイル: views.py プロジェクト: bianQ/blueyes
def show_cards(server: TexasServer, conn):
    player = server.players[conn]
    conn.send(Message(text=player.show_cards()).encode())
コード例 #17
0
ファイル: views.py プロジェクト: bianQ/blueyes
def stop(server: TexasServer, conn):
    server.players.pop(conn, None)
    conn.send(Message(text='', status=200).encode())
コード例 #18
0
ファイル: views.py プロジェクト: bianQ/blueyes
def my_info(server: TexasServer, conn):
    player = server.players[conn]
    text = f"玩家<{player.name}>,筹码量 {player.chips}"
    conn.send(Message(text=text, status=200).encode())