예제 #1
0
    def __init__(self, desk_id, custom_config=None, game_type="default"):
        self.desk_id = desk_id
        self.game_config = GameConfig(game_type=game_type)
        print("custom_config=", custom_config)
        if custom_config:
            self.game_config.update_config(**custom_config)

        self.card_dealer = CardDealer(c_types=self.game_config.used_card_types)

        # 牌值分析器
        self.card_analyse = CardAnalyse(
            card_type_list=self.game_config.used_card_types,
            base_hu_type=self.game_config.used_hu_types)
        # 胡牌类型管理器
        self.hu_manager = HuTypeManager(self.game_config,
                                        card_analyse=self.card_analyse)

        self.game_status = GameStatus.WAIT_AGREE
        self.players = [
            Player(seat_id=i, game_data=self)
            for i in range(self.max_player_num)
        ]

        self.banker_seat_id = -1  # 庄家座位号
        self.hu_player_static = {}  # 当次已胡牌玩家统计(不存血战中当局的历史胡牌信息)
        # {seat_id:{type:[], is_zi_mo:0/1, source:int, card:int}, ...}

        self.last_chu_card_val = BLACK  # 最近一次出的牌
        self.cur_deal_card_val = BLACK  # 当前牌局上正在操作的那张牌
        self.last_chu_card_seat_id = -1  # 最近一次出牌玩家的位置
        self.last_get_card_val = [BLACK, BLACK, BLACK, BLACK]  # 最近一次某位置玩家获得的牌
        self.next_speaker_callback = {}  # 接下来玩家待进行的操作(其他玩家都选择过时)
        # {type: CallbackFuncType, seat_id: int, call_params: {}}

        self.cur_players_to_act = {}  # 当前所有玩家待进行的操作
        # {seat_id:{Act.HU:{}, Act.PENG:{}, ...}, seat_id: []}
        self.cur_players_acted = {}  # 当前出牌轮次所有玩家已经作出响应的玩家操作
        # {seat_id:{"act_type":Act.HU, "params":act_params},...}

        self.settle_data = {}  # 当局游戏输赢情况 {total_points:[],
        # detail:[{type:int, points:[,...,], params:{}}, ...]}

        self.yi_chu_card_vals = []  # 当局已出的牌, 所有玩家都可见的牌
        self.dealed_card_vals = []  #

        self.act_record_list = []  # 当局动作记录

        self.test_sure_next_card = [BLACK for _ in range(self.max_player_num)
                                    ]  # 测试接口使用:指定下一张牌

        self.round_info = RoundData(player_num=self.game_config.max_player_num)

        self.state_machine = StateMachine(self)
예제 #2
0
파일: buqiuren.py 프로젝트: st199051/echecs
        super(BuQiuRen, self).__init__()

    def is_this_type(self, hand_card, card_analyse):
        used_card_type = [CardType.WAN]  # 此游戏中使用的花色
        if len(hand_card.chi_card_vals) > 0:
            return False
        if len(hand_card.peng_card_vals) > 0:
            return False
        if len(hand_card.dian_gang_card_vals) > 0:
            return False
        return True


if __name__ == "__main__":
    pass
    card_analyse = CardAnalyse()
    hand_card = HandCard(0)
    # hand_card.hand_card_info = {
    #     1: [9, 1, 1, 1, 1, 1, 1, 1, 1, 1],  # 万
    #     2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # 条
    #     3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # 饼
    #     4: [2, 2, 0, 0, 0],                 # 风
    #     5: [3, 3, 0, 0],                    # 箭
    # }
    hand_card.hand_card_info = {
        1: [8, 0, 1, 1, 1, 1, 1, 1, 0, 2],  # 万
        2: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # 条
        3: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # 饼
        4: [3, 3, 0, 0, 0],  # 风
        5: [0, 0, 0, 0],  # 箭
    }