TC官方合作论坛

标题: 循环到15次左右就出现程序错误提示 [打印本页]

作者: xlqglm    时间: 2016-4-18 08:07
标题: 循环到15次左右就出现程序错误提示
本帖最后由 xlqglm 于 2016-4-18 08:09 编辑

我作了一个小程序,在NPC处完成任务,循环30次,每次只要点一键完成就可以。但是每次都会在循环到一半的时候,就会崩溃一次,大约在16次的时候,原因有可能出在什么地方。程序思路是:
//------------开始钱善出力任务----------------
功能 钱善出力出钱任务()
    找钱善()
结束
功能 找钱善()
    变量 坐标,x,y  
    等待(400)
    坐标 = 找图(0,0,1280,960,"d:\\yjwc\\钱善.bmp","000000",1,0,x,y)
    等待(200)
    如果(坐标 <0 )
        键盘按键(27,1)        
        等待(300)
        找钱善()
    否则
        等待(200)
        鼠标移动(x+5,y+55)
        等待(200)
        鼠标右键单击(1)
        等待(200)
        出力任务()
    结束
结束
功能 出力任务()
    变量 坐标,x,y
    等待(300)
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\出力.bmp","000000",1,1,x,y)
    等待(300)   
    如果(坐标 <0 )
        等待(300)
        键盘按键(27,1)
        等待(300)
        找钱善()
    否则
        等待(100)
        鼠标移动(x+5,y+5)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        一键完成出力任务()

    结束
结束
功能 一键完成出力任务()
    变量 坐标,x,y
    等待(300)
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\一.bmp","000000",1,1,x,y)
    等待(400)
    如果(坐标<0)
        等待(500)
        找重置()
    否则
        等待(100)
        鼠标移动(x+5,y+5)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        找钱善()      
    结束   
结束   
功能 找重置()
    变量 坐标,x,y   
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\重置.bmp","000000",1,1,x,y)
    等待(400)
    如果(坐标<0)
        等待(300)
        找我知道了()
    否则
        等待(100)
        鼠标移动(x+5,y+5)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        找钱善()   
    结束
结束
功能 找我知道了()
    变量 坐标,x,y   
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\我知道了.bmp","000000",1,1,x,y)
    等待(100)
    如果(坐标<0)
        键盘按键(27,1)
        找钱善()               
    否则
        等待(100)
        鼠标移动(x+5,y+10)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        鼠标移动(100,100)
        钱善出钱任务()
    结束
结束

未命名.bmp (743.34 KB, 下载次数: 2)

未命名.bmp

作者: chi98002    时间: 2016-4-18 09:03
线程
作者: 言术    时间: 2016-4-18 10:04
建议楼主建立一个主函数,统一调用循环,这样调用来调用去太乱了。整理好就不会出错了
作者: xlqglm    时间: 2016-4-18 10:37
言术 发表于 2016-4-18 10:04
建议楼主建立一个主函数,统一调用循环,这样调用来调用去太乱了。整理好就不会出错了 ...

麻烦能给举个例子吗?怎么建立一个主函数,统一调用 循环。简单写一下就可以。
作者: xlqglm    时间: 2016-4-18 10:40
chi98002 发表于 2016-4-18 09:03
线程

用了线程,没有全贴过来。完整程序是用了一个线程开始,调用了第一个功能 ,同时获取了ID,同时还有一个这个ID的线程关闭。还有一个检测ID,初始为假,防止同时开始多个线程。但是还是出现错误提示

作者: xlqglm    时间: 2016-4-18 10:42
xlqglm 发表于 2016-4-18 10:37
麻烦能给举个例子吗?怎么建立一个主函数,统一调用 循环。简单写一下就可以。 ...

简单写一个流程也行,我就是没有这个思路,不知道如何下手。谢谢了
作者: 言术    时间: 2016-4-18 11:07
xlqglm 发表于 2016-4-18 10:37
麻烦能给举个例子吗?怎么建立一个主函数,统一调用 循环。简单写一下就可以。 ...

每一个函数都完成一个具体功能,函数内部根据完成情况返回具体的值以方便调用的主函数判断来选择执行方向进程,意思把所有判断都放在主函数中,每个函数只做单一的功能,比如你的出力任务函数,没找到执行 找钱善(),找到执行 一键完成出力任务()  

举例:

功能 主函数()
    如果(出力任务())
        一键完成出力任务()
    否则
        找钱善()
    结束
结束

功能 出力任务()
    变量 坐标,x,y
    等待(300)
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\出力.bmp","000000",1,1,x,y)
    等待(300)   
    如果(坐标 <0 )
        等待(300)
        键盘按键(27,1)
        等待(300)
        返回 假
    否则
        等待(100)
        鼠标移动(x+5,y+5)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        返回 真
    结束
结束

作者: xlqglm    时间: 2016-4-18 11:09
楼上言术,先谢谢了,我慢慢研究一下。辛苦了。
作者: adamyun    时间: 2016-4-21 07:21
循环也写得不对啊
作者: qasw2112    时间: 2016-4-25 12:19
功能 出力任务()
    变量 坐标,x,y
    等待(300)
    坐标 = 找图 (0,0,1280,960,"d:\\yjwc\\出力.bmp","000000",1,1,x,y)
    等待(300)   
    如果(坐标 >0 )
        等待(300)
        鼠标移动(x+5,y+5)
        等待(100)
        鼠标左键单击(1)
        等待(100)
        返回 真
    否则
        等待(100)
  等待(300)
        键盘按键(27,1)
        等待(300)
        返回 假
      
    结束


改成这样就对了




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