【AIプログラミング対戦ゲーム】Screeps: ArenaのTypeScript開発環境を構築する

Screeps: Arenaとは

Screeps: Arenaは、戦闘AIを実装して他プレイヤーと競うPCゲームです。クローズドアルファ期間を経て、2022年4月7日にSteamで早期アクセスがはじまりました。プレイヤーはScreepと呼ばれるユニットの戦闘AIを実装してアップロードします。対戦は他プレイヤーのAIと全自動で行われ、勝敗と試合の様子は後から確認できます。

画像はSteamの公式ストアページより引用

一番の特徴は何といっても「AIの実装に現実のプログラミング言語を使う」という点でしょう。JavaScriptがネイティブ対応している他、WebAssemblyを介して様々な言語で開発できるようです。TypeScriptを用いた開発環境構築については、Screeps Arena Typescript StarterというGitHubリポジトリがコミュニティによって用意されています。本記事ではこのリポジトリをベースとした開発環境の構築手順を説明します。

Screeps: Arenaは現在も開発が続いているゲームのため、本記事で紹介する手順も将来的に変更される可能性があります。

Screeps: Arena TypeScript開発環境の構築手順

以下に示す手順はほぼreadmeそのままなので、そちらを読んだ方が確実かもしれません。日本語訳程度に役立ててください。筆者はWindows 10で環境構築しましたが、基本的にどのOSでも手順は変わりません。

1. 前提環境の導入

  • Node.js 10.xまたは12.x
  • パッケージマネージャ(Yarnまたはnpm)
  • Rollup CLI(任意、npm install -g rollupでインストールできます)

筆者の場合は既にNode 16が入っていたので、Nodeバージョン管理ツールのfnmを導入してNode 12を追加インストールし、共存するようにしました。Nodeバージョン管理ツールはOSと好みに合わせて選んでください。普段Nodeを使った開発をしないという方はNode 12をそのまま入れればOKです。

2. Screeps Arena Typescript Starterのセットアップ

GitでScreeps Arena Typescript Starterリポジトリをクローンします。このリポジトリもゲームと同様に開発中のため、頻繁に更新されます。筆者が確認した時点では早期アクセス開始直後ということもあり、masterブランチは更新が追いついていない箇所が多く感じました。よって今回はdevelopブランチをクローンすることにします。以下のコマンドでブランチを指定してクローンできます。

git clone -b develop https://github.com/screepers/screeps-arena-typescript-starter.git

リポジトリをクローンしたら、package.jsonのあるディレクトリでターミナルを開き、npm installまたはyarnコマンドで依存パッケージをインストールします。

3. ScreepAIの開発・ビルド

これでScreep AIの開発準備は万全で、TypeScriptの機能をフル活用してコードが書けるようになりました。コードエディタは何でもいいのですが、.vscodeフォルダにESLint等の設定が用意されていますのでVisual Studio Codeを使うとスムーズでしょう。ちなみにScreeps公式ではVSCodeまたはAtomが推奨だそうです。

npm run buildコマンドでsrc/arena_*フォルダ全てをビルドできます。フォルダを指定してビルドする場合は引数にフォルダ名のarena_以降を指定します。例えばsrc/arena_capture_the_flagフォルダをビルドしたい場合はnpm run build capture_the_flagとなります。ビルドされたソースコードはsrc/dist/arena_*/main.mjsに出力されます。npm run watchコマンドはフォルダを監視しつづけ、ソースコードの保存時に自動でビルドしてくれます。buildコマンドと同様に、1つのフォルダを引数で指定して監視できます。

まとめ

Screeps Arena Typescript StarterにはAIのサンプルソースコードが含まれており、ほぼそのまま対戦で使える状態になっています。ただこのサンプルは1つのファイルにAIの全ロジックが記述されているので、すぐにファイルを分割したくなることでしょう。この開発環境では当然import文が使えますし、型情報の補完も効きます。究極の戦闘AIをTypeScriptで美しく書いてみてはいかがでしょうか。


記事が面白かった方、参考になった方は、是非「イイね」お願いします👍

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA