golang奇幻名称生成器插件库fantasyname的使用
golang奇幻名称生成器插件库fantasyname的使用
这是一个基于RinkWorks描述的命名生成器的Golang实现,代码源自https://github.com/skeeto/fantasyname。
示例
使用示例:
import (
"fmt"
"log"
"time"
"math/rand"
fn "github.com/s0rg/fantasyname"
)
func main() {
rand.Seed(time.Now().UnixNano())
// 编译名称生成器模式
// sV'i 模式表示:音节 + 元音组合 + 单引号 + 侮辱词
// Collapse(true) 表示压缩连续重复字符
// RandFn(rand.Intn) 使用标准库的随机数生成器
gen, err := fn.Compile("sV'i", fn.Collapse(true), fn.RandFn(rand.Intn))
if err != nil {
log.Fatal(err)
}
// 生成并打印奇幻名称,例如:entheu'loaf
fmt.Println(gen.String())
}
你可以运行这个示例来查看结果。
模式语法
字母s
, v
, V
, c
, B
, C
, i
, m
, M
, D
, 和 d
代表不同类型的随机替换:
s
- 通用音节v
- 元音V
- 元音或元音组合c
- 辅音B
- 适合单词开头的辅音或辅音组合C
- 适合单词任何位置的辅音或辅音组合i
- 侮辱词m
- 黏糊糊的名字M
- 黏糊糊的名字结尾D
- 适合愚蠢人名的辅音d
- 适合愚蠢人名的音节(以元音开头)
其他字符会原样输出。
括号()
内的所有字符都会原样输出。例如,模式s(dim)
会输出一个随机通用音节后跟dim
。
尖括号<>
内的字符会从上面的表格中发出模式。可以想象整个模式都包裹在其中一个中。
在这两种分组中,竖线|
表示随机选择。允许空组。例如,(foo|bar)
会发出foo
或bar
。模式<c|v|>
会发出辅音、元音或什么都不发出。
感叹号!
表示大写后面跟随的组件。例如,!(foo)
会发出Foo
,而v!s
会发出小写元音后跟大写的音节,如eRod
。
完整示例
package main
import (
"fmt"
"log"
"math/rand"
"time"
fn "github.com/s0rg/fantasyname"
)
func main() {
rand.Seed(time.Now().UnixNano())
// 定义不同的名称生成模式
patterns := []string{
"sV'i", // 音节+元音组合+单引号+侮辱词
"!Cv!c", // 大写辅音组合+小写元音+大写辅音
"(The )!cV", // "The " + 大写辅音 + 元音组合
"<B|M|v>", // 开头辅音组合 或 黏糊名字结尾 或 元音
}
for _, p := range patterns {
// 为每个模式创建生成器
gen, err := fn.Compile(p, fn.Collapse(true), fn.RandFn(rand.Intn))
if err != nil {
log.Fatal(err)
}
// 生成5个名称
fmt.Printf("Pattern: %q\n", p)
for i := 0; i < 5; i++ {
fmt.Println(" ", gen.String())
}
fmt.Println()
}
}
这个完整示例展示了如何使用不同的模式生成奇幻名称,每个模式生成5个示例名称。
更多关于golang奇幻名称生成器插件库fantasyname的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang奇幻名称生成器插件库fantasyname的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang奇幻名称生成器插件库fantasyname使用指南
fantasyname是一个用于生成奇幻风格名称的Golang库,非常适合游戏开发、小说创作等需要随机名称的场景。下面我将详细介绍如何使用这个库。
安装
首先安装fantasyname库:
go get github.com/jasondavies/fantasyname
基本用法
1. 简单名称生成
package main
import (
"fmt"
"github.com/jasondavies/fantasyname"
)
func main() {
// 创建一个新的名称生成器
generator := fantasyname.New()
// 生成一个随机名称
name := generator.Generate()
fmt.Println("随机奇幻名称:", name)
}
2. 使用特定模式生成
fantasyname支持使用模式字符串来定义名称生成规则:
func main() {
// 定义名称生成模式
pattern := "sV'i"
// 创建带有模式的生成器
generator := fantasyname.New(fantasyname.WithPattern(pattern))
// 生成多个名称
for i := 0; i < 5; i++ {
name := generator.Generate()
fmt.Println(name)
}
}
模式语法
fantasyname使用特殊字符定义名称结构:
C
- 辅音V
- 元音v
- 元音或"y"c
- 辅音或"y"s
- 音节i
- 从内置列表中随机选择一个音节'
- 插入撇号- 插入空格
-
- 插入连字符D
- 随机辅音组合d
- 随机元音组合
示例模式
patterns := []string{
"sVsVs", // 3音节名称 (如 "Aelarion")
"CvCvC", // 交替辅音元音 (如 "Kyrin")
"s s", // 两个单词名称 (如 "Shadow Fang")
"s's", // 带撇号名称 (如 "D'rizzt")
"s-i", // 带连字符名称 (如 "Storm-born")
}
高级用法
1. 自定义音节列表
func main() {
// 自定义音节列表
syllables := []string{
"ael", "thor", "wyn", "mir", "dri",
"zzt", "storm", "shadow", "blade",
}
generator := fantasyname.New(
fantasyname.WithSyllables(syllables),
fantasyname.WithPattern("sVs"),
)
fmt.Println(generator.Generate())
}
2. 组合多个模式
func main() {
generator := fantasyname.New(
fantasyname.WithPatterns([]string{
"s s",
"s's",
"s the s",
}),
)
for i := 0; i < 10; i++ {
fmt.Println(generator.Generate())
}
}
3. 创建特定种族的名称生成器
func createElfNameGenerator() *fantasyname.Generator {
return fantasyname.New(
fantasyname.WithSyllables([]string{
"ael", "ar", "il", "or", "wyn",
"thas", "mir", "riel", "dri", "van",
}),
fantasyname.WithPattern("sVs"),
)
}
func createDwarfNameGenerator() *fantasyname.Generator {
return fantasyname.New(
fantasyname.WithSyllables([]string{
"thor", "bal", "din", "grim", "morg",
"thrain", "dwal", "gim", "nor", "fund",
}),
fantasyname.WithPattern("s's"),
)
}
func main() {
elfGen := createElfNameGenerator()
dwarfGen := createDwarfNameGenerator()
fmt.Println("精灵名字:", elfGen.Generate())
fmt.Println("矮人名字:", dwarfGen.Generate())
}
实用技巧
-
缓存生成器:如果需要频繁生成名称,最好重用生成器实例而不是每次都创建新的。
-
名称唯一性:如果需要确保名称唯一,可以维护一个map来检查重复。
-
组合使用:可以组合多个生成器来创建更复杂的名称系统,如"名字 + 姓氏"或"称号 + 名字"。
-
过滤不当名称:有时生成的名称可能有不良含义,可以添加过滤逻辑。
fantasyname库简单易用但功能强大,通过合理设计模式和音节列表,你可以为你的奇幻世界创建各种风格的独特名称。