diff --git a/README.md b/README.md index 8dc52ff..9a91f43 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ - [ ] 角色关系系统 - [ ] 性格系统设计 - [ ] 角色特殊能力 +- [ ] 角色称号&绰号 - [ ] 战斗相关 - [ ] 属性点分配 - [ ] 技能系统(功法) diff --git a/assets/screenshot.png b/assets/screenshot.png index cfe8323..15d8d56 100644 Binary files a/assets/screenshot.png and b/assets/screenshot.png differ diff --git a/src/sim/simulator.py b/src/sim/simulator.py index ebdf3a1..978ebe9 100644 --- a/src/sim/simulator.py +++ b/src/sim/simulator.py @@ -1,10 +1,11 @@ import random from src.classes.calendar import Month, Year, next_month -from src.classes.avatar import Avatar, get_new_avatar_from_ordinary +from src.classes.avatar import Avatar, get_new_avatar_from_ordinary, Gender from src.classes.age import Age from src.classes.world import World from src.classes.event import Event, NullEvent +from src.utils.names import get_random_name class Simulator: def __init__(self, world: World): @@ -40,8 +41,9 @@ class Simulator: # 新角色 if random.random() < self.brith_rate: - name = f"无名" age = random.randint(16, 60) + gender = random.choice(list(Gender)) + name = get_random_name(gender) new_avatar = get_new_avatar_from_ordinary(self.world, self.world.year, name, Age(age)) self.avatars[new_avatar.id] = new_avatar event = Event(self.world.year, self.world.month, f"{new_avatar.name}晋升为修士了。") diff --git a/src/tools/run.py b/src/tools/run.py index 02df15c..ca0552a 100644 --- a/src/tools/run.py +++ b/src/tools/run.py @@ -15,6 +15,7 @@ from src.classes.cultivation import CultivationProgress from src.classes.root import Root from src.classes.age import Age from src.tools.create_map import create_cultivation_world_map +from src.utils.names import get_random_name def clamp(value: int, lo: int, hi: int) -> int: @@ -38,13 +39,14 @@ def make_avatars(world: World, count: int = 12, current_year: Year = Year(100)) avatars: dict[str, Avatar] = {} width, height = world.map.width, world.map.height for i in range(count): - name = f"NPC{i+1:03d}" # 随机生成年龄,范围从16到60岁 age_years = random.randint(16, 60) # 根据当前年份和年龄计算出生年份 birth_year = current_year - age_years birth_month = random.choice(list(Month)) gender = random_gender() + # 使用仙侠风格的随机名字 + name = get_random_name(gender) # 随机生成level,范围从0到120(对应四个大境界) level = random.randint(0, 120) diff --git a/src/utils/names.py b/src/utils/names.py new file mode 100644 index 0000000..7bfafea --- /dev/null +++ b/src/utils/names.py @@ -0,0 +1,68 @@ +import random +from src.classes.avatar import Gender + +""" +仙侠风格姓名数据库 +包含50个姓氏和200个名字(男女各100个) +""" + +# 50个仙侠风格的姓氏 +SURNAMES = [ + "司马", "慕容", "上官", "独孤", "东方", "南宫", "西门", "北冥", "欧阳", "夏侯", + "令狐", "诸葛", "皇甫", "公孙", "轩辕", "百里", "呼延", "闻人", "长孙", "段干", + "云", "叶", "夜", "风", "霜", "雪", "星", "月", "冷", "凌", + "苏", "陆", "萧", "林", "君", "墨", "白", "顾", "秦", "楚", + "赵", "唐", "韩", "魏", "宋", "齐", "燕", "晋", "陈", "李" +] + +# 200个仙侠风格的名字 +MALE_GIVEN_NAMES = [ + # 男性名字 (100个) + "逍遥", "无极", "天行", "凌云", "破晓", "斩风", "御剑", "追星", "问天", "寻仙", + "玄机", "天骄", "无双", "惊鸿", "绝尘", "傲天", "剑心", "风华", "无尘", "天启", + "墨染", "凌霄", "天羽", "星辰", "飞雪", "幽冥", "天籁", "破军", "神威", "无痕", + "天策", "剑魂", "风流", "绝世", "天命", "无敌", "傲骨", "星河", "天机", "风云", + "天成", "无忧", "破空", "凌波", "天涯", "风尘", "玄武", "天阙", "无量", "剑仙", + # 新增的50个平凡仙侠名字 + "云舒", "风平", "志远", "明轩", "建安", "文昭", "德华", "志明", "文涛", "建国", + "石坚", "水清", "木华", "火旺", "土安", "金贵", "银河", "铜山", "铁柱", "钢强", + "春生", "夏华", "秋实", "冬雪", "东升", "西落", "南飞", "北望", "中正", "和平", + "安然", "从容", "淡然", "自在", "清净", "宁静", "平和", "温良", "恭俭", "让人", + "文雅", "斯文", "儒雅", "温文", "和善", "慈祥", "宽厚", "敦厚", "朴实", "忠厚" +] + +FEMALE_GIVEN_NAMES = [ + # 女性名字 (100个) + "如雪", "若梦", "凝香", "紫霞", "月华", "清音", "蝶舞", "花颜", "雅韵", "诗涵", + "静雯", "慕蓉", "婉儿", "柔情", "倾城", "红颜", "如烟", "妙音", "冰心", "玉颜", + "如玉", "清影", "梦瑶", "紫嫣", "霜华", "若水", "青莲", "雪儿", "慧心", "素手", + "如意", "诗雨", "梦蝶", "紫萱", "冰蓮", "若兰", "清雅", "雪梅", "慕雪", "天音", + "如风", "诗韵", "梦云", "紫烟", "冰雪", "若霜", "清秋", "雪莲", "慕凝", "天香", + # 新增的50个平凡仙侠名字 + "小雨", "春花", "夏草", "秋叶", "冬梅", "东篱", "西园", "南风", "北雁", "中庭", + "翠云", "红梅", "绿柳", "黄菊", "白莲", "紫薇", "粉桃", "青竹", "蓝兰", "银杏", + "静好", "安然", "从容", "淡雅", "温柔", "贤慧", "端庄", "淑雅", "文静", "秀丽", + "春兰", "夏荷", "秋菊", "冬梅", "晨曦", "暮霞", "朝阳", "夕阳", "正午", "子夜", + "小芸", "小娟", "小红", "小翠", "小兰", "小梅", "小雪", "小霞", "小燕", "小凤" +] + +def get_random_male_name(): + """ + 获取随机男性全名 + """ + return random.choice(SURNAMES) + random.choice(MALE_GIVEN_NAMES) + +def get_random_female_name(): + """ + 获取随机女性全名 + """ + return random.choice(SURNAMES) + random.choice(FEMALE_GIVEN_NAMES) + +def get_random_name(gender: Gender) -> str: + """ + 获取随机全名 + """ + if gender == Gender.MALE: + return get_random_male_name() + else: + return get_random_female_name() \ No newline at end of file diff --git a/tests/test_basic.py b/tests/test_basic.py index 0c4dbea..7a8ae07 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -4,6 +4,7 @@ from src.classes.calendar import Month, Year from src.classes.world import World from src.classes.tile import Map, TileType from src.classes.age import Age +from src.utils.names import get_random_name def test_basic(): """ @@ -18,7 +19,7 @@ def test_basic(): avatar = Avatar( world=world, - name="John Doe", + name=get_random_name(Gender.MALE), id=str(uuid.uuid4()), birth_month=Month.JANUARY, birth_year=Year(2000), diff --git a/tests/test_simulator.py b/tests/test_simulator.py index e0531cd..7fc2e85 100644 --- a/tests/test_simulator.py +++ b/tests/test_simulator.py @@ -6,6 +6,7 @@ from src.classes.calendar import Month, Year from src.classes.world import World from src.classes.tile import Map, TileType from src.classes.action import Move +from src.utils.names import get_random_name def test_simulator_step_moves_avatar_and_sets_tile(): @@ -23,7 +24,7 @@ def test_simulator_step_moves_avatar_and_sets_tile(): # 将角色放在地图中心,避免越界 avatar = Avatar( world=world, - name="Tester", + name=get_random_name(Gender.MALE), id="1", birth_month=Month.JANUARY, birth_year=Year(2000),