WindBot用C#开发。C#比较易于使用,因此编写一个AI并不困难。本文以编写一个光道卡组为例,介绍编写WindBot AI的方法。
准备工作
- Visual Studio
在VS2015上测试通过,VS2010理论上可用. - 基本的编程基础
变量、函数、类、对象、数组、if、for、while之类的基础知识。 - 基本的YGOPro知识
不会打牌也想教AI打牌?
开始吧
1. 组一个卡组
(我不会玩光道,这是我乱组的)
卡组以易用为优先。一张卡的用法越多,写AI就越难。
把ydk文件命名为AI_Lightsworn,放到windbot的decks文件夹里。
2. 创建Executor
Executor(与Java的那个无关)是执行者的意思,用来给每个卡组规定每张卡片的用法等。
在Game\AI\Decks下新建代码文件,命名为LightswornExecutor
。
在其中写以下代码:
using YGOSharp.OCGWrapper.Enums;
using System.Collections.Generic;
using WindBot;
using WindBot.Game;
using WindBot.Game.AI;
namespace WindBot.Game.AI.Decks
{
[Deck("Lightsworn", "AI_Lightsworn")]
public class LightswornExecutor : DefaultExecutor
{
public LightswornExecutor(GameAI ai, Duel duel)
: base(ai, duel)
{
}
}
}
可以看到,在WindBot.Game.AI.Decks
下新建的LightswornExecutor
继承了DefaultExecutor
。
Deck属性的第一个参数是卡组名,第二个是卡组文件名。
3. 跑一下看看
在YGOPro中建立主机后,使用以下参数在VS中启动
Deck=Lightsworn
如果一切正常,你可以看到AI加入房间并且准备了。
- 如果AI没有出现,请确定是先建立主机才启动的WindBot。
- 如果AI不准备,请确定卡组文件放到了正确的位置,并且WindBot有正确的cards.cdb。
但是开始游戏后我们会发现AI什么牌都不会出,这是因为我们没有给AI指定卡的使用方法。
WindBot只会使用卡组的Executor中指定了的卡,其他卡一律不做任何操作。
所以我们要做的事就是为每张卡写用法。
(当然dalao可以尝试写一个所有卡都会用的Executor)