N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-21 #1 有人玩过联众的台球吗? 我想做个程序,能当鼠标点击到某个球上的时候,能判断出该球的中心点,当然,球的半径是已知的。
F form2 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-21 #7 那你还不如实时维护这些球的圆心数组以及球的Z轴的信息,反正半径是知道的 建一个函数,当前点击的鼠标坐标,是参数,计算马上就能得出击打位置,距离力度,是哪个球等 可以建一个record数组,或用控件形式,要求速度的话,用前者好点
那你还不如实时维护这些球的圆心数组以及球的Z轴的信息,反正半径是知道的 建一个函数,当前点击的鼠标坐标,是参数,计算马上就能得出击打位置,距离力度,是哪个球等 可以建一个record数组,或用控件形式,要求速度的话,用前者好点
N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-21 #8 我没有说清楚,球的运动是在另一个程序中,我需要的是从屏幕中(或者从一张图片中) 鼠标点击一个圆的任意部分,从而定位一个圆的圆心,你可以下载这个程序,然后到联众 的台球游戏中去使用试试,我就是想达到这样的效果。 http://www.renju2002.com/download/taiqiu20.zip
我没有说清楚,球的运动是在另一个程序中,我需要的是从屏幕中(或者从一张图片中) 鼠标点击一个圆的任意部分,从而定位一个圆的圆心,你可以下载这个程序,然后到联众 的台球游戏中去使用试试,我就是想达到这样的效果。 http://www.renju2002.com/download/taiqiu20.zip
F form2 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-21 #9 有程序看,这就简单了,下面我分析的:99%是瞎猜,呵呵:) 我现在没装联众游戏,不过我玩过几吧,看过游戏界面等等 首先从编程的角度上说,单个球体估计类似一个timage的东西,是不是这可以查的出, 否则联众编程人员就要考虑太多的重画细节,用类似的timage来封装是有点可信的,即有图形DC 甚至hwnd之类的定位标志,我们知道通过GetCursorPos,可以获得坐标,WindowFromPoint 可以获得窗口句柄,在用ScreenToClient切换到真正的游戏窗口内框环境,由于球的窗口是正方形 用WindowFromPoint得到的窗口信息中很容易知道它的长宽,圆心也跟着出来了,于是知道了自己 球的圆心和对方球的圆心以及最后球的落点,就能通过公式计算出来怎么用力,两个球要打什么位 置等等。做后SetCursorPos,再mouseclick就可以了,当然力度应该用时钟的多少来衡量 如果球是直接在桌面上画出来的,那可能要用到图形识别了,比如用GetPixel取点判断像素的颜色 一般事先可能能分析出球边缘的特殊性,一旦找到共性后,就能识别一个大致球的轮廓,再求圆心 另外:如果球是timage的东西,也就是说完全能够获得双方当前所有的圆心坐标,那么完全能够 做成全自动的电脑智能桌球手,做得好的话,一个晚上赢N分,再卖分(不知道可不可以),是可能的 呵呵,瞎说,他卖10元,你可以卖20哦:)
有程序看,这就简单了,下面我分析的:99%是瞎猜,呵呵:) 我现在没装联众游戏,不过我玩过几吧,看过游戏界面等等 首先从编程的角度上说,单个球体估计类似一个timage的东西,是不是这可以查的出, 否则联众编程人员就要考虑太多的重画细节,用类似的timage来封装是有点可信的,即有图形DC 甚至hwnd之类的定位标志,我们知道通过GetCursorPos,可以获得坐标,WindowFromPoint 可以获得窗口句柄,在用ScreenToClient切换到真正的游戏窗口内框环境,由于球的窗口是正方形 用WindowFromPoint得到的窗口信息中很容易知道它的长宽,圆心也跟着出来了,于是知道了自己 球的圆心和对方球的圆心以及最后球的落点,就能通过公式计算出来怎么用力,两个球要打什么位 置等等。做后SetCursorPos,再mouseclick就可以了,当然力度应该用时钟的多少来衡量 如果球是直接在桌面上画出来的,那可能要用到图形识别了,比如用GetPixel取点判断像素的颜色 一般事先可能能分析出球边缘的特殊性,一旦找到共性后,就能识别一个大致球的轮廓,再求圆心 另外:如果球是timage的东西,也就是说完全能够获得双方当前所有的圆心坐标,那么完全能够 做成全自动的电脑智能桌球手,做得好的话,一个晚上赢N分,再卖分(不知道可不可以),是可能的 呵呵,瞎说,他卖10元,你可以卖20哦:)
N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #11 真的非常感谢你 form2 , 你给了我一个非常好的思路 但是,我写了一段程序在联众台球中测试,无法用 WindowFromPoint 获得球的句柄 但我可以肯定,每一个球就是一个 Timage 之类的东东,但 WindowFromPoint 好像没法 获得该类的信息,还有其他的函数可用吗?
真的非常感谢你 form2 , 你给了我一个非常好的思路 但是,我写了一段程序在联众台球中测试,无法用 WindowFromPoint 获得球的句柄 但我可以肯定,每一个球就是一个 Timage 之类的东东,但 WindowFromPoint 好像没法 获得该类的信息,还有其他的函数可用吗?
F form2 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #12 我刚装了台球游戏,它是用C语言结合纯winapi做的主程序,资源库用visual c++ 制作,图片存在Billiard.pak里面,球分别用lball?.gif,ball?.gif表示 直接是查不到那个可能的类timage的句柄的,所以变相的认为没有句柄,于是问 题变通到图形识别上来了,我们可以替换lball?.gif,ball?.gif这几个文件, 比如黑外框、纯白表面,圆心有个单像素的红点,于是乎找圆心就变成找红点坐标 了反正对方看不到你改球了(双方的球都能改,用不同颜色的圆心代替唯一的球) 关键在于lball?.gif,ball?.gif的制作和替换,反正我行,我想你也可以,那个 VB程序员的做法值得研究,有空再看看
我刚装了台球游戏,它是用C语言结合纯winapi做的主程序,资源库用visual c++ 制作,图片存在Billiard.pak里面,球分别用lball?.gif,ball?.gif表示 直接是查不到那个可能的类timage的句柄的,所以变相的认为没有句柄,于是问 题变通到图形识别上来了,我们可以替换lball?.gif,ball?.gif这几个文件, 比如黑外框、纯白表面,圆心有个单像素的红点,于是乎找圆心就变成找红点坐标 了反正对方看不到你改球了(双方的球都能改,用不同颜色的圆心代替唯一的球) 关键在于lball?.gif,ball?.gif的制作和替换,反正我行,我想你也可以,那个 VB程序员的做法值得研究,有空再看看
N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #13 我已经在着手进行图象识别,替换球的做法不太好,会使使用者无法区分球之间的差别, (别告诉我通过球心那一点颜色来区别,呵呵),还有一个办法是,当鼠标停留在某一个 球上时,一定时间后(大约2、3秒吧),会在球的上方出现提示框(提示该球的号码), 提示框相对于该球的位置是固定的,外框的颜色也是固定的,可以用它来定位球心! 目前在实现中遇到这样的问题: 1、GetPixel函数是取的某窗体内相对坐标的颜色,怎么取屏幕绝对坐标的color? 2、我需要由此外挂程序截取键盘输入(该程序需后台运行),该如何做?
我已经在着手进行图象识别,替换球的做法不太好,会使使用者无法区分球之间的差别, (别告诉我通过球心那一点颜色来区别,呵呵),还有一个办法是,当鼠标停留在某一个 球上时,一定时间后(大约2、3秒吧),会在球的上方出现提示框(提示该球的号码), 提示框相对于该球的位置是固定的,外框的颜色也是固定的,可以用它来定位球心! 目前在实现中遇到这样的问题: 1、GetPixel函数是取的某窗体内相对坐标的颜色,怎么取屏幕绝对坐标的color? 2、我需要由此外挂程序截取键盘输入(该程序需后台运行),该如何做?
N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #14 定位球心我已经搞定了!form2,100分我就给你了。 现在是怎么截取键盘输入的问题,help
F form2 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #16 你还不如学他的方法,form停留在顶端,焦点停留在form内,这样什么键你都能判断, 你取得是桌面图形,管谁是有焦点?
F form2 Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #17 哦,外挂啊,还隐形在后台,那你就要做dll hook key了 通过GetPixelGetDC(GetDesktopWindow),mouseX,mouseY)就可以了
N nicklung Unregistered / Unconfirmed GUEST, unregistred user! 2002-05-22 #18 你可能没有注意到,他的程序是截取了key press的,在非活动状态也能获得击键