顺便说一句,你的关卡使用 ascii 字符,这样更容易阅读。
就我个人而言,我为每一个非常不同的图块使用了一个类,但如果你创建一个 SUPER 与另一个相似的图块,只需创建一个与两者都相似的类,并且那些类似的图块可以是类扩展。例如,我有一个 Enemy 类,它有许多子类:敌人类型。我有一个名为Enemy 的子类Basic,它是一个基本敌人,但我也有一个名为Machine_Gun 的子类,它的射击速度更快。
要读取关卡数据,只需使用 switch case:
for(var y = 0; y < levels[level_number]; y++) {
for(var x = 0; x < levels[level_number][y]; x++) {
switch(levels[level_number][y][x]) {
case "#": floor.push(new Floor(x * 20, y * 20)); break;
case "O": coins.push(new Coin(x * 20, y * 20)); break;
case "@": player.y = (x * 20) - 1; player.x = (y * 20) - 1; break;
case "&": monsters.push(new Basic(x * 20, y * 20)); break;
case "%": monsters.push(new Machine_Gun(x * 20, y * 20)); break;
default: break; // something else like air.
}
}
}
那么,我的等级可以是这样的:
levels = [
[
"##########", // MUCH easier to understand (for me at least)
"#OO %#",
"### ##",
"# @ &#",
"##########"
], [
"###############",
"# & #",
"# ####",
"# #",
"# ### #",
"# O #",
"# @ ####",
"#### #",
"#O % % #",
"###############"
]
];
就这样,您可以轻松创建关卡。