add names

This commit is contained in:
bridge
2025-08-28 22:35:02 +08:00
parent 96615c0c0d
commit e0d3615ca5
7 changed files with 80 additions and 5 deletions

View File

@@ -41,6 +41,7 @@
- [ ] 角色关系系统
- [ ] 性格系统设计
- [ ] 角色特殊能力
- [ ] 角色称号&绰号
- [ ] 战斗相关
- [ ] 属性点分配
- [ ] 技能系统(功法)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

After

Width:  |  Height:  |  Size: 492 KiB

View File

@@ -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}晋升为修士了。")

View File

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

68
src/utils/names.py Normal file
View File

@@ -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()

View File

@@ -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),

View File

@@ -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),