主题(Theme)

基本信息

属性 值
枚举 greymerk.roguelike.theme.Theme(theme/Theme.java:5)
常量数 34
工厂方法 Theme.getTheme(Theme)(theme/Theme.java:42),switch 覆盖全部 34 个常量
实现类数 34 个 ThemeXxx extends ThemeBase(theme/ThemeBase.java:6)+ 1 个 ThemeBase 包装类
接口 ITheme(theme/ITheme.java:6),暴露 primary/secondary 各 2 组 floor/wall/stair/pillar
容器 BlockSet(theme/BlockSet.java:11),字段 floor / walls / stair / pillar(:13-16)
JSON 构造 Theme.create(JsonObject)(theme/Theme.java:156),读 primary / secondary / base 三个键
随机可达性 全部 34 个主题都可达:CityGrounds.java:69 用 Theme.values()[rand.nextInt(...)] 随机取

功能

主题(Theme)决定一座地牢的全部材质外观:地板、墙、楼梯、柱子各有 primary 与 secondary 两套。每个主题是 ThemeBase 的子类,在构造器里装配两个 BlockSet。

BlockSet 有两个构造器(theme/BlockSet.java:18、:25);三参重载把 walls 同时用作 floor 与 walls:

public BlockSet(IBlockFactory walls, IStair stair, IBlockFactory pillar) {
    this(walls, walls, stair, pillar);
}

Theme.getTheme 的 switch 对每个常量 return new ThemeXxx(),末尾 default: return null(theme/Theme.java:149-150)——但因为 34 个常量全部有 case,default 实际不可达。

主题可被 7 个内置地牢设置直接指定(如 SettingsMountainTheme.java:29 的 Theme.getTheme(Theme.OAK)),也可由 JSON 设置包用 base 键 + primary/secondary 覆盖块集来派生(theme/Theme.java:174-180)。

主题表

下表 34 行的实现类、this.primary = new BlockSet(...) 行号与主墙材质均可用下述命令一次性复现(逐文件、单文件行号,非拼接输出):

cd src/main/java/greymerk/roguelike/theme
for f in Theme*.java; do grep -n 'this.primary = new BlockSet' "$f"; done
常量 实现类 primary 组装于 楼梯类型 主要墙体材质(权重)
OAK ThemeOak ThemeOak.java:24 STONEBRICK STONE_BRICK:30、STONE_BRICK_CRACKED:20、COBBLESTONE:5、GRAVEL:1
SPRUCE ThemeSpruce ThemeSpruce.java:26 STONEBRICK STONE_BRICK:20、STONE_BRICK_CRACKED:10、COBBLESTONE:5、GRAVEL:1
CRYPT ThemeCrypt ThemeCrypt.java:31 STONEBRICK BlockJumble(砖石/裂纹/苔石):100、COBBLESTONE:10、GRAVEL:5
MOSSY ThemeMossy ThemeMossy.java:42 COBBLE COBBLESTONE:60、STONE_BRICK_MOSSY:30、COBBLESTONE_MOSSY:10、GRAVEL:15、蠹鱼块乱序:5
MUDDY ThemeMuddy ThemeMuddy.java:36 COBBLE COBBLESTONE:50、COBBLESTONE_MOSSY:30、CLAY:30、DIRT:15、GRAVEL:15、STONE_BRICK_CRACKED:10
NETHER ThemeNether ThemeNether.java:32 NETHERBRICK NETHERBRICK:200、REDSTONE_BLOCK:50、NETHERRACK:20、ORE_QUARTZ:20、SOUL_SAND:15、COAL_BLOCK:5
SANDSTONE ThemeSandstone ThemeSandstone.java:21 SANDSTONE SANDSTONE:100、SAND:5
QUARTZ ThemeQuartz ThemeQuartz.java:18 QUARTZ QUARTZ
BLING ThemeBling ThemeBling.java:21 QUARTZ DIAMOND_BLOCK:20、IRON_BLOCK:10、EMERALD_BLOCK:10、GOLD_BLOCK:3
CHECKER ThemeChecker ThemeChecker.java:21 QUARTZ BlockCheckers(OBSIDIAN,QUARTZ) 棋盘格
RAINBOW ThemeRainbow ThemeRainbow.java:26 ACACIA BlockStripes:遍历 DyeColor.values() 的彩色粘土条纹
SNOW ThemeSnow ThemeSnow.java:26 STONEBRICK STONE_BRICK:10、STONE_BRICK_CRACKED:1、STONE_BRICK_MOSSY:1
JUNGLE ThemeJungle ThemeJungle.java:42 COBBLE COBBLESTONE_MOSSY:50、STONE_BRICK_MOSSY:30、STONE_BRICK_CRACKED:20、STONE_BRICK_CHISELED:15
BRICK ThemeBrick ThemeBrick.java:20 BRICK BRICK
DARKOAK ThemeDarkOak ThemeDarkOak.java:18 DARKOAK 深色橡木木板,柱子为深色橡木原木
ICE ThemeIce ThemeIce.java:16 QUARTZ SNOW,柱子 ICE_PACKED
ENIKO ThemeEniko ThemeEniko.java:29 STONEBRICK STONE_BRICK:100、STONE_BRICK_MOSSY:5、STONE_BRICK_CRACKED:1
ENIKO2 ThemeEniko2 ThemeEniko2.java:31 STONEBRICK STONE_BRICK:20、STONE_BRICK_CRACKED:10、STONE_BRICK_MOSSY:5、COBBLESTONE:3、GRAVEL:1
ENIQUARTZ ThemeEniQuartz ThemeEniQuartz.java:31 BRICK 墙 BRICK;地板 BlockStripes(红粘土:100+WATER_FLOWING:5+REDSTONE_BLOCK:1, OBSIDIAN)
ENIICE ThemeEniIce ThemeEniIce.java:39 QUARTZ 地板 BlockStripes(紫粘土:100+WATER_FLOWING:5+LAPIS_BLOCK:1, OBSIDIAN:100+LAVA_FLOWING:5+REDSTONE_BLOCK:1)
TOWER ThemeTower ThemeTower.java:28 STONEBRICK BlockJumble:30、COBBLESTONE:10、AIR:5、GRAVEL:5
ETHO ThemeEtho ThemeEtho.java:21 OAK 地板 GRASS,墙橡木木板
CAVE ThemeCave ThemeCave.java:34 COBBLE STONE_SMOOTH:1000、DIRT:100、GRAVEL:50、COBBLESTONE:20、ORE_COAL:10、ORE_IRON:5
SEWER ThemeSewer ThemeSewer.java:25 STONEBRICK STONE_BRICK:10、STONE_BRICK_MOSSY:4、STONE_BRICK_CRACKED:1
ENDER ThemeEnder ThemeEnder.java:22 SANDSTONE 地板 BlockStripes(OBSIDIAN,END_STONE),墙 SANDSTONE,柱 OBSIDIAN
MINESHAFT ThemeMineShaft ThemeMineShaft.java:29 COBBLE STONE_SMOOTH:50、COBBLESTONE:15、ORE_REDSTONE:1
ETHOTOWER ThemeEthoTower ThemeEthoTower.java:18 SANDSTONE primary 全为青色粘土,secondary 为 SANDSTONE_SMOOTH
PYRAMID ThemePyramid ThemePyramid.java:22 SANDSTONE SANDSTONE_SMOOTH:100、SANDSTONE:10、SANDSTONE_CHISELED:5
DARKHALL ThemeDarkHall ThemeDarkHall.java:30 STONEBRICK COBBLESTONE:30、STONE_BRICK:20、COBBLESTONE_MOSSY:10、GRAVEL:5
TEMPLE ThemeTemple ThemeTemple.java:25 QUARTZ PRISMARINE_DARK:10、PRISMARINE:5、PRISMITE:5、SEA_LANTERN:3
SANDSTONERED ThemeSandstoneRed ThemeSandstoneRed.java:21 RED_SANDSTONE SANDSTONE_RED:100、SAND_RED:5
HOUSE ThemeHouse ThemeHouse.java:20 BRICK 墙 BRICK,地板/柱 GRANITE_POLISHED
GREY ThemeGrey ThemeGrey.java:17 STONEBRICK ANDESITE 与 ANDESITE_POLISHED 双色
PURPUR ThemePurpur ThemePurpur.java:17 PURPUR 墙 PURPUR_BLOCK,柱 PURPUR_PILLAR,secondary 墙 ENDER_BRICK

数值

数值名 值 来源
主题常量数 34 theme/Theme.java:5-39
switch 分支数 34 theme/Theme.java:43-154
new Theme*() 语句数 34 同上
primary / secondary 块集组 2 theme/ThemeBase.java:8-9
每块集暴露的材质位 4(floor/walls/stair/pillar) theme/BlockSet.java:13-16
ITheme 抽象方法数 8 theme/ITheme.java:8-22
权重最大值(单主题内) CAVE 的 STONE_SMOOTH:1000 theme/ThemeCave.java

交互

主题不面向玩家直接交互,只能通过以下途径生效:

途径 说明
内置地牢设置 SettingsMountainTheme.java:29 等 7 个内置设置在构造器里 Theme.getTheme(...)
塔基主题 DungeonSettings.java:189 缺省为 Tower.ROGUE + Theme.TOWER
JSON 设置包 Theme.create() 读 base / primary / secondary(theme/Theme.java:163-180)
/roguelike citadel Citadel.java:21 用 Theme.OAK;CityGrounds.java:65-69 随机取任意塔与任意主题

相关条目