关卡编辑器

关卡文件字段说明

一级字段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可以被旁消。

总结

石头的属性:

  1. 颜色

  2. 厚度(层数)

  3. 是否可以移动

    • 可移动(分为两种):这个带move

      • 只能下落,不能被交换。这个带static

      • 可以下落,也可以交换

    • 不可移动:

  4. 硬度(分为两种):

    • 普通硬度:可以被道具消除,也可以被旁消。

    • 高硬度:能被道具消除,不能被旁消。这个带hard