艦これ魔法使い——一个用C#编写的游戏脚本
游戏已弃坑,项目胎死腹中(o´_`o)ハァ・・・,不过现在已经完成不少功能了
简介
日系游戏的一个特点就是,需要重复大量的操作才能达到积累战力的作用,也就是肝才能变强。玩家能在变强的那一刻感到快乐,能感到时间没有白费。
但对于没有时间的人来说,自然就体会不到快乐,比如我。但是,我是一名码农,能用电脑做到的事为什么要动手呢(笑。于是萌生了写脚本自动挂机的念头。于是就有了艦これ魔法使い。
项目已经开源ヾ(*・ω・)ノ゜。项目传送门。
从按键精灵到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
,打上勾确定就引用成功了。
using Dm;
后,dmsoft dm = new dmsoft()
即可实例化一个dm
对象了。
我写了一个Operation
类,在项目文件夹/utils
下,用于大漠插件的一系列操作。识图和点击我也在这里又封装了一层,更方便地在脚本中调用。
流程图
一开始用按键精灵时,没想到这个东西,但是到了后来功能越来越多,逻辑越来越复杂的时候,想到了做一个流程图,代码再完全遵守着流程图来写就轻松很多了。
每一横排可以看作一个小流程,小流程再组成大流程,也就是所谓的模块化。每一个小流程都是一个类,在项目文件夹/process
下。
界面切换
刚开始的时候,我要从A界面跳转到B的话,直接在流程里点击某个点即可。
但是到后来发现,要保证切换过程的正常,首先要在切换前确保当前正在A界面,其次是点击完后要确保在B界面,而且通常切换界面会伴随着加载,会有延迟,得有一个等待的时间,等待时间过长应该报出超时的错误。
于是我将界面的切换和等待单独提出来写了。在项目文件夹下/scene
。
- Determine类 界面的判断(如判断是否在A界面)
- SwitchScene类 界面的切换
- Wating类 界面的等待,一定时间内没进入指定界面就会报出超时错误
功能
由起初的周回1-5练小船,到现在的自定义关卡自定义远征,自动补给自动修复。今后还会加入更多功能,比如自动换队练船等。现在的功能还不够完善,但已经可以正常使用了,从早上挂着晚上回家资源练度双丰收,感觉还是不错。
脚本界面
起初为了图方便用的winform
来做这个项目,之后应该会改为WPF
项目,毕竟现在太丑了。
总结
这个脚本其实很简单,通篇都是识图、点击、识图。最核心的功能已经被别人实现了,调用就可以了。
但是在逻辑设计上并不算简单,这个逻辑图我也是改了一遍又一遍,今后加入新功能或许还会改。不过后面忙起来了,这个项目可能更新会很慢吧(・w・)
Or you can contact me by Email