游戏已弃坑,项目胎死腹中(o´_`o)ハァ・・・,不过现在已经完成不少功能了

简介

日系游戏的一个特点就是,需要重复大量的操作才能达到积累战力的作用,也就是肝才能变强。玩家能在变强的那一刻感到快乐,能感到时间没有白费。
但对于没有时间的人来说,自然就体会不到快乐,比如我。但是,我是一名码农,能用电脑做到的事为什么要动手呢(笑。于是萌生了写脚本自动挂机的念头。于是就有了艦これ魔法使い
项目已经开源ヾ(*・ω・)ノ゜。项目传送门

界面.jpg

从按键精灵到CS

其实一开始只是想做一个简单的战斗,能周回1-5练练小船就行,于是乎选择了按键精灵。按键精灵虽然方便,但是在写了1000行左右代码的时候就开始吃力了,先不说编辑器很蛋疼,仅仅1000行就非常难以维护,重构不可避。
一开始没有用C#是因为不知道大漠插件,以为得自己写识图等一系列模块。在用按键精灵的中途知道了大漠的存在,重构便开始用C#+大漠插件。

大漠插件

介绍

大漠插件是用VC6写的,对于微软自家的C#,相性还是非常高的。有已经造好的成熟的轮子,就只需要潜心造车就好了。
下面主要用到的大漠的几个功能

  • FindWindow 查找窗口句柄
  • BindWindow 用句柄绑定窗口,绑定为后台模式就不会影响到鼠标的其他操作
  • GetClientSize 获取窗口大小,用于定位游戏窗口
  • FindPic 寻图,没得说
  • MoveTo 移动鼠标,配合LeftClick
  • LeftClick 左键点击,配合MoveTo

使用

首先得把大漠插件注册到系统中去,打开记事本编辑如下内容,保存为.bat,运行即可。

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
regsvr32 dm.dll

然后打开VS,项目添加引用COM,找到Dm,打上勾确定就引用成功了。

引入.jpg

using Dm;后,dmsoft dm = new dmsoft()即可实例化一个dm对象了。
我写了一个Operation类,在项目文件夹/utils下,用于大漠插件的一系列操作。识图和点击我也在这里又封装了一层,更方便地在脚本中调用。

流程图

一开始用按键精灵时,没想到这个东西,但是到了后来功能越来越多,逻辑越来越复杂的时候,想到了做一个流程图,代码再完全遵守着流程图来写就轻松很多了。

流程图.png

每一横排可以看作一个小流程,小流程再组成大流程,也就是所谓的模块化。每一个小流程都是一个类,在项目文件夹/process下。

界面切换

刚开始的时候,我要从A界面跳转到B的话,直接在流程里点击某个点即可。
但是到后来发现,要保证切换过程的正常,首先要在切换前确保当前正在A界面,其次是点击完后要确保在B界面,而且通常切换界面会伴随着加载,会有延迟,得有一个等待的时间,等待时间过长应该报出超时的错误。
于是我将界面的切换和等待单独提出来写了。在项目文件夹下/scene

  • Determine类 界面的判断(如判断是否在A界面)
  • SwitchScene类 界面的切换
  • Wating类 界面的等待,一定时间内没进入指定界面就会报出超时错误

功能

由起初的周回1-5练小船,到现在的自定义关卡自定义远征,自动补给自动修复。今后还会加入更多功能,比如自动换队练船等。现在的功能还不够完善,但已经可以正常使用了,从早上挂着晚上回家资源练度双丰收,感觉还是不错。

脚本界面

起初为了图方便用的winform来做这个项目,之后应该会改为WPF项目,毕竟现在太丑了。

总结

这个脚本其实很简单,通篇都是识图、点击、识图。最核心的功能已经被别人实现了,调用就可以了。
但是在逻辑设计上并不算简单,这个逻辑图我也是改了一遍又一遍,今后加入新功能或许还会改。不过后面忙起来了,这个项目可能更新会很慢吧(・w・)