README 排名评定 游戏教程 安装使用教程 开发指南 Lua接口文档 Python接口文档 C/C++接口文档 地图编辑器说明 自动评测教程

代码接口说明

​ 本文档对文件中的Client \ AISDK \ AISDK.lua文件中的部分接口功能做了一些解释,同时还加上了一些常用的功能函数的解释,未解释的部分用户可以不用关注。

​ 注:可使用 Ctrl + F 搜索想找的接口。

接口

AI_SDK.lua

0 .重要变量

`lua --READY:游戏未开始 Start:游戏进行中 Over:游戏结束 Menu:菜单界面 AI_SDK.gameState = "READY"

--用户ID AI_SDK.armyID = nil

--军队总数量 AI_SDK.armyNum = 0

--王的位置 AI_SDK.KingPos = {x = -1, y = -1}

--选中的点 AI_SDK.SelectPos = {x = -1, y = -1} `

1 .AI_SDK.MoveTo(不建议使用)

`lua function AI_SDK.MoveTo(x, y, moveNum) if AI_SDK.gameState ~= "Start" then return end `

​ 这是移动军队的接口,非开始阶段不运行。( x , y ) 为目标点,(Core.SelectPos.x , Core.SelectPos.y)为选中点,用户调用MoveTo函数之前需要提前设定好选中的点。

​ moveNum为移动兵力,其中,其值为0时只在原地留一个士兵;大于1时移动其值数量的兵力;小于1时按比例移动,如0.5为移动一半。

`lua if x == -1 and y == -1 then local NewRequest = { armyID = AI_SDK.armyID, srcX = -1, srcY = -1, dstX = -1, dstY = -1, num = 0 } ClientSock.SendMove(NewRequest) return end `

​ 这一步是撤销操作,如果用户将 x 与 y 都设置为-1,则撤销之前的移动操作。NewRequest为定义的操作步骤,这里将其值全设置为-1,代表这一步是撤销。下面的接口ClientSock.SendMove是用于将此步骤发送到服务端以请求执行此步骤。

`lua if not AI_SDK.IsConnected(Core.SelectPos.x, Core.SelectPos.y, x, y) then return end `

​ 这一步判断移动目标点与选中点是否相邻,四个参数分别为选择要移动的点的坐标和移动终点坐标,若不相邻则无法移动。

`lua local NewRequest = { ... } ClientSock.SendMove(NewRequest) `

​ 这一步仍是定义当前步骤并发送到服务端执行。

2 .AI_SDK.DirectionToDestination

`lua function AI_SDK.DirectionToDestination(x, y, direction) local mode = x % 2 + 1 return x + BasicMap.direction[mode][direction][1], y + BasicMap.direction[mode][direction][2] end `

​ 这是一个获取目标点的函数。传入的参数为起始点( x,y )和移动方向direction。其中正六边形自右上边顺时针方向分别为1~6。最后返回在该方向上移动一步后(实际未移动,只是假设往此方向移动)点的 x 和 y。

3 .AI_SDK.MoveByDirection(推荐)

`lua function AI_SDK.MoveByDirection(srcX, srcY, moveNum, direction) local dstX, dstY = AI_SDK.DirectionToDestination(srcX, srcY, direction) AI_SDK.SelectPos = {srcX, srcY} AI_SDK.MoveTo(dstX, dstY, moveNum) end `

​ 这个函数是对MoveTo的封装,用户调用此函数时只需传入起始点坐标,移动兵力和方向,moveNum参考MoveTo中的moveNum,direction参考上面函数的direction。

4 .AI_SDK.MoveByCoordinates(推荐)

`lua function AI_SDK.MoveByCoordinates(srcX, srcY, dstX, dstY, moveNum) if not AI_SDK.IsConnected(srcX, srcY, dstX, dstY) then return end AI_SDK.SelectPos = {srcX, srcY} AI_SDK.MoveTo(dstX, dstY, moveNum) end `

​ 这个函数是对MoveTo的封装,用户调用此函数时只需传入起始点坐标,终点坐标和移动兵力。

5 .AI_SDK.IsConnected

`lua function AI_SDK.IsConnected(posX1, posY1, posX2, posY2) ... end `

​ 这是用来判断原点与移动目标点是否相邻的接口,若是返回true,否则返回false。

6 .AI_SDK.setSelected

`lua function AI_SDK.setSelected(x, y) AI_SDK.SelectPos.x, AI_SDK.SelectPos.y = x, y end `

​ 此函数用于配合MoveTo使用,将( x,y )设定为选中点,但是实际写AI时我们建议使用AISDK.MoveByCoordinates和AISDK.MoveByDirection,这两个函数避免了设置选定点的操作。

常用功能函数

​ 在知道了以上的接口之后,您还需要知道一些常用的功能函数才能完成对AI的开发。

`lua -- 获取此点的归属,0代表未占领 CGameMap.GetBelong(x,y)

-- 获取ArmID这一方王的位置,ArmyID是一个全局变量,代表自己的id(不要用来搞歪门邪道哦) CGameMap.GetKingPos(ArmyID)

-- 获取此点的类型,返回 -- "NODETYPEKING"(王) "NODETYPEFORT"(堡垒) -- "NODETYPEHILL"(山) "NODETYPEBLANK"(空格) -- 中的一个 CGameMap.GetNodeType(x,y)

-- 获取此点兵力,返回数值 CGameMap.GetUnitNum(x,y)

-- 判断当前能否看到此点,返回true/false CGameMap.GetVision(x,y) ` ​ 现在您已经获取了所有与AI设计相关的接口了,剩下需要的是您通过逻辑的设计将他们组合成一个强力的AI,如果您仍有疑惑,可以参考开发指南中的AI示例