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)
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))
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')))
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
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))