s2client-dotnet将星际2暴雪官方库从C++移植到了.NET平台,方便C#、F#、VB.Net开发者使用。
例子
一个简单的C#的例子:
static void Main(string[] args)
{
// 基本配置
var userSettings = Sc2SettingsFile.settingsFromUserDir();
var instanceSettings = Instance.StartSettings.OfUserSettings(userSettings);
// 启动星际2实例
Func<Instance.Sc2Instance> createInstance =
() => Runner.run(Instance.start(instanceSettings));
var participants = new Sc2Game.Participant[] {
Sc2Game.Participant.CreateParticipant(
createInstance(),
// 设定种族为人族
Race.Terran,
// 用`GameState ->
// ` IEnumerable<SC2APIProtocol.Action>`函数代表机器人
(state => (IEnumerable<SC2APIProtocol.Action>)new SC2APIProtocol.Action[] {})),
// 电脑种族同样设定为人族,难度为困难
Sc2Game.Participant.CreateComputer(Race.Terran, Difficulty.Hard)
};
var gameSettings =
Sc2Game.GameSettings.OfUserSettings(userSettings)
.WithMap(@"Ladder2017Season1\AbyssalReefLE.SC2Map")
.WithRealtime(true);
// 运行游戏
Runner.run(Sc2Game.runGame(gameSettings, participants));
}
上面的例子用F#改写后清爽了很多:
let userSettings = Sc2SettingsFile.settingsFromUserDir()
let instanceSettings = Instance.StartSettings.OfUserSettings userSettings
let instance() = Instance.start(instanceSettings) |> Async.RunSynchronously
let participants =
[ Sc2Game.Participant(instance(), Race.Terran, (fun _ -> []))
Sc2Game.Computer(Race.Terran, Difficulty.Hard) ]
let settings =
{ Sc2Game.GameSettings.OfUserSettings userSettings with
Map = @"Ladder2017Season1\AbyssalReefLE.SC2Map"
Realtime = true }
Sc2Game.runGame settings participants |> Async.RunSynchronously
安装
依赖:
Fake 5 (可通过 chocolatey 安装 choco install fake --pre)
安装 Dotnet SDK 2
运行如下命令编译程序:
git clone https://github.com/matthid/s2client-dotnet
cd s2client-dotnet
fake run build.fsx
dotnet pack src/s2client-dotnet.sln -o C:\proj\sc2\s2client-dotnet\release
编译好后试一下有没有问题:
dotnet run --project s2client-testCSharp/s2client-testCSharp.csproj
dotnet run --project s2client-test/s2client-test.csproj
同类框架
除了暴雪官方C++库外,习惯使用Python语言的开发者还可以使用PySC2.
机器人网原创文章,未经授权禁止转载。详情见转载须知
本文来自机器人网,如若转载,请注明出处:https://www.jqr.com/news/008229