怪物巡逻想"随机走两步再拐弯",学员每秒全盘随机取方向——怪物原地抽搐、路径来回重复,自然感全无。随机游走的正确姿势是保持当前方向的概率更高,只在低概率时转向。错误场景:
-- 每秒全盘随机四方向
dir = ({ 0, 90, 180, 270 })[math.random(1, 4)]
每秒全盘随机——怪物在原地来回抖动,路径毫无连贯性。
惯性游走:70% 概率保持原方向,30% 概率随机转向,边界自动折返。规范写法。示例代码如下:
local dirs = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } }
local cur = 1
local function wanderStep(x, y)
if math.random(1, 100) <= 30 then
cur = math.random(1, 4)
end
local d = dirs[cur]
local nx, ny = x + d[1], y + d[2]
if nx < 10 or nx > 20 or ny < 10 or ny > 20 then
cur = (cur + 2) % 4 + 1
d = dirs[cur]
nx, ny = x + d[1], y + d[2]
end
return nx, ny
end
输出为下一步坐标——路径连贯有惯性,越界时方向取反向自动折返。
三步验证:纯随机版观察怪物原地抖动;惯性版观察路径连贯性;把怪物关进 10×10 的围栏跑 100 步,验证边界反弹零出界。
惯性概率可配表:觅食期 30% 转向、警觉期 60% 转向(更神经质),同一套游走参数化出两种行为。示例代码如下:
local turnRate = alert and 60 or 30
if math.random(1, 100) <= turnRate then
cur = math.random(1, 4)
end
警觉期转向更频繁——巡逻 AI 的可调性来自参数,而不是新代码。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法】 一、隐蔽陷阱 打印 5 层星号金字塔,每层比上层多 2 颗星、左侧空格少 1 个——空格与星数的数量关系不清晰时,…
【游戏】 一、业务场景 帮会下午没活动,成员上线点个卯就走。狩猎场上线:每晚 8 点开门 30 分钟,场内刷固定猎物,猎杀计…
【游戏】 一、业务场景 帮战开打才发现帮会没有物资储备,临时收捐谁也不交。粮仓上线:平日捐粮入库记账,帮战期间按配给开仓领补…
【语法】 一、隐蔽陷阱 验证"任一整数的立方都能写成连续奇数之和"时,起点从 1 开始逐个试,n 稍大就长跑几百步还没对上—…
【游戏】 一、业务场景 帮会大厅一面空墙,有人提议留言,结果聊天区刷屏根本留不住。题字墙上线:花 100 帮贡刻一句题字永久…
【游戏】 一、业务场景 灯谜活动上线半小时谜底被解题工具全数搜出——谜面与谜底同放在一份客户端配置里,读表即得。服务端重构:…