关卡编辑器
关卡文件字段说明
一级字段config
这里边包含了行数、列数、颜色数、剩余步数、剩余时间。
一级字段target
过关目标
其他一级字段
radio表示概率
magic_charge_need
magic_charge_tool
magic_charge_color
magic_charge_price
一级字段screen
二级字段map
表示对应格子是否镂空。只有0和1两个值。没有逗号隔开。
例子:
[map]
000000000
011101110
111111111
111111111
111111111
111111111
011111110
001111100
000111000
[map]
二级字段from
传送门,当出口空了的时候,会有元素从入口传过来。
是成对出现的。格式为:出口行,出口列,入口行,入口列
例子:
[from]
4,5,6,5
[from]
需要注意的是,这个入口和出口的关系不是独占的,即一个入口可以对应对各出口,一个出口可以对应多个入口。
并且一个格子可以同时是出口和入口。
所以在描述这种关系的时候,我用了下面这个结构体。
struct MyCellDataFromInfo
{
//我这个格子作为哪些格子的出口
std::map<std::pair<int, int>, bool> map_as_out;
//我这个格子作为哪些格子的入口
std::map<std::pair<int, int>, bool> map_as_in;
};
当点中某一个格子来删除这个格子的传送门关系时,需要根据这个结构体存的值,找到改格子作为入口和出口关联的格子,并删除对应的传送门关系。
二级字段exit
收集口。当收集物运动到这个格子时,完成收集。
例子:
[exit]
0,3
0,4
0,5
[exit]
二级字段footcloth
地毯,只要出现了地毯,本关的目标就会有把地毯铺满。
只有0和1两种值。类似于map字段。
二级字段jelly
冰块,只有0、1、2三种值。没有逗号分隔,类似map字段。
二级字段jellybear
可能的值是0、A、B、C、D、H、I、J、K、1、2、3、4、5、6、7、8、9
0是没有
ABCD是躺着的,从小到大
HIJK是站着的,从小到大
123456789是正方形的,从小到大
二级字段new
例子:
2,3
4,5
这个例子表示2行3列的格子和4行5列的格子是新元素产生的地方。
注意:如果没有new字段,那么程序会把最上面一排当作new。
二级字段new_cell_data
指定下落的元素。可以是重复的,也可以不重复。
例子:
[new_cell_data]
8,4,REPEAT(20:0,T4,T1)
8,5,1,1,1
[new_cell_data]
二级字段bar
格式:行1,列1,行2,列2
注意:必须是两个相邻的格子。
二级字段symbol
这个字段里的数据包含:
- 基础元素:随机颜色、另外6种基础元素
- 不区分颜色的道具:彩球
- 区分颜色的道具:
- 不区分颜色的普通石块(不可移动):ABCDE(abcde)
- 石头油(只有一层的障碍物):F(f)
- 四格的大蛋糕:G(g)
- 巧克力(会向周围蔓延):H(h)一层、I(i)两层
- 可移动的石块:JKOPQ(jkopq)。对应的图片名字是move_stone1到5
- 幽灵(会往上跳):N(n)。对应的图片名字是move_stone_bug
- 瓶子:W(w)。
- 收集物一:X(x或者12)。
- 收集物二:Y(y或者13)。
- 空白:Z(z)。
- 不可移动的石块:RSTUV(rstuv)。TODO
注意:
- 想大蛋糕这种元素,在读取完symbol字段后,需要再检查一边,如果某个格子是大蛋糕,那么另外三个格子里原来的值就失效了。
- symbol字段里的ABCDE,是没有颜色的石块,可以配合字段stone_0_color来设置成带颜色的石块。
- symbol字段里的*012345表示随机和6种颜色,配合tool字段就能决定这个格子是个什么颜色的道具。
二级字段stone_0_color
配合symbol字段设置不可移动的普通石块(即ABCDE)的颜色。
二级字段tool
横消:1
竖消:2
炸弹:4
彩球:5
蝴蝶:6
加五秒:8
加五步:9
产出其他元素的egg:11
产出其他元素的luck:12
注意:
- 横消、竖消、炸弹、蝴蝶都是区分颜色的。彩球不区分颜色。
- 横消、竖消、炸弹、蝴蝶的颜色是根据symbol字段里对应格子的颜色来决定的。
- 横消、竖消、炸弹、蝴蝶的颜色有012345共6种,另外还有一种随机颜色。
二级字段timer
倒计步数炸弹。取值范围是0到30步。
这个字段里的值生效的前提条件是tool字段里对应格子的道具类型是倒计步数道具。
二级字段factory_symbol
作用是生成一个新元素。
可能的值有空值(Z),然后012345对应6种颜色。对应的图片名字是basket0到5。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
二级字段firefly
萤火虫,可能的值是0到999。但是编辑器里只支持0到9。因为实际配置关卡时也不会配置超过9个的萤火虫。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
二级字段mushroom
蘑菇,有开闭两种状态。
那么这个字段可能的值有三个,0,1,2。分别代表没有蘑菇,开着的蘑菇,闭着的蘑菇。
当棋盘里的所有蘑菇都处于开状态时,所有蘑菇一起被消除掉。
闭着的蘑菇可以被旁消形成开状态的蘑菇。由闭到开是一个不可逆的过程。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
对应的图片是mushroom1和mushroom2。
二级字段hardstone
不可移动的硬石块。
取值范围是一层到五层。不过只有三层的图片,所以编辑器也只支持了三层。
注意:一层硬石块可以被旁消。其他层的硬石块是不能被旁消的,只能被道具消除。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
对应的图片名字是hardstone1到5。
二级字段hard_move_stone
可移动的硬石块。
取值范围是一到五层。只能被道具打掉,不能被旁消。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
对应的图片名字是hard_move_stone1到5。
二级字段move_static_stone
可以下落,不能交换的石块。
会被旁消。
取值范围是一层到五层。
这个字段的读取要在symbol字段之后,应为这个字段读取后会覆盖掉symbol字段里的值。
二级字段bigstone
大石块。取值范围是0到8。
0表示没有。
1234是2*2的大石块。
5678是3*3的大石块。
二级字段oil和moveoil
oil和moveoil都是最多两层。
oil和moveoil都不可交换。moveoil可以下落,oil不可以下落。
moveoil不能被旁消。oil可以被旁消。
总结
石头的属性:
颜色
厚度(层数)
是否可以移动
可移动(分为两种):这个带move
只能下落,不能被交换。这个带static
可以下落,也可以交换
不可移动:
硬度(分为两种):
普通硬度:可以被道具消除,也可以被旁消。
高硬度:能被道具消除,不能被旁消。这个带hard