|  | 
 
| -- 初始化种子表
 local perm = {}
 for i = 0, 255 do
 perm[i] = i
 end
 
 for i = 0, 255 do
 local j = math.random(0, 255)
 perm[i], perm[j] = perm[j], perm[i]
 end
 
 for i = 0, 255 do
 perm[i + 256] = perm[i]
 end
 
 -- 柏林噪声函数
 ---@param x number x坐标
 ---@param y number y坐标
 ---@param seed string 种子
 ---@return number -- 高度坐标
 return function(x, y, seed)
 if gameapi then
 gameapi.set_random_seed(seed)
 else
 math.randomseed(tonumber(seed))
 end
 local function fade(t)
 return t * t * t * (t * (t * 6 - 15) + 10)
 end
 
 local function lerp(t, a, b)
 return a + t * (b - a)
 end
 
 local function grad(hash, x, y)
 local h = hash % 16
 local u = h < 8 and x or y
 local v = h < 4 and y or ((h == 12 or h == 14) and x or 0)
 return ((h % 2) == 0 and u or -u) + ((h % 3) == 0 and v or -v)
 end
 
 local function noise(x, y, perms)
 local X = math.floor(x) % 256
 local Y = math.floor(y) % 256
 local xf = x - math.floor(x)
 local yf = y - math.floor(y)
 local u = fade(xf)
 local v = fade(yf)
 local AA = (perms[X % 256] + Y) % 256
 local AB = (perms[(X + 1) % 256] + Y) % 256
 local BA = (perms[X % 256] + Y + 1) % 256
 local BB = (perms[(X + 1)] % 256 + Y + 1) % 256
 local x1 = lerp(u, grad(perms[AA], xf, yf), grad(perms[AB], xf - 1, yf))
 local x2 = lerp(u, grad(perms[BA], xf, yf - 1), grad(perms[BB], xf - 1, yf - 1))
 
 return lerp(v, x1, x2)
 end
 
 return noise(x, y, perm)
 end
 
 
 
 
 | 
 
  |