在Ludum Dare 22比赛中,Notch在48小时内编写了一个名为Minicraft的游戏。它类似于2D版的Minecraft。
不管怎样,源代码可在这里找到:http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398 ,我正在查看其中的内容,因为我对地形和关卡的随机生成很感兴趣。在代码中有一段核心代码块,算法对我来说似乎很熟悉,但我无法给它命名。我想知道它的确切名称,以便我可以阅读更多相关信息并学习它的工作原理。
具体来说,这段代码来自levelGen.java:
那两个for循环在运行某种采样算法,我只想知道这是已知的命名算法,还是Notch自己开发的。
不管怎样,源代码可在这里找到:http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398 ,我正在查看其中的内容,因为我对地形和关卡的随机生成很感兴趣。在代码中有一段核心代码块,算法对我来说似乎很熟悉,但我无法给它命名。我想知道它的确切名称,以便我可以阅读更多相关信息并学习它的工作原理。
具体来说,这段代码来自levelGen.java:
do {
int halfStep = stepSize / 2;
for (int y = 0; y < w; y += stepSize) {
for (int x = 0; x < w; x += stepSize) {
double a = sample(x, y);
double b = sample(x + stepSize, y);
double c = sample(x, y + stepSize);
double d = sample(x + stepSize, y + stepSize);
double e = (a + b + c + d) / 4.0 + (random.nextFloat() * 2 - 1) * stepSize * scale;
setSample(x + halfStep, y + halfStep, e);
}
}
for (int y = 0; y < w; y += stepSize) {
for (int x = 0; x < w; x += stepSize) {
double a = sample(x, y);
double b = sample(x + stepSize, y);
double c = sample(x, y + stepSize);
double d = sample(x + halfStep, y + halfStep);
double e = sample(x + halfStep, y - halfStep);
double f = sample(x - halfStep, y + halfStep);
double H = (a + b + d + e) / 4.0 + (random.nextFloat() * 2 - 1) * stepSize * scale * 0.5;
double g = (a + c + d + f) / 4.0 + (random.nextFloat() * 2 - 1) * stepSize * scale * 0.5;
setSample(x + halfStep, y, H);
setSample(x, y + halfStep, g);
}
}
stepSize /= 2;
scale *= (scaleMod + 0.8);
scaleMod *= 0.3;
} while (stepSize > 1);
那两个for循环在运行某种采样算法,我只想知道这是已知的命名算法,还是Notch自己开发的。