按键精灵 呵呵教程更新了?那制作游戏辅助的教程是不是也更新的??

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
请扫描分享到朋友圈游戏辅助制作教程:用按键精灵脚本应对游戏分辨率改变问题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
暂无相关推荐文档
游戏辅助制作教程:用按键精灵脚本应对游戏分辨率改变问题|
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
请扫描分享到朋友圈【小猫·实战】如何用按键精灵制作俄罗斯方块游戏(详细教程+源码) - 精华与推荐帖 - 按键精灵论坛 -
Powered by Discuz! Archiver
兄弟客服002
【小猫·实战】如何用按键精灵制作俄罗斯方块游戏(详细教程+源码)
本文作者:q
原文地址:/viewthread.php?tid=239922
喵~你们相信按键精灵除了能做游戏辅助脚本外,还能做一个游戏玩玩吗?这是真的吗?
小猫告诉你,是真的,编程是无所不能的,只要你敢想,就能实现!!!
游戏下载地址:喵~用按键精灵做的&俄罗斯方块&游戏~[更新至1.11.0701]
2.窗口句柄
361的窗口插件
mp9999ddd的多线程互斥锁插件
俄罗斯方块百度
感谢以上两位高人提供的插件喵。
游戏背景图片:
& & 要写一个游戏,必须要对游戏有一定的了解,而不是简简单单的知道怎么玩。现在小猫要写的是俄罗斯方块,那么小猫需要知道以下几个数据:“游戏的边框长短,各个方块的具体形状,每次变形后的形状,得分的算法,游戏的规则。”那怎么获得这些数据呢?对,活用百度谷歌,具体内容看上面的俄罗斯方块百科,已经写的很清楚了,游戏是10x20大小的,方块有S、Z、L、J、I、O、T这7种形状,得分的大致算法。OK,游戏的一些大致数据已经收集好了,现在要利用这些数据了。
& & 小猫刚开始的时候,是想用91的写屏插件,通过清屏和写屏两种功能完成游戏的,后来才发现,这个思路的代码和算法太复杂,于是果断放弃,转为使用361的窗口插件,通过创建一个游戏背景区域和多个方块(按钮),然后使用移动窗口和关闭窗口实现方块的移动和消除,而判断方法则是采用判断上下左右句柄得到。
& & 首先,我们要创建一个游戏区域,游戏原本是边框10x20,方块1x1的,我们将其放大30倍,即变为边框300x600,方块30x30,我们还要计算好游戏区域的左上角坐标,在这里,小猫电脑分辨率是的,小猫为了游戏区域在屏幕中间,故设置游戏区域的左上角坐标为489,99。接着,大家注意找下361窗口插件中的“CreateCustomRgn 创建不规则区域”功能,简单的说,这个就是放置一张图片大小的窗口,只不过他会将指定颜色挖空。在这里,我们使用上面那张300x600的背景图片,创建这个游戏区域即可。注意,停止脚本的时候,关闭这个窗口
setGameLeftUpX = 489 : setGameLeftUpY = 99
FKPath=&Attachment:\&
BGPath = &Background.bmp&
MainHwnd = Plugin.WindowEx5_01.CreateCustomRgn(0, setGameLeftUpX, setGameLeftUpY, FKPath & BGPath, &FF00FF&)
Sub OnScriptExit()& &
& & HwndArray=Plugin.WindowEx5_01.EnumWindowA(0,0,&361Du*Class3&,2)
& & For i = 0 To UBound(HwndArray)
& && &&&Call Plugin.WindowEx5_01.SetWindowState(HwndArray(i), 0)& && && && && &
& && &第二,游戏区域创建好了,现在要创建方块了,大家看下361窗口插件中的“CreateButton 创建按钮”功能,我们就用他来创建方块,并得到每个方块的句柄。所有的形状都是由4个方块组成,那么我们可以通过一个带参数的子程序来完成创建工作,先从最简单的O形方块开始。这个方块的形状是“田”字形的,即2X2,游戏刚开始的时候,这个方块应该是在游戏区域的正上方中间等待下降的。故他的左上角坐标应该是609,39,根据一个方块为30x30大小,推出其他3个方块的坐标,创建4个方块窗口,并将这4个窗口句柄分别保存起来。
OO = &609,39,639,39,609,69,639,69&
Call Create(OO)
Sub Create(FKZuoBiao)
& & TracePrint &创建方块&
& & CreateZB = Split(FKZuoBiao, &,&)& &
& & getFKHWnd1 = getCreateFK(CreateZB(0), CreateZB(1))
& & getFKHWnd2 = getCreateFK(CreateZB(2), CreateZB(3))
& & getFKHWnd3 = getCreateFK(CreateZB(4), CreateZB(5))
& & getFKHWnd4 = getCreateFK(CreateZB(6), CreateZB(7))
& && &第三,现在游戏背景和O形方块都创建好了,我们先要让他自动落下,怎么弄呢?很简单,每隔一段时间,获取四个方块窗口的当前坐标,然后依次向下移动一次,一次是移动30个像素,对吧?OK,子程序代码如下:
Sub FKStatic()
& & getFKRect1 = Plugin.WindowEx5_01.GetWindowInfo(getFKHWnd1, 2)
& & getFKRect2 = Plugin.WindowEx5_01.GetWindowInfo(getFKHWnd2, 2)
& & getFKRect3 = Plugin.WindowEx5_01.GetWindowInfo(getFKHWnd3, 2)& && &&&
& & getFKRect4 = Plugin.WindowEx5_01.GetWindowInfo(getFKHWnd4, 2)& && &&&
Sub FallFK()
& & TracePrint &下落&
& & Call FKStatic()
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd1, getFKRect1(0), getFKRect1(1) + 30)
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd2, getFKRect2(0), getFKRect2(1) + 30)
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd3, getFKRect3(0), getFKRect3(1) + 30)
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd4, getFKRect4(0), getFKRect4(1) + 30)
& && &第四,现在问题来了,我们发现方块不停的掉下去,不会停止在游戏区域内,怎么办?这里,我们要用到这个功能--GetPointWindow 获得包含了指定点的窗口句柄--它的作用就是得到指定坐标上的窗口句柄。有什么用呢?这样想,我们只要得到四个方块下一格的句柄,如果这个句柄不是方块的句柄也不是游戏背景区域的句柄(这里大家思考下,为什么还要加上不是方块的句柄这个条件),那么我们就可以判断出这个方块已经到达了最底部了。
Function CheckFK()//检查方块的下一格句柄
& && &&&Call FKStatic()
& && &&&getCheckHwnd1 = getPointHwnd(getFKRect1(2) - 15, getFKRect1(3) + 15)
& && &&&getCheckHwnd2 = getPointHwnd(getFKRect2(2) - 15, getFKRect2(3) + 15)& &
& && &&&getCheckHwnd3 = getPointHwnd(getFKRect3(2) - 15, getFKRect3(3) + 15)& &
& && &&&getCheckHwnd4 = getPointHwnd(getFKRect4(2) - 15, getFKRect4(3) + 15)
& && &&&If getCheckHwnd1 && getFKHwnd1 and getCheckHwnd1 && getFKHwnd2 and getCheckHwnd1 && getFKHwnd3 and getCheckHwnd1 && getFKHwnd4 and getCheckHwnd1 && MainHwnd Then
& && && && &TracePrint 1
& && && && &CheckFK = false
& && &&&ElseIf getCheckHwnd2 && getFKHwnd1 and getCheckHwnd2 && getFKHwnd2 and getCheckHwnd2 && getFKHwnd3 and getCheckHwnd2 && getFKHwnd4 and getCheckHwnd2 && MainHwnd Then
& && && && &TracePrint 2
& && && && &CheckFK = false
& && &&&ElseIf getCheckHwnd3 && getFKHwnd1 and getCheckHwnd3 && getFKHwnd2 and getCheckHwnd3 && getFKHwnd3 and getCheckHwnd3 && getFKHwnd4 and getCheckHwnd3 && MainHwnd Then
& && && && &TracePrint 3
& && && && &CheckFK = false
& && &&&ElseIf getCheckHwnd4 && getFKHwnd1 and getCheckHwnd4 && getFKHwnd2 and getCheckHwnd4 && getFKHwnd3 and getCheckHwnd4 && getFKHwnd4 and getCheckHwnd4 && MainHwnd Then
& && && && &TracePrint 4
& && && && &CheckFK = false
& && &&&Else
& && && && &CheckFK = true
& && &&&End If
End Function
& && &第五,下落问题解决了,这次我们要对方块进行左右移动,既要让方块保持下落,又要让方块左右移动,怎么办?这里就需要用到多线程了,另外,由于每个形状是由4个方块组成的,则就意味着,每次移动都要移动4个方块,问题来了,如果下落的同时,又左移了,会不会造成混乱呢?比如方块错位之类的。这里有一个知识点,多线程互斥锁,打个比方,有两个线程,一个线程对变量a进行自增1运算,一个线程对同一个变量a进行自减1运算,那么a的值变化如何?肯定是很混乱的,一会儿加,一会儿减的,这个时候,如果我想让他自增1运算10次后,再自减1,怎么办呢?造成混乱的原因就是,两个线程抢着用变量a,如果当一个线程在使用a的时候,另外一个线程无法使用a,那么这问题不就解决了?这就是线程互斥锁。刚开始的时候,小猫是用环境变量来实现的,后来发现按键精灵的多线程不怎么稳定,哪怕使用了环境变量,还是容易造成方块混乱,于是这里就要用到了mp9999ddd的多线程互斥锁插件这个插件。
Sub MoveFK()//移动方块
& && &&&MoveKey = 0
& && &&&If SpeedUp = 0 or SpeedUp = 1 Then
& && && && &TracePrint &SpeedUp& &&& SpeedUp
& && && && &MoveKey = WaitKey()
& && && && &Call Plugin.jcqm.jMutexLock(Lock)
& && && && &TracePrint &移动&
& && && && &Select Case MoveKey
& && && && &Case 37
& && && && && & getCheckFK = CheckFK()
& && && && && & If getCheckFK Then
& && && && && && &&&Call MoveLeft()
& && && && && & End If
& && && && &Case 39
& && && && && & getCheckFK = CheckFK()
& && && && && & If getCheckFK Then& && && && && && &&&
& && && && && && &&&Call MoveRight()
& && && && && & End If
& && && && &Case 38
& && && && && & Call Change()
& && && && &End Select
& && && && &Call Plugin.jcqm.jMutexUnLock(Lock)
& && && && &Delay 50
& && &&&End If
Sub MoveLeft()//左移
& & Call FKStatic()
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd1, getFKRect1(0) - 30, getFKRect1(1))& &
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd2, getFKRect2(0) - 30, getFKRect2(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd3, getFKRect3(0) - 30, getFKRect3(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd4, getFKRect4(0) - 30, getFKRect4(1))
Sub MoveRight()右移
& & Call FKStatic()
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd1, getFKRect1(0) + 30, getFKRect1(1))& &
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd2, getFKRect2(0) + 30, getFKRect2(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd3, getFKRect3(0) + 30, getFKRect3(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd4, getFKRect4(0) + 30, getFKRect4(1))
Sub MoveDown()//下降
& & Call FKStatic()
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd1, getFKRect1(0), getFKRect1(1) + 30)& &
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd2, getFKRect2(0), getFKRect2(1) + 30)
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd3, getFKRect3(0), getFKRect3(1) + 30)
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd4, getFKRect4(0), getFKRect4(1) + 30)
& && &&&第六,现在我们已经把下降和左右移动写好了,现在要写消除代码了,思路很简单,判断一行是不是都为方块,如果是,则消除,并且上面的方块集体下移。如何判断呢?我们通过抓抓获取的句柄可知,方块窗口的类是“361DuButtonClass3”,我们可以通过同一行的窗口的类是不是都为这个,如果是,则消除这一行,并且上面的方块都掉下来,注意一点,这个只要判断当前落下方块的范围下是否一行都是方块即可,顺便把得分算法也写了。
Sub ClearFKLine()
& & TracePrint &消除&
& & Call FKStatic()
& & ScoreExp = -1& &
& & MinToMaxArr = Array(getFKRect1(1), getFKRect2(1), getFKRect3(1), getFKRect4(1))
& & MinToMax = lib.算法.结构数组排序(MinToMaxArr,0)
& & FKMinToMaxY = 数组去重(split(MinToMax, & &))
& & For CheckFKLineJ = 0 To UBound(FKMinToMaxY)
& && &&&If CheckFKLine(FKMinToMaxY(CheckFKLineJ)) Then
& && && && &For UnCreateI = 1 To 10
& && && && && & Call UnCreate(CheckFKLineHwndArr(UnCreateI))
& && && && &Next
& && && && &Call ClearDown(FKMinToMaxY(CheckFKLineJ))
& && && && &ScoreExp = ScoreExp + 1
& && && && &ClearRow = ClearRow + 1& && && && &
& && &&&End If
& & Level = Int(ClearRow / 20) + 1& &
& & If ScoreExp & -1&&Then
& && &&&getScore = (2 ^ ScoreExp) * 10 * Level& && && && &
& && &&&Score = Score + getScore
& & End If
Function CheckFKLine(CheckFKLineY)
& & For CheckFKLineI = 1 To 10
& && &&&CheckFKLineHwndArr(CheckFkLineI) = getPointHwnd(489 + 30 * CheckFKLineI - 15, CheckFKLineY + 15)
& && &&&CheckFKClass = Plugin.WindowEx5_01.GetWindowInfo(CheckFKLineHwndArr(CheckFkLineI), 1)& && &&&
& && &&&If CheckFKClass = &361DuButtonClass3& Then
& && && && &CheckFKLine = True
& && &&&Else
& && && && &CheckFKLine = false
& && && && &Exit For
& && &&&End If
End Function
Sub ClearDown(ClearDownY)
& & ClearDownNum = (ClearDownY - 99) / 30
& & TracePrint ClearDownNum
& & If ClearDownNum & 0 Then
& && &&&For ClearDownI = 1 To ClearDownNum
& && && && &ClearStop = 0& && && && &
& && && && &For ClearDownJ = 1 To 10
& && && && && & ClearDownHwnd = getPointHwnd(489 + 30 * ClearDownJ - 15, ClearDownY - 30 * ClearDownI + 15)
& && && && && & ClearDownClass = Plugin.WindowEx5_01.GetWindowInfo(ClearDownHwnd,1)
& && && && && & If ClearDownClass = &361DuButtonClass3& Then& && && && && && && && && && && && && &&&
& && && && && && &&&getCDRect = Plugin.WindowEx5_01.GetWindowInfo(ClearDownHwnd, 2)
& && && && && && &&&Call Plugin.WindowEx5_01.MoveWindow(ClearDownHwnd, getCDRect(0), getCDRect(1) + 30)
& && && && && & ElseIf ClearStop = 10 Then
& && && && && && &&&Exit Sub&&
& && && && && & ElseIf ClearDownHwnd = MainHwnd Then
& && && && && && &&&ClearStop=ClearStop+1
& && && && && & End If
& && && && &Next
& && &&&Next& && && && && &
& & End If
& && &&&第八,落下,移动,消除,都有了,就差变形了,怎么变呢?小猫通过百度玩了一会儿的俄罗斯方块,才找出每一种的变形规律,基本上是以一个方块为中心,其余方块按照一个方向同时转动。这里要注意,如果转动的位置上,有方块的话,那么就无法变形了。
Sub ChangeOO()
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd1, getFKRect2(0), getFKRect2(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd2, getFKRect3(0), getFKRect3(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd3, getFKRect4(0), getFKRect4(1))
& & Call Plugin.WindowEx5_01.MoveWindow(getFKHWnd4, getFKRect1(0), getFKRect1(1))& && &&&
& && &&&第九,OK,基本功能都完成了,现在要判断游戏的输赢了,很简单,第一块下来后,如果直接遇到了方块句柄,那就表示游戏结束了。
FKYArray=Array(getFKRect1(1),getFKRect2(1),getFKRect3(1),getFKRect4(1))
& & FKXArray=Array(getFKRect1(0),getFKRect2(0),getFKRect3(0),getFKRect4(0))
& & For FKYI = 0 To 3
& && &&&If FKYArray(FKYI) = 69 Then
& && && && &IsFKHwnd = getPointHwnd(FKXArray(FKYI) + 15, 114)
& && && && &IsFKClass = Plugin.WindowEx5_01.GetWindowInfo(IsFKHwnd, 1)
& && && && &If IsFKClass = &361DuButtonClass3& Then
& && && && && & Exit Do
& && && && &End If
& && &&&End If
& && &&&第十,全部完成,除了部分代码没解释外,差不多都说了,现在直接上全部源代码,见下。
& && &&&写脚本一定要有耐心和细心,一个俄罗斯方块,小猫花了10天的时间写,遇到了该用什么方法写,移动时错位,消除时关闭了桌面等问题,但还是被小猫一个一个解决了,如果你想一天就学会写脚本,两天就能写出自动跑路,自动打怪,自动捡东西...,这是不可能的,所以说,写脚本一定要耐心和细心!!!
喵了个咪。。。。代码太长了,超过帖子限制了。。。发源文件得了。。。
we似曾相识
鼓掌..{:5_133:}
支持{:5_139:}
厉害.学习一下.
结束语很经典 谢谢分享
支持啊~!!!!!!!!!!!
来看看是什么情况吧
我是来学习思路的!!
继续努力~~
{:5_141:}顶起
xiaoweizax
吸收了&&沙发@!:lol
学习学习学习
牛X啊:handshake
不错啊 去试试
www8500586
谢谢~~~~~~~~~~~~
{:3_69:}顶下
luminqiang
看了以后都没有继续学按键的信心了
查看完整版本:按键精灵 8.31官网版下载[网络游戏脚本制作/游戏辅助利器]ASP1下载
您的位置: &&
按键精灵 8.31官网版下载[网络游戏脚本制作/游戏辅助利器]
精品推荐: 
软件类别:
软件评价:
运行环境:
Win9x/NT/2000/XP/2003/
软件大小:
更新日期:
相关链接:
下载统计:
用户评论:
按键精灵 8.31官网版下载[网络游戏脚本制作/游戏辅助利器]
按键精灵的大名你一定听说过,记得在我大学的2005年的时候,网游如火如荼,游戏中的功能越来越繁杂,很多人都使用按键精灵来编制各种游戏脚本,极大地解放了玩家的双手。现在最新推出的按键精灵8 功能更加的强大,我们看看最新的版本给我们带来了什么。
首先按 键精灵下载 后软件的安装非常的简单,仅仅几步即可以完成所有步骤。进入软件的主界面之后,你会发现软件主界面的界面经过了重新的设计,特别是软件的图标完全经过了重新设计,整体颜色呈绿色,看上去非常的美观大方。接着我们可以看到在软件中已经内置了不少的经典脚本,软件将这些脚本进行了详细的分类,例如“插件命令”,“基本命令”,“脚本技巧”,“网游游戏”等等。用户可以使用多种方式启动该脚本。我们以“脚本技巧”中的“自动刷新网页”这个脚本为例。如果用户想使用热键启动该脚本,请在勾选该脚本,即可使用快捷键启动该脚本。用户如果觉得默认的快捷键不适合自己的风格,用户可以自行修改该快捷键。此外,用户还可以右键单击该脚本,然后在选择菜单中选择“运行脚本”,也同样可以实现执行该脚本的功能,用户可以根据自己的需要自行选定。同样的用户还可以使用快捷键终止脚本的运行,该方式和启动脚本差不多,这里就不在累述了。就算你不知道按键精灵怎么用也没有关系,第一次启动软件会进入按键精灵教程界面,跟着屏幕上的指示就能学会如何使用它来创建按键精灵脚本。
软件默认的脚本毕竟有限,软件最强大的功能就是编制适合自己的脚本。你也许认为编制脚本是个非常复杂的工作,其实在按键精灵的帮助下,我觉得一般人也能够编制出非常不错的脚本软件。软件支持用户采用直接录制鼠标和键盘的动作,你只需点击“录制”功能键,即可以开始录制,按键精灵将完全记录下你的鼠标和键盘的动作。录制完成之后,你可以点击终止录制,并且保存你已经录制的脚本即可,如果你觉得不满意,你还可以自行修改软件录制的脚本,脚本软件非常容易看懂,因为其完全是采用中文标示。有点计算机知识的人都可以顺利地编辑脚本。按键精灵8 还支持完全由用户自行编辑脚本,就想你编写程序那样。例如,我们想编制一个查看CPU占用率的脚本,我们可以在基本命令中依次插入Ctrl,Shift,Esc,然后选择延时1秒,再加入还有3个左箭头,保存即可。怎么样是不是非常的简单?我相信你一定完全也可以做到的。如果你在设置脚本上遇到了问题,也可也登陆按键精灵论坛寻求帮助,那里面可都是脚本高手。
此外软件还支持将你编制的脚本直接生成exe文件,即使计算机上没有按键精灵,软件也可以照常运行。你还可以将你的编制好的脚本放到网上,让更多的用户同时体会按键精灵的快乐。
其它相关软件
·&()·&()·&()}

我要回帖

更多关于 按键精灵qui教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信