HyperRogue的.tes镶嵌文件格式完全指南:定义并加载你的自定义几何
【免费下载链接】hyperrogueA SDL roguelike in a non-euclidean world项目地址: https://gitcode.com/gh_mirrors/hy/hyperrogue
HyperRogue 是一款运行在非欧几里得世界(庞加莱圆盘)里的像素风 Roguelike 游戏,而它的.tes镶嵌文件格式正是定义游戏地面几何的核心:用纯文本描述图块、边角长度与连接规则,即可加载你的自定义镶嵌世界。HyperRogue 内置了几十个.tes样例,格式为人类可读设计——所有数值都可以写成公式,甚至支持在引擎里实时拖动滑动条改变几何。本文是面向新手的.tes镶嵌文件格式完整指南:从加载第一个文件,到写出带滑动条、对称与非周期结构的自定义镶嵌。
1️⃣ .tes 镶嵌文件格式是什么?
一个.tes文件描述一套镶嵌(tessellation):由若干图块(tile)按规则拼接成的世界地面。它决定游戏中六角、七边等地板的形状与连接方式。
核心特点:
- 纯文本、人类可读:用公式而非死数字描述几何,天然支持"参数化镶嵌"
- 三种几何通用:双曲(
h2.)、欧几里得(e2.)、球面(s2.),外加仿射平面(a2.) - 可交互:滑动条(slider)允许在游戏菜单中实时改变角度/边数
- 出错可调试:镶嵌定义非法时引擎会进入调试器,可沿连接规则手动行走验证
官方格式说明文档:tessellations/sample/README.md
2️⃣ 如何加载你的 .tes 镶嵌文件?
两种方式:
菜单加载:游戏主菜单 →Special Modes→Experiment with Geometry→Geometry→ 选择hyperbolic*(欧几里得/球面入口也行,任何文件都能从任意入口加载)→Load from file,弹出文件对话框(入口逻辑见 arbitrile.cpp 中的choose())。
命令行加载:
./hyperrogue -tes tessellations/sample/marjorie-rice.tes文件加载失败或镶嵌定义非法时,HyperRogue 会自动启动镶嵌调试器,让你查看已定义的图块并按连接规则移动——这是排查.tes错误最快的办法。
3️⃣ .tes 文件结构速览
一个典型.tes文件按顺序由以下部分组成:
| 行/指令 | 含义 | 示例 |
|---|---|---|
## 名称 | 镶嵌显示名(##开头的行) | ## HyperRogue standard tiling |
h2./e2./s2./a2. | 几何类型 | h2. |
angleunit(...)/distunit(...) | 角度/距离单位定义 | distunit(arcmedge(6,6,7)) |
tile(...) | 定义图块(边长、内角) | tile(1, 90, 1, 90, 1, 90, 1, 90) |
conway(...)/c(...) | 定义边与边的连接 | conway("(0 0)(1 2)") |
slider/intslider等 | 可选:滑动条与特殊指令 | slider(a, 40, 0, 120) |
以 HyperRogue 标准镶嵌 tessellations/sample/hr-standard-tiling.tes 为例:
## HyperRogue standard tiling h2. distunit(arcmedge(6,6,7)) # 距离单位:{6,6,7} 阿基米德镶嵌的边长 let(u6 = regangle(1, 6)) # 边长为1的六边形内角 let(u7 = regangle(1, 7)) # 边长为1的七边形内角 unittile(u6,u6,u6,u6,u6,u6) # 图块0:六边形 unittile(u7,u7,u7,u7,u7,u7,u7) # 图块1:七边形 c(0,0,0,0,0) # 六边形边0自连 c(0,1,1,0,0) # 六边形边1 连 七边形边0tile(e0, a0, e1, a1, ...)按顺时针给出边长与内角;边长全为 1 时可写unittile(a0, a1, ...)。图块从 0 编号。c(i1,n1,i2,n2,m)表示"图块 n1 的边 i1 连 图块 n2 的边 i2",m=1表示镜像连接。- Conway 记号更紧凑:
conway("(0 0)(1 2)")表示 0 号图块的边 0 自连、边 1 连边 2。i、i'、i''、i@n分别指 0、1、2、n 号图块的边 i;用[ ]代替( )表示镜像连接。
4️⃣ 公式系统:让几何"算出来"而不是"填死数"
.tes中所有数值都可以是公式,支持复数。
可用常数与函数:pi、deg(π/180)、e、i、inf;运算符+ - * / ^;函数sin cos tan sinh cosh tanh asin acos atan asinh acosh atanh exp sqrt log re im conj floor frac min max;以及let(x=a,b)(定义变量)、ifz(x,a,b)/ifp(x,a,b)(条件)。
定义镶嵌最常用的几何函数:
| 函数 | 作用 |
|---|---|
edge(a,b) | {a,b} 正镶嵌的边长 |
edge_angles(x,y,z) | 角为 x,y,z 的三角形的边长(非欧几何) |
arcmedge(3:^2,4:^3) | 使 2 个三角形+3 个四边形内角和恰为 360° 的边长 |
regangle(d,s) | 边长 d 的正 s 边形内角 |
regradius(a,b) | {a,b} 图块外接圆半径 |
例如 tessellations/sample/sliders.tes 用edge_angles把三个角反解出三条边,做出一个角可拖动的三角形镶嵌。
5️⃣ 滑动条:一个文件,无限种镶嵌
.tes文件最强大的特性是滑动条,让同一份文件描述一整族镶嵌:
- 实数滑动条
slider(x, 默认值, 最小值, 最大值):改变几何参数但不改结构,可免重生成地图。见 tessellations/sample/sliders.tes - 整数滑动条
intslider(x, 默认, 最小, 最大):会改变镶嵌结构,菜单中修改后自动重新生成地图
经典示例是 tessellations/sample/regular.tes:两个整数滑动条分别控制{a,b}的边数 a 与价数 b,并用arcmcurv自动判断该组合属于双曲、欧氏还是球面——一个文件生成全部正镶嵌。加载后在游戏菜单Experiment with Geometry→Tessellation sliders中拖动即可实时预览。
6️⃣ 高级特性:对称、无限边、非周期与调试
- 旋转对称:
tile(e0, a0, e1, a1, *3)表示边/角模式重复 3 次;也可写repeat(tile_index, qty) - 镜像对称:
tile(..., |2)表示镜像对称,边 i 与边 2-i 互为镜像;旋转+镜像并用时*写在|前 - 无限边形(apeirogon):倍数写
*inf,见 tessellations/sample/pseudogons.tes - 星形镶嵌:加一行
star.,如 tessellations/sample/star.tes - (超)理想角:在
tile中写e1, [a1, e2, a2], e3,配合ideal_angle/ideal_edge函数,见 tessellations/sample/inf.tes - 非周期镶嵌:用
treestate(...)定义构造树规则,见 tessellations/sample/horotiling.tes - 仿射镶嵌:几何行写
a2.,配stretch_shear等指令,见 tessellations/affine/affine-square.tes - 调试:
debug(tile_index)手动进入调试器;定义非法时引擎也会自动进入
7️⃣ 让镶嵌画面更好看
加载.tes后默认会开一局游戏,若只想"画几何",用Experiment with Geometry→Pattern,常用图案模式:单色、随机、按类型、按边数。
实用技巧(来自 tessellations/sample/README.md):
- 文件中加
boundary_ratio(value)控制地板描边宽度,或菜单里Display full floors - 线条不够平滑:设置 → 通用图形 → 矢量设置,调高线质量/线宽
- 截图菜单可隐藏玩家、居中于图块/顶点/边、改配色,还可导出SVG 矢量格式(适合论文插图)
- 命令行一把梭示例:
hyperrogue -tes tessellations/sample/hr-standard-tiling.tes -canvas B -wsh 9 -shot-1000 -shott 1 -noplayer -vlq 3 -lw 5
另外,引擎支持给 3D 模型贴纹理(如 3D 模式下展示星形多面体),项目rogueviz/models/目录附带了 rattex.png 这类高分辨率纹理资源,配合.tes定义的几何可以做出完整的 3D 场景。
8️⃣ 参考资料速查表
| 文件 | 说明 |
|---|---|
| tessellations/sample/README.md | 格式权威文档(结构/公式/对称/截图技巧/实现原理) |
| tessellations/sample/hr-standard-tiling.tes | HyperRogue 标准 {6,6,7} 镶嵌 |
| tessellations/sample/regular.tes | 双滑动条生成的全部正镶嵌 |
| tessellations/sample/sliders.tes | 实数滑动条三角形镶嵌 |
| tessellations/sample/marjorie-rice.tes | Marjorie Rice 非周期四边镶嵌 |
| tessellations/sample/aperiodic_pentagons.tes | 非周期五边形(含 solve 高级用法) |
| tessellations/sample/horotiling.tes | treestate 非周期镶嵌 |
| tessellations/affine/affine-square.tes | 仿射镶嵌入门 |
| tessellations/sample/inf.tes / pseudogons.tes / star.tes | 理想角 / 无限边形 / 星形 |
写在最后:.tes镶嵌文件格式是 HyperRogue 的几何引擎开放接口——读懂 hr-standard-tiling.tes 这 30 行,你就掌握了 80% 的日常用法;再结合滑动条与对称记号,即可构建自己的参数化镶嵌家族。更庞大的社区文件库与源码解析入口(arbitrile.cpp)可供进阶参考。祝你的庞加莱圆盘之旅愉快! 🎲
【免费下载链接】hyperrogueA SDL roguelike in a non-euclidean world项目地址: https://gitcode.com/gh_mirrors/hy/hyperrogue
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考