尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Faker::Games::DnD 完整使用指南:在 Ruby 项目中生成《龙与地下城》角色数据

Faker::Games::DnD 完整使用指南:在 Ruby 项目中生成《龙与地下城》角色数据 Faker::Games::DnD 完整使用指南在 Ruby 项目中生成《龙与地下城》角色数据【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/faker本指南以 doc/games/dnd.md 为骨架系统讲解 Faker 库中Faker::Games::DnD模块的全部 14 个生成方法从阵营Alignment、职业Class、种族Race到角色名、城市、语言、武器与怪物。阅读完本文后你将掌握如何在 Ruby 项目中快速生成一套风格统一的 DD 世界观数据用于游戏原型、桌游工具、NPC 生成器或测试数据填充。一、模块概览一个方法对应一类 DD 数据Faker::Games::DnD位于 lib/faker/games/dnd.rb继承自Faker::Base通过fetch(dnd.xxx)从 lib/locales/en/dnd.yml 中的dnd命名空间读取数据并随机采样。其方法命名与《龙与地下城》Dungeons DragonsDD第五版PHB 规则书中的概念一一对应覆盖角色创建、命名和冒险遭遇的核心要素方法返回内容数据键dnd.xxx示例输出alignment阵营九宫格alignmentsLawful Neutralbackground角色背景backgroundsUrchincity城市名citiesEarthfastfirst_name名字name.first_nameCelestineklass职业klassesWarlocklanguage语言languagesGnomishlast_name姓氏name.last_nameNightbreezemelee_weapon近战武器melee_weaponsHandaxemonster怪物monstersManticorename完整姓名name.first_namename.last_nameDrust Silverveilrace种族racesDwarfranged_weapon远程武器ranged_weaponsShortbowtitle_name带称号的名字name.first_namename.titleSelene the Dreamer二、快速上手14 个方法的完整示例在 Gemfile 中加入gem faker并执行bundle install后即可直接调用。以下是文档中的全部示例Faker::Games::DnD.alignment # Lawful Neutral Faker::Games::DnD.background # Urchin Faker::Games::DnD.city # Earthfast Faker::Games::DnD.first_name # Celestine Faker::Games::DnD.klass # Warlock Faker::Games::DnD.language # Gnomish Faker::Games::DnD.last_name # Nightbreeze Faker::Games::DnD.melee_weapon # Handaxe Faker::Games::DnD.monster # Manticore Faker::Games::DnD.name # Drust Silverveil Faker::Games::DnD.race # Dwarf Faker::Games::DnD.ranged_weapon # Shortbow Faker::Games::DnD.title_name # Selene the Dreamer每次调用都会从对应数据列表中随机返回一个值因此同一方法多次调用结果通常不同。三、角色创建实战组合方法生成完整 NPC单个方法生成的是离散元素实际使用中通常将多个方法组合快速拼出一个立体的角色卡。例如def generate_npc { name: Faker::Games::DnD.name, race: Faker::Games::DnD.race, klass: Faker::Games::DnD.klass, alignment: Faker::Games::DnD.alignment, background: Faker::Games::DnD.background, language: Faker::Games::DnD.language, hometown: Faker::Games::DnD.city, weapon: [Faker::Games::DnD.melee_weapon, Faker::Games::DnD.ranged_weapon].sample, title: Faker::Games::DnD.title_name } end generate_npc # {:nameThorgrim Nightshade, :raceDwarf, :klassFighter, # :alignmentLawful Good, :backgroundSoldier, :languageDwarvish, # :hometownCitadel Adbar, :weaponWarhammer, :titleThorgrim the Unyielding}这种组合特别适合生成 NPC、敌方首领或用于骰子驱动dice-driven故事测试。四、三种名字生成方式first_name、last_name、name、title_name模块提供四种与名字相关的生成方式覆盖从「单一名」到「完整称号」的粒度Faker::Games::DnD.first_name # Celestine 仅名字 Faker::Games::DnD.last_name # Nightbreeze 仅姓氏 Faker::Games::DnD.name # Drust Silverveil 名 姓 Faker::Games::DnD.title_name # Selene the Dreamer 名 称号the Dreamer从源码看name与title_name并非独立数据而是由first_name分别与last_name、title拼接而成# lib/faker/games/dnd.rb def name #{fetch(dnd.name.first_name)} #{fetch(dnd.name.last_name)} end def title_name #{fetch(dnd.name.first_name)} #{fetch(dnd.name.title)} end这意味着name与title_name可能出现相同的名但姓氏与称号来自不同数据集。称号数据位于 lib/locales/en/dnd.yml 的name.title键下包含the Brave、the Cunning、the Wise等 48 个可选称号适合生成某某人称号式的中世纪风味角色名。五、数据源解析所有生成值来自 dnd.yml 本地化文件Faker::Games::DnD本身不内置任何硬编码数据全部取值由 lib/locales/en/dnd.yml 中的en.faker.dnd命名空间提供en: faker: dnd: alignments: - Chaotic Evil - Chaotic Good - Chaotic Neutral - Lawful Evil - Lawful Good - Lawful Neutral - Neutral Evil - Neutral Good - True Neutral klasses: - Artificer - Barbarian - Bard - ... races: - Aarakocra - Aasimar - Dragonborn - Dwarf - ...各数据集规模大致如下以当前仓库数据为准alignments9 项完整覆盖 DD 经典的九宫格阵营体系秩序/混乱 × 善良/中立/邪恶。backgrounds50 项除 PHB 标准背景Acolyte、Soldier、Spy、Urchin 等外还包含大量战役扩展背景如 Cormanthor Refugee、Waterdhavian Noble、Ticklebelly Nomad。cities50 个来自被遗忘的国度Forgotten Realms等战役设定的城市名如 Neverwinter、Waterdeep、Luskan、Zhentil Keep。klasses14 个职业含 Artificer、Blood Hunter 等扩展职业。languages16 种常见语言覆盖 Abyssal、Draconic、Elvish、Undercommon 等。melee_weapons / ranged_weapons分别约 27 种近战与 8 种远程武器来自 5e 武器表。monsters约 150 种生物从 Aarakocra、Balor、Beholder 系列到 Tarrasque、Zombie。races约 38 个种族涵盖 PHB、Volos Guide、Eberron 等来源。name.first_name / last_name / title分别约 90 / 39 / 48 项构成完整命名体系。数据采样原理所有方法最终都调用Faker::Base.fetch见 lib/faker.rbdef fetch(key) fetched sample(translate(faker.#{key})) if fetched.match(%r{^/}) fetched.match(%r{/$}) # A regex regexify(fetched) else fetched end end即通过 I18n 按当前 locale 翻译出faker.dnd.xxx对应的数组再用sample随机取一个元素若数据项是/regex/形式还会走regexify生成匹配该正则的字符串。translate在缺失当前语言数据时会自动回退到en见 lib/faker.rb 的translate方法因此即使没有对应语言的 dnd 翻译也能保证调用不抛异常。六、与 Faker 通用机制的结合随机种子与本地化Faker::Games::DnD的随机行为完全继承自 Faker 的通用配置机制lib/faker.rb 中的Faker::Config1. 固定随机种子保证可复现Faker::Config.random Random.new(42) Faker::Games::DnD.race # Grung Faker::Games::DnD.race # Grung Faker::Config.random Random.new(42) # 重置后再次得到相同结果 Faker::Games::DnD.race # Grung这在测试中非常有用可让生成数据稳定可断言。2. 切换 localeFaker::Games::DnD.race # 默认 en 数据 Faker::Config.locale :en由于当前仓库仅 lib/locales/en/dnd.yml 提供了dnd命名空间其他语言如:fr、:ja缺少 dnd 翻译时会自动回退到en行为由translate的 fallback 逻辑保证lib/faker.rb。3. 惰性加载Faker::Games::DnD所属的Faker::Games命名空间lib/faker/games.rb支持通过FAKER_LAZY_LOADtrue环境变量或Faker::Config.lazy_loading true开启按需加载降低大型应用的内存占用。七、测试验证每个方法都有对应断言仓库为每个方法都编写了单元测试见 test/faker/games/test_faker_dnd.rb。测试模式统一对每个方法断言返回值匹配/\w/确保不为空且为合法单词字符序列class TestFakerDnD Test::Unit::TestCase def setup tester Faker::Games::DnD end def test_alignment assert_match(/\w/, tester.alignment) end def test_title_name assert_match(/\w/, tester.title_name) end # ...其余 11 个方法同理 end这意味着所有 14 个公开方法alignment、background、city、first_name、klass、language、last_name、melee_weapon、monster、name、race、ranged_weapon、title_name都有测试覆盖接口稳定可用。八、版本演进与注意事项从源码中的faker.version注解可以看出模块的演进轨迹2.13.0alignment、background、klass最早加入2.14.0新增city、language、melee_weapon、monster、race、ranged_weaponnext未发布版本新增first_name、last_name、name、title_name这一组名字生成方法。使用时的几点建议命名差异klass而非classRuby 保留字background、race等与 5e 术语一致。数据来源标注背景、职业、种族主要取自 PHB 及扩展战役设定怪物清单以 5e 怪物图鉴为基础但部分条目如 Deck of Many Things、Figurine of Wondrous Power实为魔法物品混合在 monsters 列表中用于生成时应注意语境。组合可复现性批量生成 NPC 时如需完整复现请同时固定Faker::Config.random并记录调用顺序。九、总结Faker::Games::DnD通过 14 个方法 一份 lib/locales/en/dnd.yml 数据文件完整覆盖了 DD 角色创建与冒险数据生成的主要场景九宫格阵营、职业、种族、背景、语言、城市、近战/远程武器、怪物以及三级粒度的名字体系。它完全复用 Faker 的fetch/translate/sample机制天然支持随机种子复现与 locale 回退并有 test/faker/games/test_faker_dnd.rb 的完整测试保障。无论你是做桌游工具、NPC 批量生成、游戏测试数据填充还是单纯想在项目里加一点奇幻风味它都是开箱即用的选择。【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/faker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表