找回密码
 注册成为果猿

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
  • 基础教程

按键Flash小游戏(用按键精灵来搞它)

果壳王子 2020-9-28 18:26:16 显示全部楼层 阅读模式
上一集 下一集
正在播放:

该视频为收费视频,请购买后观看

本视频为VIP专享,您可以升级vip组,或者用积分购买观看

需支付果酱: 0

登录观看


按键视频小游戏(用按键精灵来搞它)

按键视频小游戏(用按键精灵来搞它)

按键视频小游戏(用按键精灵来搞它)

按键视频小游戏(用按键精灵来搞它)

按键精灵写脚本实现自动游戏


1跳舞类游戏
《跳舞类游戏》
操作方式:按顺序输入由方向键组成的音符序列,然后在重音拍按下空格键。
制作思路:可以根据不同方向的朝向来抓颜色点进行判断要按的方向键。
参考脚本

//V1.1 1-解决上个版本怪在某些特殊位置出现导致的问题

// 2-修正了判断层位置时的BUG

// 3-加入了平时对技能的支持

// 4-退出时弹起所有按键

//V1.2 1-加入了寻找蓝球加蓝

// 2-加入了对玩家高度高于目标二层时下落一层时行走方向的再次判断

// 3-对层次判断提取为一个子函数

//V1.3 最终版--解决最右边层蓝球的问题。

//**************************************************************************

UserVar HpPer = 50 "使用血瓶的血量百分比"

UserVar MpPer = 30 "寻找蓝球时的百分比"

UserVar UseSkillMpPer = 70 "平时使用技能的蓝量百分比"

//定义变量与初始化

Dim hWnd, ClientRect, Ret(4), HpStep, HpX, HpY, MpX, MpY, UseSkillMpX, UseSkillMpY

Dim GameLeft, GameTop, GameRight, GameButtom

Dim MonX, MonY, PlayerX, PlayerY, BallX, BallY

Dim MonFloor, PlayerFloor, BallFloor, tempHigh, tempFloor

Dim HPColor, MpColor, MonColor, PlayerColor, FloorColor, SideColor, BallColor

Dim AttackMaxDis, MagicDis, AttackedDis, RelativeDis, GameState, FindBallState, MonDir, KeyNum

//MonColor 怪物的特征色--棒子 PlayerColor 人物的特征色--手臂 FloorColor 每层高度的特征色--绿色 MonFloor 怪物所在的高度层 PlayerFloor-玩家所在的高度层

HpColor = "0066FF": MpColor = "FF6600": MonColor = "4C7299": PlayerColor = "0033CC": FloorColor = "0B8648": SideColor = "004E88": BallColor = "D7720E"

MonFloor = 0: PlayerFloor = 0: BallFloor = 0

//GameState --含义 -1 没有发现怪物 0 发现怪物 1 普通攻击 2 魔法攻击

AttackMaxDis = 120: MagicDis = 330: AttackedDis = 104: GameState = -1: FindBallState = -1: MonDir = 1: KeyNum = 39: HpStep = 0.88: MpStep = 0.88

//--------------------------------------------------------------

//获得游戏窗口句柄和位置尺寸等信息以便操作

hWnd = Plugin.Window.mousepoint()

ClientRect = Plugin.Window.GetClientRect(hWnd)

//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)

If StrComp(Right(ClientRect, 7), "550|400") <> 0 Then

  Messagebox("请将鼠标放在游戏窗口内启动脚本。")

  EndScript 

End If 

Rect = Split(ClientRect,"|",-1,1)

GameLeft = CInt(Rect(0))

GameTop = CInt(Rect(1))

GameRight = CInt(Rect(0)) + CInt(Rect(2))

GameButtom = CInt(Rect(1)) + CInt(Rect(3))

HpX = GameLeft + 80 + CInt( HpStep * HpPer)

HpY = GameTop + 31

MpX = GameLeft + 80 + CInt( MpStep * MpPer)

MaxMpX = GameLeft + 80 + CInt( MpStep * 90)

MpY = GameTop + 61

UseSkillMpX = GameLeft + 80 + CInt( MpStep * UseSkillMpPer)

UseSkillMpY = GameTop + 61

//系统和窗口初始化完毕------------------------------------------

While True

  Call AddHp

  Call PlayerMove

  //Call GetBallInfo

  Call GetMonInfo

  Call GetPlayerInfo

  Call MoveToMon

  Call MoveToBall

  Call AttackMon

Wend 

//左右移动

Sub PlayerMove

  If GameState = -1

    //判断地图边界则是通过地图最下面的二颗树的枝来判断的 //MinDir 行动方向, 1 向右 -1 向左

    Call FindColorEx(GameLeft + 140, GameButtom - 3, GameRight - 140, GameButtom - 1, SideColor, 0, 0.9, SideX, SideY)

    If SideX > 0 Then

      KeyUp KeyNum, 1

      If SideX < GameLeft + 200 Then

        MonDir = 1

      Else 

        MonDir = -1

      End If 

    End If 

    KeyNum = 38 + MonDir

    KeyDown KeyNum, 1

  End If 

End Sub

//得到怪物信息

Sub GetMonInfo

  Call FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, MonColor, 0, 0.9, MonX, MonY)

  Delay 2

  If MonY >0 Then

    //得到怪物X中心坐标

    MonX = MonX + 15

    tempHigh = MonY

    Call GetFloor

    MonFloor = tempFloor

  End If 

End Sub

//得到玩家信息

Sub GetPlayerInfo

  Call FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, PlayerColor, 0, 0.9, PlayerX, PlayerY)

  Delay 2

  If PlayerY>0 Then

    PlayerDir = 0

    // 默认认为玩家面象为左边,这里通过玩家特征点的坐标加偏移找玩家眼睛来判断面象

    Call FindColorEx(PlayerX + 12, PlayerY - 15, PlayerX + 16, PlayerY - 19, "DFDFDF", 1, 0.8, HeadX, HeadY)

    If HeadX >0 Then

      PlayerDir = 1

    End If 

    tempHigh = PlayerY

    Call GetFloor

    PlayerFloor = tempFloor

  End If 

End Sub

//得到蓝球信息

Sub GetBallInfo

  Call FindColorEx(GameLeft, GameTop + 55, GameRight, GameButtom - 60, BallColor, 0, 0.8, BallX, BallY)

  Delay 1

  If BallY>0 Then

    tempHigh = BallY + 35

    Call GetFloor

    BallFloor = tempFloor

  End If 

  //吃蓝是特殊情况 --因为在最右边,要想吃的话,得从左边上去。中间会导致找不到蓝球。所以强制置X坐标

  If BallFloor = 4 and BallY < 0 Then

    BallX = GameRight

  End If 

End Sub

//得到所在的层数

Sub GetFloor

  If tempHigh > GameTop + 250 Then

    tempFloor = 0

  ElseIf tempHigh > GameTop + 170 Then

    tempFloor = 1

  ElseIf tempHigh > GameTop + 110 Then

    tempFloor = 2

  ElseIf tempHigh > GameTop + 85 Then

    tempFloor = 4

  ElseIf tempHigh > GameTop + 60 Then

    tempFloor = 3.5

  End If 

End Sub

//走向怪物

Sub MoveToMon

  GameState = -1

  If MonX > 0 and PlayerX > 0 Then

    GameState = 0

    FloorDis = MonFloor - PlayerFloor

    //如果玩家高度高于怪物,先移动到怪物的下面

    If FloorDis < 0 and (NearMon = 0 or tempFloorDis <> FloorDis) Then

      tempFloorDis = FloorDis

      NearMon = 1

      Call JudgeMoveDir

      //如果怪物处在第三层,特殊处理

    ElseIf MonFloor = 4 Then

      //说明我已在第一层了

      If FloorDis < 3.5 Then

        If (Abs(MonX - PlayerX) >= MagicDis) Then

          Call JudegMoveDir

        Else 

          Call StopMove

          GameState = 2

        End If 

      Else 

        tempTopDis = -90: tempButtomDis = 0: tempXDis = 65

        //没有在第一层,则找到第一层相对于玩家的位置

        Call JudgeFloorPos

      End If 

      //玩家与怪物的高度小于3格,在最大攻击距离内跳砍就能打到

    ElseIf FloorDis >= 0 and FloorDis <> 3 Then

      //如果玩家和怪的X距离大于最大攻击距离

      If (((Abs(MonX - PlayerX) >= AttackMaxDis) and (FloorDis < 3)) or ((Abs(MonX - PlayerX) >= 20) and (FloorDis > 3))) Then

        Call JudgeMoveDir

      Else 

        Call StopMove

        GameState = 1

      End If 

    End If 

  ElseIf NearMon = 1 Then

    Call StopMove

  End If 

End Sub

//向目标移动

Sub JudgeMoveDir

  KeyUp 39, 1

  KeyUp 37, 1

  If MonX > PlayerX Then

    KeyDown 39, 1

    //置玩家行走方向和当前面向相同

    MonDir = 1

  Else 

    KeyDown 37, 1

    MonDir = -1

  End If 

End Sub

//停止移动

Sub StopMove

  FindBallState = 0

  NearMon = 0

  KeyUp 39, 1

  KeyUp 37, 1

  Delay 30

End Sub

//移动到蓝球

Sub MoveToBall

  //蓝自动回到大于90%时不再找蓝球回蓝

  Call FindColorEx( MaxMpX, MpY, MaxMpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)

  If FindBallX > 0 Then

    FindBallState = 0

    BallFloor = 0

  End If 

  If GameState < 0 Then

    //判断是否要找蓝球回蓝

    Call FindColorEx( MpX, MpY, MpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)

    If FindBallX < 0 and FindBallState = 0 Then

      FindBallState = 1

    End If 

    If FindBallState <> 0 Then

      Call GetBallInfo

      Call StepToFloor

    End If 

  End If 

End Sub

//得到层与层之间的关系

Sub StepToFloor

  If BallX > 0 and PlayerX > 0 Then

    GameState = -2

    FloorDis = BallFloor - PlayerFloor

    //如果玩家高度高于怪物,先移动到怪物的下面

    If FloorDis < 0 and (FindBallState = 1 or tempFloorDis <> FloorDis) Then

      tempFloorDis = FloorDis

      FindBallState = 2

      Call JudgeMoveBallDir

    ElseIf FloorDis = 0 Then

      Call JudgeMoveBallDir

      //已吃到蓝球,蓝球位置置0

      If Abs(BallX - PlayerX) < 35 Then

        BallFloor = 0

      End If 

    ElseIf FloorDis > 0 Then

      tempLeftDis = 0 : tempRightDis = 0

      //处理找蓝球加蓝时可能会导致的一个问题

      If BallFloor = 1 Then

        If BallX > PlayerX Then

          tempLeftDis = 250 : tempRightDis = 0

        Else 

          tempLeftDis = 0 : tempRightDis = -250

        End If 

      End If 

      If PlayerFloor = 3.5 Then

        tempTopDis = 40: tempButtomDis = 60: tempXDis = 150

      Else 

        tempTopDis = -90: tempButtomDis = 0: tempXDis = 65

      End If 

      Call JudgeFloorPos

    End If 

  ElseIf FindBallState = 2 Then

    Call StopMove

  End If 

End Sub

//得到层与层之间的关系

Sub JudgeFloorPos

  //没有在第一层,则找到第一层相对于玩家的位置 从中间左右判断上一层相对于玩家的位置

  Call FindColorEx(GameLeft + tempLeftDis, PlayerY + tempTopDis, PlayerX, PlayerY + tempButtomDis, FloorColor, 2, 0.8, FloorX1, FloorY1)

  Call FindColorEx(PlayerX, PlayerY + tempTopDis, GameRight + tempRightDis, PlayerY + tempButtomDis, FloorColor, 0, 0.8, FloorX2, FloorY2)

  If FloorX1 < 0 and FloorX2 < 0 Then

    KeyDown KeyNum, 1

  ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX >= PlayerX - FloorX1)) or (FloorX1 > 0 and FloorX2 < 0) Then

    KeyUp 39, 1

    KeyDown 37, 1

    MonDir = -1

  ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX < PlayerX - FloorX1)) or (FloorX1 < 0 and FloorX2 > 0) Then

    KeyUp 37, 1

    KeyDown 39, 1

    MonDir = 1

  End If 

  If Abs(FloorX1 - PlayerX) < tempXDis or ABS(FloorX2 - PlayerX) < tempXDis Then

    KeyPress 32, 1

    Delay 500

  End If 

End Sub

//向目标移动

Sub JudgeMoveBallDir

  KeyUp 39, 1

  KeyUp 37, 1

  If BallX > PlayerX Then

    KeyDown 39, 1

    //置玩家行走方向和当前面向相同

    //MonDir = 1

  Else 

    KeyDown 37, 1

    //MonDir = -1

  End If 

End Sub

//攻击怪物

Sub AttackMon

  If (GameState > 0) Then

    //玩家和怪物背向则调整面象

    If MonX > PlayerX and PlayerDir = 0 Then

      KeyPress 39, 1

      Delay 30

    ElseIf MonX < PlayerX and PlayerDir = 1 Then

      KeyPress 37, 1

      Delay 30

    End If 

    //相隔不同层时的延时处理

    JumpDelay = 0

    If MonFloor - PlayerFloor > 0 Then

      KeyDown 32, 1

      Delay 200

      If MonFloor - PlayerFloor = 2 or MonFloor - PlayerFloor = 3 Then

        JumpDelay = 250

      ElseIf MonFloor - PlayerFloor = 2.5 Then

        JumpDelay = 275

      End If 

      Delay JumpDelay

      KeyUp 32, 1

    End If 

    If GameState = 1 Then

      //判断平时是否使用技能 限制在相隔一层的范围内效果比较好

      Call FindColorEx( UseSkillMpX, UseSkillMpY, UseSkillMpX, UseSkillMpY, MpColor, 0, 0.9, UseSkillX, UseSkillY)

      If MonFloor - PlayerFloor < 1.5 and UseSkillX > 0 Then

        KeyPress 83, 1

      Else 

        KeyPress 65, 1

      End If 

    Else 

      KeyPress 83, 1

    End If 

    Delay JumpDelay + 200

  End If 

End Sub

//加血

Sub AddHp

  IfColor HpX, HpY, HpColor, 1 Then

    KeyPress 49, 1

    Delay 50

  End If 

End Sub

//防止有按键没有弹起

Sub OnScriptExit

  KeyUp 32, 1

  KeyUp 37, 1

  KeyUp 39, 1

End Sub
2网游自动加血
《网游自动加血》
游戏分析:血条生命值是一个游戏屏幕上的人物HP指示,当受到攻击时会减少HP值。生命值在网游中的展现有如下几种方式:横向的血条、竖向的血条、圆形的血球、不规则型等。生命值在网游中是最关键、最敏感、最值得关注的参数之一,而血条作为人物生命值的直观展现,几乎所有的实用脚本都要与血条打交道,几乎所有的实用脚本都首先关注人物的生死存亡,几乎所有的打怪练级加PK类网游脚本都首先提供自动加红加蓝等基础功能。
操作方式:每个血条或者蓝条都会随着时间而减少,按下相应的快捷键或者鼠标点按钮,就可以帮相应的血条补满血哦!
制作思路:根据血条的颜色或底色来找色判断,特殊血条形状用数学公式解决。
参考脚本

//脚本思路:

//1、加血加蓝类无非就是在血或蓝达到指定的条件的时候按下游戏里相应的设置键(放了血瓶或蓝瓶的键)进行加血或加蓝!

//2、一般常见的有百分比加血和血量加血。

//2.1、百分比加血是将血(蓝)槽的长度按等份平分,血槽长度是——满血时的坐标减去没血时的坐标; 平分血槽一般常 见的是将血槽长度除以100(你觉得除以100不够仔细你也可以除以1000甚至10000),也就是把血槽长度平均分成100小段,在根据用户设置的百分比来计算。

//   这种加血方法的优点是速度快、制作容易;缺点是精准不是很高,容易被干扰。

//   注意:起始坐标要加上最小值的坐标。

//2.2、血量加血是更具血的显示数值进行加血,数值获得可以利用大兵、一只鱼、星星火、91等作者的插件获得。获得数值后在和用户设置的数值作比较。来进行加血判断。

//   这种加血方法的优点是高精准,干扰性低;缺点是制作麻烦(需要做字库),判断速度慢。

//3、现在我们来看网页所给的3个例子进行分析。

//3.1、先分析血条的颜色、看血条是否会变色。三种血条就圆形的血条不变色,第一种血条是渐变的以血的颜色来判断血比较麻烦。第二种中间存在干扰物,可以利用左右两边进行判断(干扰刚好没在那个点上)。

//   我们在对血条底色进行分析。分析结果是3种血槽底色不存在变化,所以我们可以从判断底色进行判断血量。

//4、如何制作

//4.1、根据底色如何判断呢??比如我们判断血是否大于一半(50%)如果血大于50%的话那么血槽中间就看不到血槽的底色。也就是判断血槽中间点是否是血槽底色。是那么血就少于50%不是的话血就多余50%。 判断出血少于了50%该如何加血呢??其实很简单(看第一条),给我们试验的游戏的"Q"键就是给横向血条加血的。只要当血少于50%我们就让脚本按一次"Q"键(KeyPress 81,1)。

//5、关于更具数值来判断的我就不啰嗦了,感觉没什么难度。直接用2.2提到的几位大大的插件就搞定了呵呵。

//分析结束,接下来就该你动手了。祝您成功!

//○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

//===========以=下=为=范=例=脚=本============

//○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○

//用户设置和变量定义

Dim hwnd,rect,jxbfb,jlbfb,jxl,zxz,jll,zlz,dw,dwx,dwy,ajz,ys,xzbz(5),yzbz(5)

UserVar ms=DropList{"百分比模式":0|"数值模式":1|"推荐模式":2}=0 "设置内容"

jxbfb=40 //血少于百分之几加血

jlbfb=40 //蓝少于百分之几加蓝

jxl=40 //血少于多少时加血

zxz=100 //你的总血量是多少

jll=40 //蓝少于多少时加蓝

zlz=100 //你的总蓝量是多少

//获得鼠标所指向的窗口的句柄

hwnd=Plugin.Window.MousePoint()

//获得窗口左上角的位置和窗口的大小

rect=Plugin.Window.GetClientRect(hwnd)

If InStrRev(rect,"550|400")=0

  MessageBox "请将鼠标放在游戏窗口内在启动游戏"

  EndScript 

End If 

//获得窗口左上角的坐标,并将坐标作为参考坐标

dw=Split(rect,"|"):dwx=dw(0):dwy=dw(1)

If ms=1

  //将数值血量转换为百分比数值

  jxbfb=jxl/zxz*100

  jlbfb=jll/zlz*100

ElseIf ms=2

  jxbfb=40

  jlbfb=40

End If 

//按键值数组,ARRAY是用于引用数组元素的表示符,由跟随有括号的变量名组成,括号中包含指示所需元素的索引号

ajz=array(81,87,65,83,68,70)

//颜色值数组

ys=array("D9D9D9","D9D9D9","ffffff","ffffff","e6e6e6","e6e6e6")

//设置横向血和蓝的判断点

xzbz(0)=(845-614)/100*jxbfb+dwx+64:xzbz(1)=(845-614)/100*jlbfb+dwx+64

yzbz(0)=dwy+33:yzbz(1)=dwy+77

//设置竖向血和蓝的判断点

xzbz(2)=dwx+82:xzbz(3)=dwx+170

yzbz(2)=dwy+303-(590-402)/100*jxbfb:yzbz(3)=dwy+303-(590-402)/100*jlbfb

//设置圆弧形血和蓝的判断点

xzbz(4)=-67*sin(3.1415926*jxbfb/100)+dwx+382 : xzbz(5)=67*sin(3.1415926*jlbfb/100)+dwx+386

yzbz(4)=67*cos(3.1415926*jxbfb/100)+dwy+204 : yzbz(5)=67*cos(3.1415926*jlbfb/100)+dwy+204

While true //WHILE true 是一个特意设置的死循环

  i=0

  //因为有3种形态的血和蓝,所以循环6次

  For 6

    //判断学或蓝是否满足加血条件

    IfColor xzbz(i),yzbz(i),ys(i),0

      KeyPress ajz(i),1

    End If 

    i=i+1

  next 

  //设置一个延迟、缓解CPU

  Delay 10

Wend
3回合制打怪
《回合制打怪》
操作方式:地图上按方向键行走会随机遇到敌人,然后进入战斗场景。在战斗场景中双击敌人可进行普通攻击,或按热键1或“攻击”选中敌人普通攻击,按热键2选中敌人可以释放技能,按热键3可以补血(大地图上也可使用)。
制作思路:根据判断颜色或图形来确定是否进入战斗模式,多用标记和子程序。
参考脚本

//获得游戏窗口句柄和位置尺寸等信息以便使用后台操作

hw=Plugin.Window.mousepoint()

clintrect=Plugin.Window.GetClientRect(hw)

rect=split(clintrect,"|",-1,1)

xoffset=cint(rect(0))

yoffset=cint(rect(1))

xwinsize=cint(rect(2))

ywinsize=cint(rect(3))

//系统和窗口初始化完毕------------------------------------------

//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)

If xwinsize<>550 or ywinsize<>400 Then

  Call messagebox("请将鼠标放在游戏窗口内启动脚本。")

  Goto QMScript_end

End If 

//以下程序段用于参数设置

UserVar attackmode=DropList{"普通":0|"技能":1}=0 "攻击模式"

UserVar fillredscale=30 "补血百分比"

//参数设置完毕--------------------------------------------------

//以下程序段用于定义关键点(所有点位均以游戏窗口左上角为基准零点)

//之所以把一些关键点位都集中在一起定义是为了方便以后修改

//1、血条左边界点和血条长度及颜色(这个游戏的血条大约是90个像素点)

xred0=82: yred=36: dxred=90: colorred="0066FF"

xred=xred0+cint(fillredscale*dxred/100)

//2、迷你小地图上的人物标志点和颜色(如果进入战斗状态小地图上会出现蓝色方块表示人物位置,因此可用来判断是否遇敌)

xme=495: yme=70: colorme="CC9900"

//3、回合标志(回合标志取第一个字上的点,为了判断什么时候开始攻击)

xround=208: yround=26: colorround="003399"

//4、mini地图上的敌人位置和位差(最左侧敌人为1,右侧敌人按位差移动)

xanimy1=448: yanimy1=62: dxanimy=25: dyanimy=-9: coloranimy="0066FF"

//定义基本点完毕------------------------------------------------

//****************************************************************

//挂机程序正式开始

Rem start

Call Plugin.Bkgnd.MoveTo(hw,0,0)

//一直向上移动,直到遇敌,因为无地图限制所以往一个方向运动即可

KeyDown 38,1

Rem 等待遇敌

//获得小地图上的定义点,判断是否出现蓝框

color1=Plugin.BkgndColor.GetPixelColor(hw,xme,yme)

//如果不遇敌则反复判断。

If color1<>clng("&H" & colorme) Then

  Delay 100

  Goto 等待遇敌

End If 

//检测到小地图蓝框则执行下面的遇敌处理

//遇敌后首先停止移动

KeyUp 38,1

Delay 100

Rem 等待攻击

//再次判断人物蓝框和回合标志

color1=Plugin.BkgndColor.GetPixelColor(hw,xme,yme)

//如果人物蓝框消失,表示战斗结束

If color1<>clng("&H" & colorme) Then

  Goto start

End If 

color1=Plugin.BkgndColor.GetPixelColor(hw,xround,yround)

//如果没有回合标志镖师还在等待战斗状态

If color1<>clng("&H" & colorround) Then

  Delay 100

  Goto 等待攻击

End If 

//回合标志出现,按顺序搜索小地图上的敌人

i=0

While i<3

  color1=Plugin.BkgndColor.GetPixelColor(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)

  If color1=clng("&H" & coloranimy) Then

    //如果找到任何一个敌人,则实施攻击并回到等待攻击状态,等待下一回合

    Gosub 战斗

    Goto 等待攻击

  End If 

  i=i+1

Wend 

//没有找到敌人,表示攻击结束,进入移动状态

//因为此游戏补血没有消耗,所以战斗结束后补血一次

KeyPress 51,1

Goto start

//程序结束

Rem QMScript_end

EndScript 

//战斗子程序

Sub 战斗

  //战斗前先检查血量,如果血量少于设定值则补血并退出战斗

  color1=Plugin.BkgndColor.GetPixelColor(hw,xred,yred)

  If color1<>clng("&H" & colorred) Then

    KeyPress 51,1

    Goto fightfinish

  End If 

  //不需要补血则攻击

  //根据设定的要求进行普通或者技能攻击

  If attackmode=0 Then

    KeyPress 49,1

  Else 

    KeyPress 50,1

  End If 

  Delay 200

  Call Plugin.Bkgnd.MoveTo(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)

  Delay 100

  Call Plugin.Bkgnd.LeftClick(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)

  Rem fightfinish

  Delay 500

  Call Plugin.Bkgnd.MoveTo(hw,0,0)

  Delay 200

End Sub
4即时制打怪
《即时制打怪》
操作方式:用鼠标操作人物在地图上行走。用鼠标直接点击敌人可进行攻击,按数字键1可以补血。己方血量耗尽则游戏结束。如果血瓶耗尽则进入计分系统,打败敌人越多分数就越高哦!
制作思路:可根据小地图的色点来判断敌人在画面中的位置,进而用鼠标点击。
参考脚本

//获得游戏窗口句柄和位置尺寸等信息以便使用后台操作

hw=Plugin.Window.mousepoint()

clintrect=Plugin.Window.GetClientRect(hw)

rect=split(clintrect,"|",-1,1)

xoffset=cint(rect(0))

yoffset=cint(rect(1))

xwinsize=cint(rect(2))

ywinsize=cint(rect(3))

//系统和窗口初始化完毕------------------------------------------

//

//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)

If xwinsize<>550 or ywinsize<>400 Then

  Call messagebox("请将鼠标放在游戏窗口内启动脚本。")

  Goto QMScript_end

End If 

//

//以下程序段用于参数设置

//补血百分比,这个比例在应用的时候用户根据具体情况调整,可保证安全的前提下达到最少加血次数

UserVar fillredscale=14 "补血百分比"

//参数设置完毕--------------------------------------------------

//

//以下程序段用于定义关键点(所有点位均以游戏窗口左上角为基准零点)

//之所以把一些关键点位都集中在一起定义是为了方便以后修改

//

//1、血条关键点及颜色(因为是半圆形血条,所以用圆心和半径来定义血条,用角度来分来确定补血百分比,其中xcenter,ycenter为

//圆心,r为半径

xcenter=49: ycenter=46: colorred="0000FF": r=32

//通过下面的公式来计算对应补血百分比所要检测的点的位置(其中的ang代表补血百分比所代表的弧度,因为sin,cos函数都是用弧度

//来计算的)

ang=(3.1415926*fillredscale/100)

xred=cint(xcenter-r*sin(ang))

yred=cint(ycenter+r*cos(ang))

//

//2、怪物血条基准点和颜色(用怪物血条边框的黑色来判断怪是否打死)

xbar=209: ybar=25: colorbar="000000"

//

//3、小地图范围和怪物颜色(1和2分别为左上角和右下角点)

xmap1=420 :ymap1=20 :xmap2=530 :ymap2=100: coloranimy="0000CC": colorme="009900"

xmapcenter=475: ymapcenter=60

//

//4、人物头发的黑色可以用来判断游戏是否结束

xhead=47: yhead=33: colorhead="000000"

//

//定义基本点完毕------------------------------------------------

//

//****************************************************************

//

//挂机程序正式开始

Rem start

//先将鼠标移动到窗口右下角位置以免影响取色

MoveTo xoffset+xwinsize/2,yoffset+ywinsize/2

//建立两个变量分别记录血瓶数量和打怪个数

redbt=50: killanimy=0

//记录程序运行时间

timestart=now

//

Rem 寻找敌人

//在小地图上搜索敌人并转换为大地图的坐标

////用中心向外的找色方式,以确保找到的怪距离自己最近,范围向内收缩两个像素点,为了避免怪物太靠边,找到了但点不到的情况

ret=Plugin.BkgndColor.FindCenterColor(hw,xmap1+2,ymap1+2,xmap2-2,ymap2-2,coloranimy)

If ret="-1|-1" Then

  //小地图没有找到怪则调用人物移动子命令,并重新寻找敌人

  Call 人物移动

Else 

  //找到了怪则拆分出坐标值

  zuobiao=split(ret,"|",-1,1)

  x1=zuobiao(0)

  y1=zuobiao(1)

  //小地图和大地图像素比例为1:5 ,根据这个比例,把小地图上怪和人的位差换算到大地图上,从而得到怪的坐标点

  xanimy=xwinsize/2+7+(x1-xmapcenter)*5

  //上面公式中加了一个7,是因为在调试中发现大地图上人物的头的中心并不在整个窗口中心,而要往右偏7个像素点左右

  yanimy=ywinsize/2+(y1-ymapcenter)*5

  Call 战斗

End If 

//此处判断一下游戏是否结束,可用左上角人物头像的头发颜色来判断

color1=Plugin.BkgndColor.GetPixelColor(hw,xhead,yhead)

If color1<>clng("&H" & colorhead) Then

  Goto QMScript_end

End If 

Goto 寻找敌人

//程序结束

Rem QMScript_end

//计算挂机时间和播报战果

howlong=datediff("n",timestart,now)

Call MessageBox("鹤羽工具:游戏结束。你共挂机约 " & howlong & " 分钟时间。")

EndScript 

//战斗子程序

Sub 战斗

  //点击怪物

  Call Plugin.Bkgnd.MoveTo(hw,xanimy,yanimy)

  Delay 50

  Call Plugin.Bkgnd.LeftClick(hw,xanimy,yanimy)

  Delay 50

  Call Plugin.Bkgnd.MoveTo(hw,xwinsize/2,ywinsize/2)

  //

  time1=now

  //怪物血条出现表示攻击真正开始

  Rem 等待怪物血条出现

  color1=Plugin.BkgndColor.GetPixelColor(hw,xbar,ybar)

  If color1<>clng("&H" & colorbar) Then

    If datediff("s",time1,now)<3 Then

      //有时候怪物血条可能出现滞后,因此这里也增加检查血量的工作保证安全

      Call 检查血量

      Delay 20

      Goto 等待怪物血条出现

    Else 

      //如果点击怪物以后超过5秒还不出现怪物血条,说明有可能点空了,则退出战斗重新找怪

      Goto 战斗结束

    End If 

  End If 

  //打怪数量加1

  killanimy=killanimy+1

  Rem 等待战斗结束

  //战斗中随时检查血量,小于设定值立刻补血

  Call 检查血量

  //怪物血条消失才表示战斗结束,否则继续等待

  color1=Plugin.BkgndColor.GetPixelColor(hw,xbar,ybar)

  If color1=clng("&H" & colorbar) Then

    Delay 20

    Goto 等待战斗结束

  End If 

  killanimy=killanimy+1

  Delay 500

  Rem 战斗结束

  //战斗结束了还需要检查一下血量,因为有可能怪物死前最后一击导致已经很少血,下次攻击开使的时候可能来不及加

  Call 检查血量

End Sub 

//

Sub 检查血量

  color1=Plugin.BkgndColor.GetPixelColor(hw,xred,yred)

  If color1<>clng("&H" & colorred) Then

    KeyPress 49,1

    //如果喝血,血瓶数量减1

    redbt=redbt-1

    Delay 500

  End If 

End Sub 

//

Sub 人物移动

  //人物移动可采用随机方式,当然也有各种方法可以实现智能一点的移动方式,节省时间,但智能化较复杂,此处省略

  //为了获得最大的移动距离,此处可取游戏屏幕的四个角点为随机移动点,随机坐标可用如下公式获得

  randomize

  //获得0-3的随机数

  randpoint=cint(rnd*3)

  //巧妙的利用游戏窗口的尺寸参数和两个函数来得到移动距离最长的随机点

  xmove=xwinsize*(randpoint\2)

  ymove=ywinsize*(randpoint mod 2)

  //上面的公式的效果是,随机数0的时候左上角点,随机数1的时候左下角点,随机数2的时候右上角点,随机数3的时候右下角点

  Call Plugin.Bkgnd.MoveTo(hw,xmove,ymove)

  Delay 100

  Call Plugin.Bkgnd.LeftClick(hw,xmove,ymove)

  Delay 1000

  Call Plugin.Bkgnd.MoveTo(hw,xwinsize/2,ywinsize/2)

  Delay 2000

End Sub
5横板动作
《横板动作》
操作方式:按左右键进行移动,空格键跳跃,A键攻击,S键放技能,数字键1可补满血,吃到蓝球可补满蓝。在规定时间内打倒越多的怪物,则分数越高。
制作思路:考验各种基本知识的应用,难度比较大哦~
参考脚本

//V1.1 1-解决上个版本怪在某些特殊位置出现导致的问题

// 2-修正了判断层位置时的BUG

// 3-加入了平时对技能的支持

// 4-退出时弹起所有按键

//V1.2 1-加入了寻找蓝球加蓝

// 2-加入了对玩家高度高于目标二层时下落一层时行走方向的再次判断

// 3-对层次判断提取为一个子函数

//V1.3 最终版--解决最右边层蓝球的问题。

//**************************************************************************

UserVar HpPer = 50 "使用血瓶的血量百分比"

UserVar MpPer = 30 "寻找蓝球时的百分比"

UserVar UseSkillMpPer = 70 "平时使用技能的蓝量百分比"

//定义变量与初始化

Dim hWnd, ClientRect, Ret(4), HpStep, HpX, HpY, MpX, MpY, UseSkillMpX, UseSkillMpY

Dim GameLeft, GameTop, GameRight, GameButtom

Dim MonX, MonY, PlayerX, PlayerY, BallX, BallY

Dim MonFloor, PlayerFloor, BallFloor, tempHigh, tempFloor

Dim HPColor, MpColor, MonColor, PlayerColor, FloorColor, SideColor, BallColor

Dim AttackMaxDis, MagicDis, AttackedDis, RelativeDis, GameState, FindBallState, MonDir, KeyNum

//MonColor 怪物的特征色--棒子 PlayerColor 人物的特征色--手臂 FloorColor 每层高度的特征色--绿色 MonFloor 怪物所在的高度层 PlayerFloor-玩家所在的高度层

HpColor = "0066FF": MpColor = "FF6600": MonColor = "4C7299": PlayerColor = "0033CC": FloorColor = "0B8648": SideColor = "004E88": BallColor = "D7720E"

MonFloor = 0: PlayerFloor = 0: BallFloor = 0

//GameState --含义 -1 没有发现怪物 0 发现怪物 1 普通攻击 2 魔法攻击

AttackMaxDis = 120: MagicDis = 330: AttackedDis = 104: GameState = -1: FindBallState = -1: MonDir = 1: KeyNum = 39: HpStep = 0.88: MpStep = 0.88

//--------------------------------------------------------------

//获得游戏窗口句柄和位置尺寸等信息以便操作

hWnd = Plugin.Window.mousepoint()

ClientRect = Plugin.Window.GetClientRect(hWnd)

//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)

If StrComp(Right(ClientRect, 7), "550|400") <> 0 Then

  Messagebox("请将鼠标放在游戏窗口内启动脚本。")

  EndScript 

End If 

Rect = Split(ClientRect,"|",-1,1)

GameLeft = CInt(Rect(0))

GameTop = CInt(Rect(1))

GameRight = CInt(Rect(0)) + CInt(Rect(2))

GameButtom = CInt(Rect(1)) + CInt(Rect(3))

HpX = GameLeft + 80 + CInt( HpStep * HpPer)

HpY = GameTop + 31

MpX = GameLeft + 80 + CInt( MpStep * MpPer)

MaxMpX = GameLeft + 80 + CInt( MpStep * 90)

MpY = GameTop + 61

UseSkillMpX = GameLeft + 80 + CInt( MpStep * UseSkillMpPer)

UseSkillMpY = GameTop + 61

//系统和窗口初始化完毕------------------------------------------

While True

  Call AddHp

  Call PlayerMove

  //Call GetBallInfo

  Call GetMonInfo

  Call GetPlayerInfo

  Call MoveToMon

  Call MoveToBall

  Call AttackMon

Wend 

//左右移动

Sub PlayerMove

  If GameState = -1

    //判断地图边界则是通过地图最下面的二颗树的枝来判断的 //MinDir 行动方向, 1 向右 -1 向左

    Call FindColorEx(GameLeft + 140, GameButtom - 3, GameRight - 140, GameButtom - 1, SideColor, 0, 0.9, SideX, SideY)

    If SideX > 0 Then

      KeyUp KeyNum, 1

      If SideX < GameLeft + 200 Then

        MonDir = 1

      Else 

        MonDir = -1

      End If 

    End If 

    KeyNum = 38 + MonDir

    KeyDown KeyNum, 1

  End If 

End Sub

//得到怪物信息

Sub GetMonInfo

  Call FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, MonColor, 0, 0.9, MonX, MonY)

  Delay 2

  If MonY >0 Then

    //得到怪物X中心坐标

    MonX = MonX + 15

    tempHigh = MonY

    Call GetFloor

    MonFloor = tempFloor

  End If 

End Sub

//得到玩家信息

Sub GetPlayerInfo

  Call FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, PlayerColor, 0, 0.9, PlayerX, PlayerY)

  Delay 2

  If PlayerY>0 Then

    PlayerDir = 0

    // 默认认为玩家面象为左边,这里通过玩家特征点的坐标加偏移找玩家眼睛来判断面象

    Call FindColorEx(PlayerX + 12, PlayerY - 15, PlayerX + 16, PlayerY - 19, "DFDFDF", 1, 0.8, HeadX, HeadY)

    If HeadX >0 Then

      PlayerDir = 1

    End If 

    tempHigh = PlayerY

    Call GetFloor

    PlayerFloor = tempFloor

  End If 

End Sub

//得到蓝球信息

Sub GetBallInfo

  Call FindColorEx(GameLeft, GameTop + 55, GameRight, GameButtom - 60, BallColor, 0, 0.8, BallX, BallY)

  Delay 1

  If BallY>0 Then

    tempHigh = BallY + 35

    Call GetFloor

    BallFloor = tempFloor

  End If 

  //吃蓝是特殊情况 --因为在最右边,要想吃的话,得从左边上去。中间会导致找不到蓝球。所以强制置X坐标

  If BallFloor = 4 and BallY < 0 Then

    BallX = GameRight

  End If 

End Sub

//得到所在的层数

Sub GetFloor

  If tempHigh > GameTop + 250 Then

    tempFloor = 0

  ElseIf tempHigh > GameTop + 170 Then

    tempFloor = 1

  ElseIf tempHigh > GameTop + 110 Then

    tempFloor = 2

  ElseIf tempHigh > GameTop + 85 Then

    tempFloor = 4

  ElseIf tempHigh > GameTop + 60 Then

    tempFloor = 3.5

  End If 

End Sub

//走向怪物

Sub MoveToMon

  GameState = -1

  If MonX > 0 and PlayerX > 0 Then

    GameState = 0

    FloorDis = MonFloor - PlayerFloor

    //如果玩家高度高于怪物,先移动到怪物的下面

    If FloorDis < 0 and (NearMon = 0 or tempFloorDis <> FloorDis) Then

      tempFloorDis = FloorDis

      NearMon = 1

      Call JudgeMoveDir

      //如果怪物处在第三层,特殊处理

    ElseIf MonFloor = 4 Then

      //说明我已在第一层了

      If FloorDis < 3.5 Then

        If (Abs(MonX - PlayerX) >= MagicDis) Then

          Call JudegMoveDir

        Else 

          Call StopMove

          GameState = 2

        End If 

      Else 

        tempTopDis = -90: tempButtomDis = 0: tempXDis = 65

        //没有在第一层,则找到第一层相对于玩家的位置

        Call JudgeFloorPos

      End If 

      //玩家与怪物的高度小于3格,在最大攻击距离内跳砍就能打到

    ElseIf FloorDis >= 0 and FloorDis <> 3 Then

      //如果玩家和怪的X距离大于最大攻击距离

      If (((Abs(MonX - PlayerX) >= AttackMaxDis) and (FloorDis < 3)) or ((Abs(MonX - PlayerX) >= 20) and (FloorDis > 3))) Then

        Call JudgeMoveDir

      Else 

        Call StopMove

        GameState = 1

      End If 

    End If 

  ElseIf NearMon = 1 Then

    Call StopMove

  End If 

End Sub

//向目标移动

Sub JudgeMoveDir

  KeyUp 39, 1

  KeyUp 37, 1

  If MonX > PlayerX Then

    KeyDown 39, 1

    //置玩家行走方向和当前面向相同

    MonDir = 1

  Else 

    KeyDown 37, 1

    MonDir = -1

  End If 

End Sub

//停止移动

Sub StopMove

  FindBallState = 0

  NearMon = 0

  KeyUp 39, 1

  KeyUp 37, 1

  Delay 30

End Sub

//移动到蓝球

Sub MoveToBall

  //蓝自动回到大于90%时不再找蓝球回蓝

  Call FindColorEx( MaxMpX, MpY, MaxMpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)

  If FindBallX > 0 Then

    FindBallState = 0

    BallFloor = 0

  End If 

  If GameState < 0 Then

    //判断是否要找蓝球回蓝

    Call FindColorEx( MpX, MpY, MpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)

    If FindBallX < 0 and FindBallState = 0 Then

      FindBallState = 1

    End If 

    If FindBallState <> 0 Then

      Call GetBallInfo

      Call StepToFloor

    End If 

  End If 

End Sub

//得到层与层之间的关系

Sub StepToFloor

  If BallX > 0 and PlayerX > 0 Then

    GameState = -2

    FloorDis = BallFloor - PlayerFloor

    //如果玩家高度高于怪物,先移动到怪物的下面

    If FloorDis < 0 and (FindBallState = 1 or tempFloorDis <> FloorDis) Then

      tempFloorDis = FloorDis

      FindBallState = 2

      Call JudgeMoveBallDir

    ElseIf FloorDis = 0 Then

      Call JudgeMoveBallDir

      //已吃到蓝球,蓝球位置置0

      If Abs(BallX - PlayerX) < 35 Then

        BallFloor = 0

      End If 

    ElseIf FloorDis > 0 Then

      tempLeftDis = 0 : tempRightDis = 0

      //处理找蓝球加蓝时可能会导致的一个问题

      If BallFloor = 1 Then

        If BallX > PlayerX Then

          tempLeftDis = 250 : tempRightDis = 0

        Else 

          tempLeftDis = 0 : tempRightDis = -250

        End If 

      End If 

      If PlayerFloor = 3.5 Then

        tempTopDis = 40: tempButtomDis = 60: tempXDis = 150

      Else 

        tempTopDis = -90: tempButtomDis = 0: tempXDis = 65

      End If 

      Call JudgeFloorPos

    End If 

  ElseIf FindBallState = 2 Then

    Call StopMove

  End If 

End Sub

//得到层与层之间的关系

Sub JudgeFloorPos

  //没有在第一层,则找到第一层相对于玩家的位置 从中间左右判断上一层相对于玩家的位置

  Call FindColorEx(GameLeft + tempLeftDis, PlayerY + tempTopDis, PlayerX, PlayerY + tempButtomDis, FloorColor, 2, 0.8, FloorX1, FloorY1)

  Call FindColorEx(PlayerX, PlayerY + tempTopDis, GameRight + tempRightDis, PlayerY + tempButtomDis, FloorColor, 0, 0.8, FloorX2, FloorY2)

  If FloorX1 < 0 and FloorX2 < 0 Then

    KeyDown KeyNum, 1

  ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX >= PlayerX - FloorX1)) or (FloorX1 > 0 and FloorX2 < 0) Then

    KeyUp 39, 1

    KeyDown 37, 1

    MonDir = -1

  ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX < PlayerX - FloorX1)) or (FloorX1 < 0 and FloorX2 > 0) Then

    KeyUp 37, 1

    KeyDown 39, 1

    MonDir = 1

  End If 

  If Abs(FloorX1 - PlayerX) < tempXDis or ABS(FloorX2 - PlayerX) < tempXDis Then

    KeyPress 32, 1

    Delay 500

  End If 

End Sub

//向目标移动

Sub JudgeMoveBallDir

  KeyUp 39, 1

  KeyUp 37, 1

  If BallX > PlayerX Then

    KeyDown 39, 1

    //置玩家行走方向和当前面向相同

    //MonDir = 1

  Else 

    KeyDown 37, 1

    //MonDir = -1

  End If 

End Sub

//攻击怪物

Sub AttackMon

  If (GameState > 0) Then

    //玩家和怪物背向则调整面象

    If MonX > PlayerX and PlayerDir = 0 Then

      KeyPress 39, 1

      Delay 30

    ElseIf MonX < PlayerX and PlayerDir = 1 Then

      KeyPress 37, 1

      Delay 30

    End If 

    //相隔不同层时的延时处理

    JumpDelay = 0

    If MonFloor - PlayerFloor > 0 Then

      KeyDown 32, 1

      Delay 200

      If MonFloor - PlayerFloor = 2 or MonFloor - PlayerFloor = 3 Then

        JumpDelay = 250

      ElseIf MonFloor - PlayerFloor = 2.5 Then

        JumpDelay = 275

      End If 

      Delay JumpDelay

      KeyUp 32, 1

    End If 

    If GameState = 1 Then

      //判断平时是否使用技能 限制在相隔一层的范围内效果比较好

      Call FindColorEx( UseSkillMpX, UseSkillMpY, UseSkillMpX, UseSkillMpY, MpColor, 0, 0.9, UseSkillX, UseSkillY)

      If MonFloor - PlayerFloor < 1.5 and UseSkillX > 0 Then

        KeyPress 83, 1

      Else 

        KeyPress 65, 1

      End If 

    Else 

      KeyPress 83, 1

    End If 

    Delay JumpDelay + 200

  End If 

End Sub

//加血

Sub AddHp

  IfColor HpX, HpY, HpColor, 1 Then

    KeyPress 49, 1

    Delay 50

  End If 

End Sub

//防止有按键没有弹起

Sub OnScriptExit

  KeyUp 32, 1

  KeyUp 37, 1

  KeyUp 39, 1

End Sub
6农场种植
《农场种植》
操作方式:用鼠标进行操作,点击左下方的播种然后选择种子,再把种子放在空田上,就可以种下果树。果树成熟后,点击摘取按钮就可以收获果实。此外还可以经常光顾朋友的农场偷取果实,点击右上方的好友按钮可呼出好友菜单。最后可以点击右上方的仓库按钮,将收获的果实卖出,兑换金钱。
制作思路:多应用循环语句解决繁琐的鼠标移动过程。
参考脚本

dim Fruit,FruitL

UserVar Fruit=18 "当摘取多少次果实后自动卖出"

FruitL=0

MessageBox "请将鼠标移到Flash游戏窗口上面,脚本测试到游戏窗口后会再次提示才开始挂机   "

Call 检测鼠标下是否游戏窗口

MessageBox "游戏窗口验证成功,三秒后开始挂机   "

Delay 3000

Call Plugin.Window.Active(WinF)

Rem 开始

Call 跳到自己的农田

Call 播种

Call 收获

Call 好友果实

Goto 开始

Sub 检测鼠标下是否游戏窗口

  While WinSWH(2)<>"550" and  WinSWH(3)<>"400"

    //得到鼠标下的句柄

    WinF=Plugin.Window.MousePoint()

    //得到鼠标指向的句柄的窗口客户区大小

    WinS=Plugin.Window.GetClientRect(WinF)

    //分割坐标

    WinSWH=Split(WinS,"|")

  Wend 

End Sub

Sub 跳到自己的农田

  //检测指定坐标点的颜色

  MeC=Plugin.Bkgnd.GetPixelColor(WinF,36,28)

  //如果不符合则跳到自己的农场

  If MeC<>"000000" Then

    //鼠标移动到指定坐标

    Call Plugin.Bkgnd.MoveTo(WinF,440,30)

    Delay 300

    //鼠标在指定坐标单击

    Call Plugin.Bkgnd.LeftClick(WinF,440,30)

    Delay 300

  End If 

End Sub

Sub 播种

  //i初始值为9

  i=9

  //下面是选择种子准备播种

  Call Plugin.Bkgnd.MoveTo(WinF,70,350)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,70,350)

  Delay 300

  Call Plugin.Bkgnd.MoveTo(WinF,65,320)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,65,320)

  Delay 300

  //循环9次,即检测农田的九块地

  For 9

    //调用农田坐标

    Call 农田坐标

    //得到农田坐标点的颜色

    FarmlandC=Plugin.Bkgnd.GetPixelColor(WinF,FX,FY)

    //如果颜色符合则对相应的农田进行操作

    If FarmlandC="38587B" Then

      Call 对农田操作

    End If 

    //每检测一块地后向后一块地检测

    i=i-1

  Next 

End Sub

Sub 收获

  i=9

  //移动到指定坐标

  Call Plugin.Bkgnd.MoveTo(WinF,130,350)

  Delay 300

  //在指定坐标单击

  Call Plugin.Bkgnd.LeftClick(WinF,130,350)

  Delay 300

  For 9

    //调用农田坐标

    Call 农田坐标

    //得到指定坐标点的颜色

    FarmlandC=Plugin.Bkgnd.GetPixelColor(WinF,FX,FY)

    //颜色符合则对坐标的地进行操作

    If FarmlandC="2FA9C8" Then

      Call 对农田操作

      //收获一次后记录一次给变量FruitL

      FruitL=FruitL+1

      //如果收获数量到了用户设置的数据后出售果实

      If FruitL=Fruit Then

        //调用出售果实子程序

        Call 出售果实

      End If 

    End If 

    //每检测一块地后向后一块地检测

    i=i-1

  Next 

End Sub

Sub 好友果实

  //得到指定坐标点的颜色

  Friend=Plugin.Bkgnd.GetPixelColor(WinF,510,165)

  If Friend<>"000099" Then

    //条件符合移动鼠标到指定坐标并点击

    Call Plugin.Bkgnd.MoveTo(WinF,490,35)

    Delay 300

    Call Plugin.Bkgnd.LeftClick(WinF,490,35)

    Delay 200

  End If 

  Call Plugin.Bkgnd.MoveTo(WinF,510,165)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,510,165)

  Delay 500

  Call 收获

End Sub

Sub 出售果实

  Call Plugin.Bkgnd.MoveTo(WinF,444,30)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,444,30)

  Delay 500

  Call Plugin.Bkgnd.MoveTo(WinF,270,266)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,270,266)

  Delay 500

  Call Plugin.Bkgnd.MoveTo(WinF,390,130)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,390,130)

  Delay 500

  FruitL=0

End Sub

Sub 对农田操作

  //移动鼠标到指定坐标点并单击

  Call Plugin.Bkgnd.MoveTo(WinF,FX,FY)

  Delay 300

  Call Plugin.Bkgnd.LeftClick(WinF,FX,FY)

  Delay 200

  Call Plugin.Bkgnd.MoveTo(WinF,FX+100,FY+100)

End Sub

Sub 农田坐标

  //下面分别是每块地的坐标点,对农田进行制作前调用

  If i=1 Then

    FX=87

    FY=222

  ElseIf i=2 Then

    FX=159

    FY=182

  ElseIf i=3 Then

    FX=229

    FY=142

  ElseIf i=4 Then

    FX=165

    FY=259

  ElseIf i=5 Then

    FX=236

    FY=219

  ElseIf i=6 Then

    FX=308

    FY=179

  ElseIf i=7 Then

    FX=242

    FY=296

  ElseIf i=8 Then

    FX=314

    FY=255

  ElseIf i=9 Then

    FX=385

    FY=216

  End If 

End Sub
7挖宝石
《挖宝石》
操作方式:规则很简单,宝石出现时,用鼠标左键单击宝石,即可加分,每关命中率只要高于50%以上就可以过关,进入下一关后,宝石的出现速度将变快,总共十关。
制作思路:主要还是找色、循环功能的应用。
参考脚本

hwnd=Plugin.Window.MousePoint()

//获得窗口左上角的位置和窗口的大小

rect=Plugin.Window.GetClientRect(hwnd)

If InStrRev(rect,"550|400")=0 Then

  MessageBox "请将鼠标放在游戏窗口内在启动游戏"

  EndScript 

End If 

//获得窗口左上角的坐标,并将坐标作为参考坐标

dw=Split(rect,"|"):dwx=dw(0):dwy=dw(1)

//设置宝石颜色和开始(下一关)的颜色

ys=array("1A85CD","AD2D2D","C0C064","3333CC","2EC7C7","7C20B9","FFFFFF")

//设置一个变量用来控制点开始的次数

ks=0

//无限循环找色

While true

  i=0

  //6种颜色+开始(下一关)按钮的颜色等于7种颜色,循环寻找下这7个色

  For 7

    //以中点向四周找色找到定义的颜色

    Call FindCenterColor(dwx+21,dwy+87,dwx+529,dwy+384,ys(i),x,y)

    If x>0 and y>0 Then

      //判断找到的这个色是否是白色(开始(下一关))的颜色

      If ys(i)="FFFFFF" Then

        // 判断这个颜色是否大于等于10

        If ks>=10 Then

          //等于10的话也就是第十关结束了,可以结束游戏了

          MessageBox "游戏全通关"

          EndScript 

        End If 

        //不等于10还没到第10关,也就是将到下一关。我们将变量加大1

        ks=ks+1

      End If 

      //点击刚才找到的颜色

      MoveTo x,y

      LeftClick 1

    End If 

    //减缓CPU的计算降低CPU用量,根据自己电脑CPU设置。

    Delay 1

    i=i+1

  Next 

Wend


注:请登录电脑收看本套视频游戏教程。
0人点赞
即便把我关在果壳中,我仍然是无限空间之王!
您需要登录后才可以回帖 登录 | 注册成为果猿 微信登录

返回顶部