liasica / JiaGuoMengTrainer

家国梦辅助脚本
Mozilla Public License 2.0
66 stars 30 forks source link

可以参考的另一种写法 #2

Closed FlyingFruitFly closed 5 years ago

FlyingFruitFly commented 5 years ago

从一个别的nga老哥那里看到的代码,简单的重构了一下原本基本上堆在一起的代码并加了一些注释,优化了指定升级建筑的逻辑,添加了只收的指定建筑的相关代码,我觉得这么写对于使用者来说可能会更加友好一点

//用户使用时修改部分:
//建筑标号顺序为从下到上,从左到右,与小键盘顺序一致
Dim mainups = Array(7)      //待升级建筑,中间用英文逗号隔开
Dim epics = Array(3,4,5,8)  //橙色建筑,如果不强求橙色,可以把所有建筑写进去
Dim UpDelay = 20            //每几次收集金币检查一次可否升级

//程序部分:
//子程序结构:
//Adjust    :   XY坐标修正
//Up:           升级单个建筑
//CheckGoods    检查货物
//Harvest       收取金币
//操作结束延时写在子程序内部
Dim ScreenX,ScreenY     //屏幕分辨率信息
Dim X(3), Y(3), Z(9,2)  //XY为货物的坐标,Z为建筑物位置信息
Dim UPCNT = 0           //收集金币计数器

Call Adjust()

While True
    Call CheckGoods()
    Call Harvest()

    UPCNT = UPCNT + 1
    TracePrint UPCNT
    If UPCNT >= UpDelay Then
        Call UpAll()
    End If
Wend

Sub UpAll()
    Dim i
    UPCNT = 0
    For Each i In mainups
        Call Up(Z(i, 1), Z(i, 2))
    Next
End Sub

Sub Up(X, Y)
  Dim ScreenX,ScreenY
  ScreenX = GetScreenX()
  ScreenY = GetScreenY()
  Tap 970*ScreenX\1080, 1145*ScreenY\1920 //进入升级
  Delay 500

  Tap X, Y //点击建筑
  Delay 300

  Dim intX, intY, res
  res = FindColor(900*ScreenX\1080,1670*ScreenY\1920, 990*ScreenX\1080, 1700*ScreenY\1920, "FFFFFF", 0, 1.0, intX, intY)
  //如果没有找到,intX和intY的值都会被置为-1
  If res > -1 Then
    Tap 870*ScreenX\1080, 1750*ScreenY\1920
    ShowMessage "升级一次"
    Delay 130 
  End If

  Tap 970*ScreenX\1080, 1145*ScreenY\1920 //退出升级
  Delay 300
End Sub

Sub Adjust()
  ScreenX = GetScreenX()
  ScreenY = GetScreenY()

  X(1) = 660*ScreenX\1080
  X(2) = 825*ScreenX\1080
  X(3) = 975*ScreenX\1080
  Y(1) = 1635*ScreenY\1920
  Y(2) = 1555*ScreenY\1920
  Y(3) = 1470 * ScreenY \ 1920

  Z(1,1) = 300*ScreenX\1080
  Z(1,2) = 1184*ScreenY\1920
  Z(2,1) = 550*ScreenX\1080
  Z(2,2) = 1061*ScreenY\1920
  Z(3,1) = 800*ScreenX\1080
  Z(3,2) = 961*ScreenY\1920
  Z(4,1) = 300*ScreenX\1080
  Z(4,2) = 935*ScreenY\1920
  Z(5,1) = 550*ScreenX\1080
  Z(5,2) = 810*ScreenY\1920
  Z(6,1) = 800*ScreenX\1080
  Z(6,2) = 687*ScreenY\1920
  Z(7,1) = 300*ScreenX\1080
  Z(7,2) = 681*ScreenY\1920
  Z(8,1) = 550*ScreenX\1080
  Z(8,2) = 568*ScreenY\1920
  Z(9,1) = 800*ScreenX\1080
  Z(9,2) = 447*ScreenY\1920
End Sub

Sub CheckGoods()
    Dim INDEX, building
    For INDEX = 1 To 3
        TouchDown X(INDEX), Y(INDEX)
        Delay 300
        Dim IntX,IntY
        FindColor 0,0,0,0,"80FFFF|81FFFF|80FF00",0,1.0,intX,intY
        If intX > -1 Then 
            For Each building In epics
                If Abs(intX - Z(building, 1)) < 30 And Abs(intY - Z(building, 2)) < 30 Then 
                    Delay 100
                    FindColor 0, 0, 0, 0, "80FFFF|81FFFF|80FF00", 0, 1.0, intX, intY
                    If intX = -1 Then 
                        TracePrint "二次检查失败"
                        Exit For
                    End If
                    Delay 100
                    FindColor 0, 0, 0, 0, "80FFFF|81FFFF|80FF00", 0, 1.0, intX, intY
                    If intX = -1 Then 
                        TracePrint "二次检查失败"
                        Exit For
                    End If
                    ShowMessage "找到史诗货物"
                    TouchMove intX + 50*ScreenX\1080, intY
                    Exit For    
                End If
            Next
            Delay 100
        End If
        TouchUp 
    Next
    Delay 300
End Sub

Sub Harvest()
    TouchDown 200*ScreenX\1080, 1280*ScreenY\1920
    TouchMove 1000*ScreenX\1080, 825*ScreenY\1920
    TouchMove 820*ScreenX\1080, 700*ScreenY\1920
    TouchMove 170*ScreenX\1080, 1045*ScreenY\1920
    TouchMove 210*ScreenX\1080, 760*ScreenY\1920
    TouchMove 900*ScreenX\1080, 400*ScreenY\1920
    TouchUp 
    Delay 300
End Sub
liasica commented 5 years ago

满篇的ScreenY\1920 ScreenX\1080 未解耦~~~ 没看出来更好在哪儿哈

我的马上要更新界面了...