跳转至

2.2.7.2   cond.lua

cond.lua 主要定义了一些函数,用于判断场上的状况

裁判盒指令状态判断

  • ourBallPlace():判断是否是我方放球
function ourBallPlace()
    return vision:GetCurrentRefereeMsg() == "OurBallPlacement"
end
  • theirBallPlace():判断是否为敌方放球
function theirBallPlace()
    return vision:GetCurrentRefereeMsg() == "TheirBallPlacement"
end
  • isGameOn():判断比赛是否开始
function isGameOn()
    return vision:gameState():gameOn()
end
  • isNormalStart():判断裁判盒是否发出normal start的指令
function isNormalStart()
    return vision:gameState():canEitherKickBall()
end

其它状态判断

  • bestPlayerChanged(): 判断最佳追求手是否改变
function bestPlayerChanged()
    return world:IsBestPlayerChanged()
end
  • canShootOnBallPos(role): 判断角色为role的球员是否可以射门
function canShootOnBallPos(role)
    return world:canShootOnBallPos(vision:Cycle(),gRoleNum[role])
end
  • getOpponentScript(str, script, MaxRandom)函数的目的是根据给定的区域str、脚本script和最大随机数MaxRandom来获取对手脚本相关的信息。它会根据script的类型(是表还是字符串)进行不同的操作。

  • script为表时

    • 首先,通过table.getn(script)获取表script中的元素个数totalNum
    • 然后,使用math.random(1,totalNum * 10000) % totalNum+1生成一个随机数randNum,这个随机数的范围是1到totalNum。这里先将math.random的范围扩大到1totalNum * 10000,然后再取模totalNum并加1,是为了让随机数的分布更均匀(相比于直接使用math.random(1,totalNum))。
    • 接着,它会检查script[randNum]的类型。如果script[randNum]是字符串,就直接返回script[randNum];否则,返回strscript[randNum]连接后的结果。
  • script为字符串时
    • 如果script等于"random",则生成一个1到MaxRandom之间的随机数randNum,然后返回strrandNum连接后的结果,并打印出randNum以及strrandNum连接后的结果。
    • 如果script不等于"random",则直接返回script,这里表示使用固定的模式打定位球。
  • script为其他类型时
    • 会打印出Error in getOpponentScriptstr,表示在获取对手脚本时发生了错误。
-- str 为所在的区域
-- script 为所使用的脚本
-- MaxRandom 为最大的随机数
function getOpponentScript(str, script, MaxRandom)
    if type(script) == "table" then
        local totalNum = table.getn(script)
        local randNum = math.random(1,totalNum * 10000) % totalNum + 1
        print("randNum "..randNum.." "..str..script[randNum])
        if (type(script[randNum]) == "string") then
            return script[randNum]
        else
            return str..script[randNum]
        end
    elseif type(script) == "string" then
        if script == "random" then
            local randNum = math.random(1,MaxRandom)
            print("randNum",str..randNum)
            return str..randNum
        else
            -- 使用固定的模式打定位球
            return script
        end
    else
        print("Error in getOpponentScript "..str)
    end 
end