2011-12-21 9 views
8

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.

risposta

Problemi correlati