这一节实现基本的选怪,普通攻击打怪,捡物(不包含过滤)。
我们先来改变一下界面,从控件栏选择复选框,画在窗口相应位置,如图。
其他的还是不变,我们主要是实现基本打怪,所以其他的暂时不考虑。
下面先来描述一下算法:
如何选怪:
在武林里,你选中一个怪物后,都会显示怪物的信息,那么在内存里也会有一个变量来保存是否选中了怪物。我们就利用这个变量判断是否选中怪物,如果没选中,那么调用函数,让其选怪。
如何打怪:
游戏里有普通攻击,在原来的时候还可以模拟按键来实现打怪,现在不可以了,那么我们只有通过调用游戏的内部函数来实现打怪了。判断选中怪物后,就调用普通攻击函数,直到怪物的血值为0 和 选中怪物变量 为0 ,就代表这个怪物被打死了,就需要开始下一轮选怪打怪。
如何捡物:
捡物在原来也可以模拟按键,现在也是调用内部函数。因为这一节不牵涉物品过滤,所以有什么我们就捡什么,呵呵。
程序简单流程:
在主进程不断的读取游戏信息,开辟一个新的线程,放置我们的打怪代码。这里已经开始使用多线程了,大家看到多线程也不用怕,其实没什么,在BCB ,多线程就相当于一个模块一样,也是一个单元文件,不同的是它和主线程的代码有点区别,线程代码需要我们用代码开启它的运行。从这里就是使用多线程,也是方便以后编写,后面的将会很多地方用到多线程。因为现在我们只开启了2个线程,并且不会冲突,所以暂时也不用做线程同步。
在新的线程里,写一个循环,并用变量控制循环开始和结束。
将打怪的代码全部写到循环里。
顺序大致如下:
选怪:
判断是否已经选中怪物
如果选中怪物则跳到打怪部分,如果没选中,则过一段时间继续选怪。
打怪:
用普通攻击 攻击怪物,直到怪物死亡。
捡物:怪物死亡一段时间后,开始捡物。
这里只讲如何使用游戏内部函数,分析部分还是需要大家自己到广海看帖子学习,因为一天两天也学不会。如果在写完小秘的帖子后有时间的话,我可能写写分析部分的帖子。
下面是实现代码:
打开我们上次的工程,文件-新建-其他-选择最下面的Thread Object ,Thread Object 就是线程类。
并命名为 ThreadKill ,在工程窗口双击打开 ThreadKill ,进入代码编辑界面。
__fastcall ThreadKill::ThreadKill(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
将 FreeOnTerminate=true; 插入那对花括号中。
__fastcall ThreadKill::ThreadKill(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate=true;
}
一般用多线程都会写这么一句,为了在线程结束后释放资源。
void __fastcall ThreadKill::Execute()
这里就是线程执行的地方,需要执行的代码都写在里面。