示例#1
0
def find_den(conn, group, ranker):
    """
    生成贼寇据点,可征讨
    :param ranker: 
    :param group: 
    :param conn: 
    :return: den
    """
    den = dict()
    den['d_group'] = group.get('g_id')
    den['d_name'] = random.choice(['山贼', '土匪', '强盗', '蛮夷', '流寇', '叛将'])
    den['d_corps'] = random.choice(Conn.get_level_ranker(conn, 6))
    den['d_ranker'] = random.randint(round(group.get('g_ranker') * 0.3),
                                     round(group.get('g_ranker') * 3.2))
    den['d_gold'] = random.randint(round(den.get('d_ranker') / 10),
                                   round(den.get('d_ranker') / 5))
    den['d_rations'] = random.randint(round(den.get('d_ranker') * 1.5),
                                      round(den.get('d_ranker') * 3.5))
    k = random.random() * random.random()
    den['d_gem'] = random.choice(Conn.find_treasure(conn)) if k > 0.8 else 0
    if group.get('g_status') == 1:
        print('发现{0}据点,拥有{1}共{2}人!请发兵镇压!'.format(
            den.get('d_name'),
            ranker.get(den.get('d_corps')).get('r_name'), den.get('d_ranker')))
    Conn.insert_data(conn, 'den', den)
示例#2
0
def auto_create_group(conn, g_num, avg_num, r_num):
    """
    自动生成指定数量的势力,并随机分配一定范围内的英雄数到势力中,并修改相应的英雄状态和属性
    :param conn: 数据库操作对象
    :param g_num: 指定生成势力数
    :param avg_num: 指定分配到势力的英雄数
    :param r_num: 指定分配到势力的英雄数波动范围
    :return: None
    """
    # 获取英雄信息
    heroes = Conn.get_heroes(conn)
    # 主公备选英雄ID列表
    wait_list = list(heroes.keys())
    # 主公信息
    lord_dict = dict()
    # 新建势力信息
    build_group = dict()
    # 势力所属英雄信息
    g_hero = dict()
    # 循环创建g_num个势力
    for i in range(g_num):
        # 分配到各个势力的英雄数范围
        h_num = avg_num + random.randint(0, r_num)
        # 从主公候选英雄列表中随机获取一个英雄ID
        h_id = random.choice(wait_list)
        # 从候选名单中移除已经选中的英雄ID
        wait_list.remove(h_id)
        # 新建势力信息
        build_group['g_lord'] = h_id
        build_group['g_name'] = '{}军'.format(heroes.get(h_id).get('h_name'))
        # 调用方法创建势力(向数据库写入势力信息)
        Conn.insert_data(conn, 'hero_group', build_group)
        # 主公英雄属性变化,五维全部+5,修改h_group为势力ID,修改状态为主公
        lord_dict['h_group'] = i + 1
        lord_dict['h_lead'] = heroes.get(h_id).get('h_lead') + 5
        lord_dict['h_force'] = heroes.get(h_id).get('h_force') + 5
        lord_dict['h_brain'] = heroes.get(h_id).get('h_brain') + 5
        lord_dict['h_politics'] = heroes.get(h_id).get('h_politics') + 5
        lord_dict['h_charm'] = heroes.get(h_id).get('h_charm') + 5
        lord_dict['h_status'] = 3
        # 数据库更新条件语句
        condition = 'h_id={}'.format(h_id)
        # 调用方法将英雄变更为主公(修改数据库内指定英雄的属性)
        Conn.update_data(conn, 'heroes', lord_dict, condition)
        # 循环分配特定个数的势力所属英雄
        for j in range(h_num):
            # 英雄属性变化
            g_hero['h_group'] = i + 1
            g_hero['h_status'] = 2
            # 从英雄列表中随机选择一个英雄加入势力
            h_id = random.choice(wait_list)
            # 从英雄列表中移除已加入势力的英雄ID
            wait_list.remove(h_id)
            # 数据库更新条件语句
            condition = 'h_id={}'.format(h_id)
            # 调用方法将英雄变更为势力所属(修改数据库内指定英雄的属性)
            Conn.update_data(conn, 'heroes', g_hero, condition)
    print('当前游戏难度将新增敌对势力共{}个!'.format(g_num))
示例#3
0
def new_group(conn, hero, c_num):
    """
    玩家新建势力
    :param conn: 数据库连接对象
    :param hero: 玩家新建英雄信息
    :param c_num: 当前游戏难度下新建势力可招揽的最大英雄数
    :return: None
    """
    # 新建势力信息
    build_group = dict()
    # 新主公信息
    lord_hero = dict()
    # 势力所属英雄信息
    g_hero = dict()
    # 势力信息
    build_group['g_id'] = 10
    build_group['g_lord'] = hero.get('h_id')
    build_group['g_name'] = '{}军'.format(hero.get('h_name'))
    # 调用方法创建新势力(向数据库中写入势力数据)
    Conn.insert_data(conn, 'hero_group', build_group)
    # 主公信息
    lord_hero['h_group'] = 10
    lord_hero['h_lead'] = hero.get('h_lead') + 5
    lord_hero['h_force'] = hero.get('h_force') + 5
    lord_hero['h_brain'] = hero.get('h_brain') + 5
    lord_hero['h_politics'] = hero.get('h_politics') + 5
    lord_hero['h_charm'] = hero.get('h_charm') + 5
    lord_hero['h_status'] = 3
    # 数据库更新条件语句
    condition = 'h_id={}'.format(hero.get('h_id'))
    # 调用方法更新主公属性(修改数据库中指定英雄的属性)
    Conn.update_data(conn, 'heroes', lord_hero, condition)
    # 获取英雄信息
    heroes = Conn.get_heroes(conn)
    # 候选英雄ID列表
    h_candidate = list()
    # 循环匹配在野英雄,并将英雄ID存放到候选英雄ID列表
    for k, v in heroes.items():
        if v.get('h_status') == 1:
            h_candidate.append(k)
    # 接收玩家选择的英雄ID,且只接收最大限定人数,并分割为列表存储
    PM.print_choice_hero(h_candidate, c_num, heroes)
    choices = input().strip().split(' ')[:c_num]
    # 循环更新所选英雄属性
    for choice in choices:
        g_hero['h_group'] = 10
        g_hero['h_status'] = 2
        condition = 'h_id={}'.format(choice)
        Conn.update_data(conn, 'heroes', g_hero, condition)
    print('新建势力{}成功!'.format(build_group.get('g_name')))
示例#4
0
def new_hero(conn):
    """
    玩家新建英雄,需输入基本信息,自动生成身份及五维
    :param conn: 数据库连接对象
    :return: hero_data
    """
    # 存储新建英雄数据信息
    hero_data = dict()
    # 分别接收从控制台输入的姓名性别及年龄
    h_name = input('请输入英雄姓名,不得超过4个字:\n').strip()[:4]
    h_gender = input('请输入英雄性别:\n').strip()
    h_age = int(input('请输入英雄年龄(不得小于15岁且不得大于70岁):\n').strip())
    # 重新生成属性的控制开关
    check = True
    # 身份备选列表
    hero_type = ['统帅', '武将', '军师', '宰辅']
    # 循环生成英雄属性,直到玩家确定英雄属性
    while check:
        # 随机获取一个身份
        types = random.randint(1, 4)
        h_identity = hero_type[types - 1]
        # 调用type_hero()方法随机生成五维
        hero_5 = type_hero(types)
        print(
            '新建英雄{0}\n性别:{1}\n年龄:{2}\n身份:{3}\n统率:{4}\n武力:{5}\n智力:{6}\n政治:{7}\n魅力:{8}'
            .format(h_name, h_gender, h_age, h_identity, hero_5[0], hero_5[1],
                    hero_5[2], hero_5[3], hero_5[4]))
        if int(input('是否确定?\n1 确定创建  2 重新生成\n')) == 1:
            hero_data['h_id'] = 500
            hero_data['h_name'] = h_name
            hero_data['h_gender'] = h_gender
            hero_data['h_age'] = h_age
            hero_data['h_identity'] = h_identity
            hero_data['h_lead'] = hero_5[0]
            hero_data['h_force'] = hero_5[1]
            hero_data['h_brain'] = hero_5[2]
            hero_data['h_politics'] = hero_5[3]
            hero_data['h_charm'] = hero_5[4]
            Conn.insert_data(conn, 'heroes', hero_data)
            print('新建英雄{}成功!'.format(h_name))
            # 接收开关控制
            check = False
    return hero_data
示例#5
0
def auto_create_hero(conn, num):
    """
    自动创建人物,包含人物姓名、人物性别和人物属性
    @ cp 读取配置文件内容
    @ last_names 接收配置文件中姓氏集
    @ first_names_female 接收配置文件中女性名集
    @ first_names_male 接收配置文件中男性名集
    @ hero_data 存储新建人物信息的字典,内容包含姓名,性别,统率,武力,智力,政治,魅力
    @ hero_types 存储着人物身份的list
    @ gen 随机生成性别参数
    @ types 随机生成身份参数
    @ last_name 随机从last_names姓氏集中选择一个作为新建人物姓氏
    @ first_name 依据gen参数的不同分别从first_names_female女性名集或first_names_male男性名集中随机选择一个作为新建人物名
    @ h_name 将随机选取的姓氏和名拼接为新建人物姓名
    @ h_gender 依据gen参数确定新建人物性别
    @ h_identity 随机生成新建人物身份
    @ h_lead 随机生成新建人物统率
    @ h_force 随机生成新建人物武力
    @ h_brain 随机生成新建人物智力
    @ h_politics 随机生成新建人物政治
    @ h_charm 随机生成新建人物魅力
    程序执行,调用MySQLConn来执行数据入库的操作
    @ n_gender 接收自动生成的num个英雄的姓名和性别list
    @ student 接收完整的学生信息字典
    :param conn: 数据库连接对象
    :param num: 需要生成的英雄信息条数
    :return: None
    """
    # 读取配置文件
    cp = configparser.ConfigParser()
    cp.read('./conf.cfg', encoding='utf-8')
    # 从配置文件中获取指定内容并进行格式化处理切分
    last_names = cp.get('NAME', 'LN').strip().replace('\n', ' ').split(' ')
    first_names_female = cp.get('NAME', 'FN1').strip().replace('\n',
                                                               ' ').split(' ')
    first_names_male = cp.get('NAME', 'FN2').strip().replace('\n',
                                                             ' ').split(' ')
    hero_data = dict()
    hero_type = ['统帅', '武将', '军师', '宰辅']
    for n in range(num):
        gen = random.randint(1, 2)
        types = random.randint(1, 4)
        last_name = random.choice(last_names)
        # a if k == v else b,这是三元运算写法,解读为当k=v为True时,返回a,为False时,返回b
        first_name = random.choice(first_names_female if gen ==
                                   1 else first_names_male)
        # '%s' % k,这是字符串占位符,使用%s占位,实际内容为k,中间使用%做格式化声明
        h_name = '{0}{1}'.format(last_name, first_name)
        h_gender = '{}'.format('女' if gen == 1 else '男')
        h_age = random.randint(15, 60)
        h_identity = hero_type[types - 1]
        hero_5 = type_hero(types)
        hero_data['h_name'] = h_name
        hero_data['h_gender'] = h_gender
        hero_data['h_age'] = h_age
        hero_data['h_identity'] = h_identity
        hero_data['h_lead'] = hero_5[0]
        hero_data['h_force'] = hero_5[1]
        hero_data['h_brain'] = hero_5[2]
        hero_data['h_politics'] = hero_5[3]
        hero_data['h_charm'] = hero_5[4]
        Conn.insert_data(conn, 'heroes', hero_data)
    print("当前游戏难度将诞生各类英雄共{}人!".format(num))