铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 201|回复: 2

[其他] 真的太妙了,这函数是谁写的?

[复制链接]
 楼主| 发表于 2026-6-28 18:12 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
  for s = 1, 128 do
      for i = 1, s do
        local j = s - i
        if x + i < 63 and y + j < 63 and GetWarMap(x + i, y + j, 3) ~= 255 and War_CanMoveXY(x + i, y + j, 0) then
          return x + i, y + j
        end
        if x + j < 63 and y - i > 0 and GetWarMap(x + j, y - i, 3) ~= 255 and War_CanMoveXY(x + j, y - i, 0) then
          return x + j, y - i
        end
        if x - i > 0 and y - j > 0 and GetWarMap(x - i, y - j, 3) ~= 255 and War_CanMoveXY(x - i, y - j, 0) then
          return x - i, y - j
        end
        if x - j > 0 and y + i < 63 and GetWarMap(x - j, y + i, 3) ~= 255 and War_CanMoveXY(x - j, y + i, 0) then
          return x - j, y + i
        end
      end
    end
  end
今天研究WE_xy函数,才发现构思真的是太精妙了。想问一下这是谁写的?鱼神吗?这样人物今在哪?
顺问一下:WE_xy中的WE是什么意思?什么单词的缩写?war e?

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2026-6-29 10:18 | 显示全部楼层
感觉其实就是以(x, y)为中心,一圈一圈向外搜索,找到最近的可以移动坐标。
63和0应该是检查目标点是不是在地图内。。。
GetWarMap()函数应该是检查目标点不是墙或者障碍。。。
War_CanMoveXY()应该是检查目标点与起始点在同一连通块,可以移动过去。。

类似一个BFS的感觉。。。
以上是纯看代码瞎猜的。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2026-6-30 11:02 | 显示全部楼层
local function FindNearestMovePos(x, y)
  local MAP_MIN = 0
  local MAP_MAX = 63
  local BLOCK_VALUE = 255
  local SEARCH_RANGE = 128

  local function canMoveTo(nx, ny)
    return nx > MAP_MIN
       and nx < MAP_MAX
       and ny > MAP_MIN
       and ny < MAP_MAX
       and GetWarMap(nx, ny, 3) ~= BLOCK_VALUE
       and War_CanMoveXY(nx, ny, 0)
  end

  for s = 1, SEARCH_RANGE do
    for i = 1, s do
      local j = s - i

      local nx, ny

      nx, ny = x + i, y + j
      if canMoveTo(nx, ny) then
        return nx, ny
      end

      nx, ny = x + j, y - i
      if canMoveTo(nx, ny) then
        return nx, ny
      end

      nx, ny = x - i, y - j
      if canMoveTo(nx, ny) then
        return nx, ny
      end

      nx, ny = x - j, y + i
      if canMoveTo(nx, ny) then
        return nx, ny
      end
    end
  end

  return nil, nil
end
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2026-7-20 11:29

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表