You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态识别脚本元素为变量/坐标并解析获取两组坐标与结果变量名

实现getcords函数的变量与坐标识别方案

核心逻辑思路

先明确输入命令的固定格式:getcords <结果变量名> <坐标/变量1> <坐标/变量2>,处理流程分为三步:

  • 拆分命令参数,提取关键元素
  • 用正则匹配识别静态坐标格式
  • 非坐标格式的元素,直接匹配M_LOCATIONS字典的键验证变量有效性

具体实现代码

import re

# 示例位置变量字典
M_LOCATIONS = {
    "spawn_point": (0, 0),
    "boss_loc": (150.5, 220.0),
    "chest": (-30, 45)
}

def getcords(command_line):
    # 拆分命令行,过滤空字符
    parts = [p for p in command_line.strip().split() if p]
    if len(parts) != 4:
        raise ValueError("命令格式错误,正确用法:getcords <结果变量名> <坐标/变量> <坐标/变量>")
    
    result_var = parts[1]
    elem_a = parts[2]
    elem_b = parts[3]

    # 匹配静态坐标的正则(支持整数、浮点数,允许坐标内有空格)
    coord_regex = re.compile(r'^\(-?\d+(\.\d+)?\s*,\s*-?\d+(\.\d+)?\)$')

    def resolve_element(elem):
        # 优先判断是否为静态坐标
        if coord_regex.match(elem):
            # 提取并转换坐标值
            coords = elem.strip('()').split(',')
            x = float(coords[0].strip())
            y = float(coords[1].strip())
            return (x, y)
        # 再判断是否为M_LOCATIONS中的变量
        elif elem in M_LOCATIONS:
            return M_LOCATIONS[elem]
        # 都不匹配则抛出错误
        else:
            raise ValueError(f"无法解析元素:{elem} - 既不是合法坐标也不是已定义的位置变量")
    
    # 解析两组坐标
    coord1 = resolve_element(elem_a)
    coord2 = resolve_element(elem_b)

    return result_var, coord1, coord2

# 测试用例
if __name__ == "__main__":
    # 变量+静态坐标
    test_cmd1 = "getcords attack_pos boss_loc (10, 20)"
    var, c1, c2 = getcords(test_cmd1)
    print(f"结果变量:{var},坐标1:{c1},坐标2:{c2}")

    # 双静态坐标
    test_cmd2 = "getcords move_path (0,0) (-50.5, 30)"
    var, c1, c2 = getcords(test_cmd2)
    print(f"结果变量:{var},坐标1:{c1},坐标2:{c2}")

    # 双变量
    test_cmd3 = "getcords distance spawn_point chest"
    var, c1, c2 = getcords(test_cmd3)
    print(f"结果变量:{var},坐标1:{c1},坐标2:{c2}")

关键细节说明

  1. 坐标正则优化:允许坐标内部有空格(比如(10, 20)),适配用户可能的输入习惯
  2. 优先级处理:先判断静态坐标,避免变量名恰好和坐标格式冲突(虽然概率低,但逻辑更严谨)
  3. 错误反馈:明确区分格式错误和未定义变量的情况,方便调试
  4. 扩展性:如果需要支持更多坐标格式(如不带括号的10,20),只需修改正则表达式即可

内容的提问来源于stack exchange,提问作者Advik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:20:07