Îles de bruit Perlin sans cercles
Au lieu d'utiliser des cercles dégradés, envisagez d'utiliser l'algorithme Diamond & Square avec quelques modifications pour créer un aspect naturel. îles dans votre générateur de carte.
Algorithme Diamant et Carré avec Modifications
Créer une carte de hauteur de terrain (zed[][]) :
Créer une carte de surface (typ[][]) :
Exemple de mise en œuvre C
void map_random(int _xs, int _ys) { // Configuration and parameter initialization // Terrain generation ter=new int*[mys+1]; for (y=0;y<=mys;y++) ter[y]=new int[mxs+1]; typ=new int*[mys+1]; for (y=0;y<=mys;y++) typ[y]=new int[mxs+1]; ... // First pass t=-r2; ter[ 0][ 0]=t; ter[ 0][mxs]=t; ter[mys][ 0]=t; ter[mys][mxs]=t; ter[dy2][dx2]=r2; ... for (;dx2|dy2;dx=dx2,dx2>>=1,dy=dy2,dy2>>=1) // subdivide step until full image is filled { ... // diamond (skip first one for islands) if ((!_island)||(dx!=mxs)) for (y=dy2,yy=mys-dy2;y<=yy;y+=dy) for (x=dx2,xx=mxs-dx2;x<=xx;x+=dx) ter[y][x]=((ter[y-dy2][x-dx2]+ter[y-dy2][x+dx2]+ter[y+dy2][x-dx2]+ter[y+dy2][x+dx2])>>2)+Random(r)-r2; ... // adjust border if (_island) { for (y=0;y<=mys;y+=dy2) { ter[y][0]=t; ter[y][mxs]=t; } for (x=0;x<=mxs;x+=dx2) { ter[0][x]=t; ter[mys][x]=t; } } } // Additional steps and enhancements ... }
Sortie
Cette approche produit des îles d'apparence plus naturelle avec de multiples collines et des côtes réalistes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!