Per Ludum Dare 22, Notch ha programmato un gioco in 48 ore chiamato Minicraft. È come un minecraft in 2D.Esiste un nome per questo algoritmo di campionamento utilizzato in Minicraft?
Ad ogni modo la sorgente è disponibile (qui: http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398), e stavo dando un'occhiata dato che sono interessato alla generazione casuale di terreno e livelli. Nel codice c'è un blocco di codice che esegue la generazione del core e l'algoritmo mi sembra familiare, ma non riesco a dare un nome. Mi piacerebbe sapere esattamente di cosa si tratta, quindi posso leggere di più e imparare come funziona.
In particolare, il codice è da 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);
Quei due cicli for sono in esecuzione un qualche tipo di algoritmo di campionamento, e vorrei solo sapere se questo è noto il nome algoritmo, o se tacca ha appena rotolato il suo.