发个刚写的白狼王骑士滚车吧

小右 (UID: 4912) [复制链接]
帖子链接已复制到剪贴板
帖子已经有人评论啦,不支持删除!

737 0

捋的规则  狼人杀真的是社恐克星

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time        : 2024/10/8 上午3:28
# @Author      : Mini-Right
# @Email       : www@anyu.wang
# @File        : 狼人杀优化.py
# @Software    : PyCharm
# @Description : 白狼王骑士

from datetime import datetime, timedelta
from enum import Enum


class WerewolfRoles(Enum):
    WEREWOLF = '狼'
    VILLAGER = '民'
    SEER = '预言家'
    KNIGHT = '骑士'
    GUARDIAN = '守卫'
    WHITE_WEREWOLF = '白狼王'


class WerewolfKilling(object):
    def __init__(self, seat_map: dict):
        self.seat_map = seat_map
        self.seer = None
        self.cards = []
        self.first_kill = None
        self.check = []
        self.cavalier = None
        self.destructs = []
        self.kills = []
        self.remain = None
        self.end_time_minute = None

    def calc_cards(self):
        """
        第一位 神 预言家
        第二位 民 预言家下的民
        第三位 狼 预言家下的狼
        预言家在小号则顺时针转盘计算
        
        如果预言家是1号 则卡神换成骑士
        """
        seer_position_updated = [key for key, value in self.seat_map.items() if value == WerewolfRoles.SEER.value][0]
        next_positions = list(self.seat_map.keys())[list(self.seat_map.keys()).index(seer_position_updated) + 1:] + list(self.seat_map.keys())[:list(self.seat_map.keys()).index(seer_position_updated) + 1]
        next_werewolf_updated = next((pos for pos in next_positions if self.seat_map[pos] == WerewolfRoles.WEREWOLF.value), None)
        next_villager_updated = next((pos for pos in next_positions if self.seat_map[pos] == WerewolfRoles.VILLAGER.value), None)
        self.seer = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.SEER.value), None)
        # 如果预言家是1号 则卡神换成骑士
        if self.seer == 1:
            seer = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.KNIGHT.value), None)
        self.cards = [self.seer, next_villager_updated, next_werewolf_updated]
        print('卡', self.cards)

    def calc_first_kill(self):
        """
        首刀	守卫
        """
        self.first_kill = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.GUARDIAN.value), None)
        print('首刀', self.first_kill)

    def calc_check(self):
        """
        第一位 特殊狼
        第二位 卡狼下面的狼
        第三位 卡狼(预言家下的狼)
        """
        check_one = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.WHITE_WEREWOLF.value), None)

        check_two = next((number for number, role in self.seat_map.items() if number > self.cards[2] and role == WerewolfRoles.WEREWOLF.value), None)
        if check_two is None:
            check_two = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.WEREWOLF.value), None)

        check_three = self.cards[2]

        self.check = [check_one, check_two, check_three]
        print('验', self.check)

    def calc_cavalier(self):
        """
        决斗 特殊狼
        """
        self.cavalier = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.WHITE_WEREWOLF.value), None)
        print('骑戳', self.cavalier)

    def calc_destructs(self):
        """
        卡狼下的狼顺序自爆
        如果小狼是1号 则最先自爆
        """
        if self.seat_map.get(1) == WerewolfRoles.WEREWOLF.value:
            self.destructs.append(1)

        for number, role in self.seat_map.items():
            if role == WerewolfRoles.WEREWOLF.value and number != self.cards[2] and number not in self.destructs:
                self.destructs.append(number)

        print('爆', self.destructs)

    def calc_kills(self):
        """
        第一位 第一位不卡民
        第二位 骑士
        第三位 第二位不卡民
        如果预言家是1号 第二位变成预言家
        :return:
        """
        kill_one = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.VILLAGER.value and number != self.cards[1]), None)

        kill_two = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.SEER.value and self.seer == 1), None)
        if not kill_two:
            kill_two = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.KNIGHT.value), None)

        kill_three = next((number for number, role in self.seat_map.items() if role == WerewolfRoles.VILLAGER.value and number != self.cards[1] and number != kill_one), None)

        self.kills = [kill_one, kill_two, kill_three]
        print('刀', self.kills)

    def calc_remain(self):
        """
        推 剩下的非卡民
        :return:
        """
        self.remain = next(
            (
                number for number, role in self.seat_map.items()
                if role == WerewolfRoles.VILLAGER.value and number != self.cards[1] and number not in self.kills),
            None
        )
        print('推', self.remain)

    def calc_end_time(self):
        """
        结束时间 当前时间后25分钟
        :return:
        """
        current_time = datetime.now()
        end_time = current_time + timedelta(minutes=25)
        self.end_time_minute = end_time.minute
        print('结束时间', self.end_time_minute)

    @staticmethod
    def template():
        return """
💠小右骑士车💠
{end_time_minute}下课 {cards} 狼卡
首夜:刀{first_kill}
预验:{check}
白天:骑戳{cavalier}
顺爆:{destructs}.推{remain}
第②夜狼刀:{kills}
        """

    def generate(self):
        self.calc_cards()
        self.calc_first_kill()
        self.calc_check()
        self.calc_cavalier()
        self.calc_destructs()
        self.calc_kills()
        self.calc_remain()
        self.calc_end_time()
        calc_info = {
            'cards': self.cards,
            'first_kill': self.first_kill,
            'check': self.check,
            'cavalier': self.cavalier,
            'destructs': self.destructs,
            'kills': self.kills,
            'remain': self.remain,
            'end_time_minute': self.end_time_minute,
        }
        for k, v in calc_info.items():
            if isinstance(v, list):
                calc_info[k] = '.'.join([str(_) for _ in v])

        text = self.template().format(**calc_info)

        print(text)
        return text


if __name__ == '__main__':
    seat_map = {
        1: '预言家',
        2: '女巫',
        3: '守卫',
        4: '狼',
        5: '狼',
        6: '狼',
        7: '骑士',
        8: '白狼王',
        9: '民',
        10: '民',
        11: '民',
        12: '民',
    }
    WerewolfKilling(seat_map).generate()
这家伙太懒了,什么也没留下。
已有评论 ( 0 )
提示:您必须 登录 才能查看此内容。
创建新帖
自助推广点击空位自助购买TG联系
确认删除
确定要删除这篇帖子吗?删除后将无法恢复。
删除成功
帖子已成功删除,页面将自动刷新。
删除失败
删除帖子时发生错误,请稍后再试。