TC官方合作论坛

标题: 求助呀,, 我基础不好, 碰到一个 问题 解决不了, [打印本页]

作者: alanyfd    时间: 2014-1-16 16:05
标题: 求助呀,, 我基础不好, 碰到一个 问题 解决不了,
空间 tl
//---------------------------------插件变量---------------------------------//
dm
//---------------------------------数组变量---------------------------------//
窗口句柄数组=数组[],dm数组=数组[],任务线程=数组[]
//---------------------------------开关变量---------------------------------//
是否重定义=真,检测开关=真
//---------------------------------其他变量---------------------------------//
Index=0

//---------------------------------热键开启---------------------------------//
功能 开启_热键()
    tl.启动()
功能结束
//---------------------------------程序启动---------------------------------//
功能 启动()
    变量 窗口句柄
    窗口句柄 = tl.获取窗口句柄()
    如果(窗口句柄 > 0)
        tl.窗口绑定(窗口句柄)
    如果结束
功能结束
//---------------------------------获取窗口---------------------------------//
功能 获取窗口句柄()
    变量 窗口句柄, 数组下标
    dm=com("dm.dmsoft")
    窗口句柄 = dm.GetForegroundWindow()
    如果(窗口句柄 > 0)
        //对数组进行重定义
        如果(是否重定义)
            窗口句柄数组 = 数组空间.重定义(窗口句柄数组, 真, Index+1)
            dm数组 = 数组空间.重定义(dm数组, 真, Index+1)
            任务线程 = 数组空间.重定义(任务线程, 真, Index+1)
        如果结束
        //查看是否已经已经绑定了
        数组下标 = 数组空间.查找(窗口句柄数组,窗口句柄)
        
        如果(数组下标==-1)
            //说明没有绑定过
            窗口句柄数组[Index] = 窗口句柄
            返回 窗口句柄
        否则
            返回 -1
        如果结束
    否则
        返回 -1
    如果结束
功能结束
//---------------------------------窗口绑定---------------------------------//
功能 窗口绑定(窗口句柄)
    变量 dm_ret, 错误码, 下标, 长度
    //获取传入参数 在窗口句柄数组中的下标
    下标 = 数组空间.查找(窗口句柄数组,窗口句柄)
    //开始创业大漠对象
    dm数组[下标] = com("dm.dmsoft")
    dm数组[下标].SetPath(辅助.获取资源路径("rc:")) //设置资源路径
    //dm数组[下标].SetDict(0,"dm_soft.txt") //设置字库
    //dm数组[下标].SetDict(0,"神鬼坐标字库.txt") //活动字库
    //绑定窗口
    dm_ret = dm数组[下标].BindWindow(窗口句柄,"gdi","windows","windows",0)
    如果(dm_ret == 1)
        //绑定成功
        tl.系统报警()
        //开启线程
        任务线程[下标] = 线程.开启("tl.任务线程",下标)
        Index = Index + 1
        //错误判断机制
        数组空间.大小(窗口句柄数组, 长度)
        如果(Index != 长度)
            Index = 长度
        如果结束
        是否重定义 = 真
    否则
        错误码 = dm数组[下标].GetLastError()
        辅助.消息框("[主窗口绑定] 失败","提示")
    如果结束
功能结束
//---------------------------------任务线程---------------------------------//
功能 任务线程(下标)
    变量 延迟,坐标集="85,133|85,133"
    延迟 = 辅助.随机数(200,300)
   
    tl.关闭聊天窗口(下标)
    辅助.等待(延迟)
    tl.是否组队(下标,延迟)
    辅助.等待(延迟)
    tl.坐标分析(下标,延迟,坐标集)
功能结束

//---------------------------------坐标分析---------------------------------//
功能 坐标分析(下标,延迟,坐标集)
    路线数组,c1,坐标
   
    字符串.分割(坐标集,"|",路线数组)
    数组空间.大小(路线数组,c1)
    遍历(i=0 ; i<c1 ; i++)
        字符串.分割(路线数组[i],",",坐标)
        tl.移动人物(下标,延迟,坐标[0],坐标[1])
        辅助.等待(延迟)
    遍历结束
功能结束
//---------------------------------移动人物---------------------------------//
功能 移动人物(下标,延迟,目标x,目标y)
    坐标数组, 当前x,当前y,大小
    解锁x=1,解锁y=1
   
    dm数组[下标].KeyPress(192)
    dm数组[下标].SetDict(0,"神鬼坐标字库.txt") //坐标字库
    当前坐标=dm.Ocr(930,15,990,30,"aaa99d-3e3d39",1.0)
    字符串.分割(当前坐标,",",坐标数组)
    数组空间.大小(坐标数组,大小)
    当前x=坐标数组[0]
    当前y=坐标数组[1]
    如果(当前x>目标x)//往左
        dm数组[下标].KeyDown(65)
    如果结束
    如果(当前x<目标x)//往右
        dm数组[下标].KeyDown(68)
    如果结束
    如果(当前y>目标y)//往上
        dm数组[下标].KeyDown(87)
    如果结束
    如果(当前y<目标y)//往下
        dm数组[下标].KeyDown(83)
    如果结束
   
    循环(!(当前x==目标x && 当前y==目标y))
        当前坐标=dm.Ocr(930,15,990,30,"aaa99d-3e3d39",1.0)
        如果(字符串.查找字符串(当前坐标,",")<0)
            辅助.等待(延迟)
            继续
        如果结束
        字符串.分割(当前坐标,",",坐标数组)
        当前x=坐标数组[0]
        当前y=坐标数组[1]
        
        如果(当前x>目标x && 解锁x==0)//往左
            dm数组[下标].KeyDown(65)
            解锁x=1
        如果结束
        如果(当前x<目标x && 解锁x==0)//往右
            dm数组[下标].KeyDown(68)
            解锁x=1
        如果结束
        如果(当前y>目标y && 解锁y==0)//往上
            dm数组[下标].KeyDown(87)
            解锁y=1
        如果结束
        如果(当前y<目标y && 解锁y==0)//往下
            dm数组[下标].KeyDown(83)
            解锁y=1
        如果结束
        如果(当前y == 目标y)//松开上下
            dm数组[下标].KeyUp(83)
            dm数组[下标].KeyUp(87)
            解锁x=0
        如果结束
        如果(当前x == 目标x)//松开左右
            dm数组[下标].KeyUp(65)
            dm数组[下标].KeyUp(68)
            解锁y=0
        如果结束
        辅助.等待(延迟)
    循环结束
功能结束

//----------------------------------初始化----------------------------------//
功能 初始化()
功能结束

//---------------------------------程序退出---------------------------------//
功能 退出_点击()
    辅助.退出()
功能结束
//---------------------------------程序关闭---------------------------------//
功能 tl_关闭()
    辅助.退出()
功能结束
//-------------------------------关闭聊天窗口-------------------------------//
功能 关闭聊天窗口(下标)
    x,y
标记1:
    dm数组[下标].FindPic(1,669,121,769,"关闭聊天窗口1.bmp","000000",0.9,0,x,y)
    如果(x>0 && y>0)
        dm数组[下标].MoveTo(x,y)
        辅助.等待(100)
        dm数组[下标].LeftClick()
        辅助.等待(300)
        跳转 标记1
    如果结束
功能结束
//---------------------------------关闭窗口---------------------------------//
功能 关闭窗口(下标,延迟)
    变量 x, y
    dm数组[下标].FindPic(8,9,1022,766,"关闭1.bmp|关闭2.bmp|关闭3.bmp", "000000", 0.9, 0, x, y)
    dm数组[下标].MoveTo(x,y)
    辅助.等待(延迟)
    dm数组[下标].LeftClick()
    tl.鼠标归位(下标)
功能结束
//---------------------------------是否组队---------------------------------//
功能 是否组队(下标,延迟)
    x,y
    dm数组[下标].FindPic(0,0,271,102,"是否组队1.bmp","000000",0.9,0,x,y)
    如果(x<1&&y<1)
        dm数组[下标].KeyPress(84)
        辅助.等待(延迟)
        辅助.等待(延迟)
        dm数组[下标].MoveTo(237,153)
        辅助.等待(延迟)
        dm数组[下标].LeftClick()
        辅助.等待(延迟)
        dm数组[下标].MoveTo(751,438)
        辅助.等待(延迟)
        dm数组[下标].LeftClick()
        辅助.等待(延迟)
        dm数组[下标].KeyPress(84)
    如果结束
    tl.关闭聊天窗口(下标)
    tl.关闭窗口(下标,延迟)
功能结束
//---------------------------------鼠标归位---------------------------------//
功能 鼠标归位(下标)
    dm数组[下标].MoveTo(23,696)
功能结束
//---------------------------------系统报警---------------------------------//
功能 系统报警()
    变量 系统版本
    系统版本 = 系统.版本()
    如果(系统版本 == 2)
        //xp系统
        辅助.蜂鸣(800,300)
    否则
        如果(系统版本 == 5 || 系统版本 == 6)
            //win7系统
            辅助.播放(辅助.获取资源路径("rc:msg.wav"))
        如果结束
    如果结束
功能结束
//---------------------------------空间关闭---------------------------------//
空间结束



117行   为什么会数组越界呀?? 奇怪了,,  不懂了,,  请教!!!!

作者: alanyfd    时间: 2014-1-16 16:06
空间 tl
//---------------------------------插件变量---------------------------------//
dm
//---------------------------------数组变量---------------------------------//
窗口句柄数组=数组[],dm数组=数组[],任务线程=数组[]
//---------------------------------开关变量---------------------------------//
是否重定义=真,检测开关=真
//---------------------------------其他变量---------------------------------//
Index=0

//---------------------------------热键开启---------------------------------//
功能 开启_热键()
    tl.启动()
功能结束
//---------------------------------程序启动---------------------------------//
功能 启动()
    变量 窗口句柄
    窗口句柄 = tl.获取窗口句柄()
    如果(窗口句柄 > 0)
        tl.窗口绑定(窗口句柄)
    如果结束
功能结束
//---------------------------------获取窗口---------------------------------//
功能 获取窗口句柄()
    变量 窗口句柄, 数组下标
    dm=com("dm.dmsoft")
    窗口句柄 = dm.GetForegroundWindow()
    如果(窗口句柄 > 0)
        //对数组进行重定义
        如果(是否重定义)
            窗口句柄数组 = 数组空间.重定义(窗口句柄数组, 真, Index+1)
            dm数组 = 数组空间.重定义(dm数组, 真, Index+1)
            任务线程 = 数组空间.重定义(任务线程, 真, Index+1)
        如果结束
        //查看是否已经已经绑定了
        数组下标 = 数组空间.查找(窗口句柄数组,窗口句柄)
        
        如果(数组下标==-1)
            //说明没有绑定过
            窗口句柄数组[Index] = 窗口句柄
            返回 窗口句柄
        否则
            返回 -1
        如果结束
    否则
        返回 -1
    如果结束
功能结束
//---------------------------------窗口绑定---------------------------------//
功能 窗口绑定(窗口句柄)
    变量 dm_ret, 错误码, 下标, 长度
    //获取传入参数 在窗口句柄数组中的下标
    下标 = 数组空间.查找(窗口句柄数组,窗口句柄)
    //开始创业大漠对象
    dm数组[下标] = com("dm.dmsoft")
    dm数组[下标].SetPath(辅助.获取资源路径("rc:")) //设置资源路径
    //dm数组[下标].SetDict(0,"dm_soft.txt") //设置字库
    //dm数组[下标].SetDict(0,"神鬼坐标字库.txt") //活动字库
    //绑定窗口
    dm_ret = dm数组[下标].BindWindow(窗口句柄,"gdi","windows","windows",0)
    如果(dm_ret == 1)
        //绑定成功
        tl.系统报警()
        //开启线程
        任务线程[下标] = 线程.开启("tl.任务线程",下标)
        Index = Index + 1
        //错误判断机制
        数组空间.大小(窗口句柄数组, 长度)
        如果(Index != 长度)
            Index = 长度
        如果结束
        是否重定义 = 真
    否则
        错误码 = dm数组[下标].GetLastError()
        辅助.消息框("[主窗口绑定] 失败","提示")
    如果结束
功能结束
//---------------------------------任务线程---------------------------------//
功能 任务线程(下标)
    变量 延迟,坐标集="85,133|85,133"
    延迟 = 辅助.随机数(200,300)
   
    tl.关闭聊天窗口(下标)
    辅助.等待(延迟)
    tl.是否组队(下标,延迟)
    辅助.等待(延迟)
    tl.坐标分析(下标,延迟,坐标集)
功能结束

//---------------------------------坐标分析---------------------------------//
功能 坐标分析(下标,延迟,坐标集)
    路线数组,c1,坐标
   
    字符串.分割(坐标集,"|",路线数组)
    数组空间.大小(路线数组,c1)
    遍历(i=0 ; i<c1 ; i++)
        字符串.分割(路线数组,",",坐标)
        tl.移动人物(下标,延迟,坐标[0],坐标[1])
        辅助.等待(延迟)
    遍历结束
功能结束
//---------------------------------移动人物---------------------------------//
功能 移动人物(下标,延迟,目标x,目标y)
    坐标数组, 当前x,当前y,大小
    解锁x=1,解锁y=1
   
    dm数组[下标].KeyPress(192)
    dm数组[下标].SetDict(0,"神鬼坐标字库.txt") //坐标字库
    当前坐标=dm.Ocr(930,15,990,30,"aaa99d-3e3d39",1.0)
    字符串.分割(当前坐标,",",坐标数组)
    数组空间.大小(坐标数组,大小)
    116当前x=坐标数组[0]
    117当前y=坐标数组[1]
    如果(当前x>目标x)//往左
        dm数组[下标].KeyDown(65)
    如果结束
    如果(当前x<目标x)//往右
        dm数组[下标].KeyDown(68)
    如果结束
    如果(当前y>目标y)//往上
        dm数组[下标].KeyDown(87)
    如果结束
    如果(当前y<目标y)//往下
        dm数组[下标].KeyDown(83)
    如果结束
   
    循环(!(当前x==目标x && 当前y==目标y))
        当前坐标=dm.Ocr(930,15,990,30,"aaa99d-3e3d39",1.0)
        如果(字符串.查找字符串(当前坐标,",")<0)
            辅助.等待(延迟)
            继续
        如果结束
        字符串.分割(当前坐标,",",坐标数组)
        当前x=坐标数组[0]
        当前y=坐标数组[1]
        
        如果(当前x>目标x && 解锁x==0)//往左
            dm数组[下标].KeyDown(65)
            解锁x=1
        如果结束
        如果(当前x<目标x && 解锁x==0)//往右
            dm数组[下标].KeyDown(68)
            解锁x=1
        如果结束
        如果(当前y>目标y && 解锁y==0)//往上
            dm数组[下标].KeyDown(87)
            解锁y=1
        如果结束
        如果(当前y<目标y && 解锁y==0)//往下
            dm数组[下标].KeyDown(83)
            解锁y=1
        如果结束
        如果(当前y == 目标y)//松开上下
            dm数组[下标].KeyUp(83)
            dm数组[下标].KeyUp(87)
            解锁x=0
        如果结束
        如果(当前x == 目标x)//松开左右
            dm数组[下标].KeyUp(65)
            dm数组[下标].KeyUp(68)
            解锁y=0
        如果结束
        辅助.等待(延迟)
    循环结束
功能结束

//----------------------------------初始化----------------------------------//
功能 初始化()
功能结束

//---------------------------------程序退出---------------------------------//
功能 退出_点击()
    辅助.退出()
功能结束
//---------------------------------程序关闭---------------------------------//
功能 tl_关闭()
    辅助.退出()
功能结束
//-------------------------------关闭聊天窗口-------------------------------//
功能 关闭聊天窗口(下标)
    x,y
标记1:
    dm数组[下标].FindPic(1,669,121,769,"关闭聊天窗口1.bmp","000000",0.9,0,x,y)
    如果(x>0 && y>0)
        dm数组[下标].MoveTo(x,y)
        辅助.等待(100)
        dm数组[下标].LeftClick()
        辅助.等待(300)
        跳转 标记1
    如果结束
功能结束
//---------------------------------关闭窗口---------------------------------//
功能 关闭窗口(下标,延迟)
    变量 x, y
    dm数组[下标].FindPic(8,9,1022,766,"关闭1.bmp|关闭2.bmp|关闭3.bmp", "000000", 0.9, 0, x, y)
    dm数组[下标].MoveTo(x,y)
    辅助.等待(延迟)
    dm数组[下标].LeftClick()
    tl.鼠标归位(下标)
功能结束
//---------------------------------是否组队---------------------------------//
功能 是否组队(下标,延迟)
    x,y
    dm数组[下标].FindPic(0,0,271,102,"是否组队1.bmp","000000",0.9,0,x,y)
    如果(x<1&&y<1)
        dm数组[下标].KeyPress(84)
        辅助.等待(延迟)
        辅助.等待(延迟)
        dm数组[下标].MoveTo(237,153)
        辅助.等待(延迟)
        dm数组[下标].LeftClick()
        辅助.等待(延迟)
        dm数组[下标].MoveTo(751,438)
        辅助.等待(延迟)
        dm数组[下标].LeftClick()
        辅助.等待(延迟)
        dm数组[下标].KeyPress(84)
    如果结束
    tl.关闭聊天窗口(下标)
    tl.关闭窗口(下标,延迟)
功能结束
//---------------------------------鼠标归位---------------------------------//
功能 鼠标归位(下标)
    dm数组[下标].MoveTo(23,696)
功能结束
//---------------------------------系统报警---------------------------------//
功能 系统报警()
    变量 系统版本
    系统版本 = 系统.版本()
    如果(系统版本 == 2)
        //xp系统
        辅助.蜂鸣(800,300)
    否则
        如果(系统版本 == 5 || 系统版本 == 6)
            //win7系统
            辅助.播放(辅助.获取资源路径("rc:msg.wav"))
        如果结束
    如果结束
功能结束
//---------------------------------空间关闭---------------------------------//
空间结束



我重新标注出117行了, 红色的, 帮忙看一下 到底是哪里错误吧?  谢谢了...


作者: zxw445    时间: 2014-1-16 16:10
一个字:乱
作者: wyds591101    时间: 2014-1-16 16:11
俩字太乱.....
作者: wyds591101    时间: 2014-1-16 16:12
你取出的数组大小是多少啊   你先判断一下数组的大小 然后取值  
作者: rainshine    时间: 2014-1-16 17:17
我支持楼上 先判断大小啊  三个字 这么乱!
作者: 璀璨    时间: 2014-1-16 17:18
本帖最后由 璀璨 于 2014-1-16 17:23 编辑

坐标数组=数组[]
作者: alanyfd    时间: 2014-1-16 18:55
插件对象错了,,  谢谢了,  




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1