Python 3でStarcraft IIのAIボットを書くための使いやすいライブラリ。究極の目標は、すべての機能を維持しながら、シンプルさと使いやすさです。本当にシンプルな労働者のラッシュボットは、20行以内のコードであり、200ではないはずです。ただし、このライブラリは、高レベルと低レベルの抽象化の両方を提供する予定です。
このライブラリは(現在)生のスクリプトインターフェイスのみをカバーしています。現時点では、グラフィックベースのインターフェイスのサポートを追加するつもりはありません。
ドキュメントはここにあります。 BOT著者の場合、SC2フォルダーのファイルを直接見ることは、Bot_ai.py、unit.py、unit.py、client.py、game_info.py、game_state.py:bot_ai.py、unit.py、unit.py、client.py、fore。これらのファイルのほとんどの関数には、ドキュメント、使用法の例、タイプのヒントがあります。
ボットのパフォーマンスの利点のために、このフォークをメインリポジトリよりも根本的に変更し、新しいボットの著者を支援する機能を追加することを計画しています。これは将来的には古いボットを壊す可能性がありますが、私は非推奨警告を追加して、ヘッズアップ通知を与えることを試みています。これは、SentDexが作成したビデオチュートリアルが時代遅れであり、このフォークで直接動作しなくなったことを意味します。
Dentosalのメインリポジトリへの継続的な変更と違いのリストについては、こちらをご覧ください。
このライブラリをインストールすることにより、AIおよび機械学習ライセンスの条件に拘束されることに同意します。
このフォークには、Python 3.10以降が必要です。
PYPIパッケージをインストールします。
pip install --upgrade burnysc2
または、Develop Branchから直接:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
どちらのコマンドもsc2ライブラリフォルダーを使用するため、仮想環境や詩を使用しない限り、DentoSalとこのフォークを同時にインストールすることはできません。
StarCraft II実行可能ファイルが必要です。 WindowsまたはMacOSを実行している場合は、BlizzardアプリからSC2をインストールするだけです。
LinuxにWine、Lutris、またはLinuxバイナリでもStarCraft IIをインストールできますが、後者はヘッドレスなので、実際にゲームを見ることができません。 Starcraft IIは、Lutrisでダウンロードされたら、Battlenetから直接インストールできます。デフォルトでは、こちらにインストールされます。
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
次に、次の環境変数を設定します(グローバルまたは開発環境内、たとえばPycharm: Run -> Edit Configurations -> Environment Variables )を設定します。
SC2PF=WineLinux
WINE=/usr/bin/wine
# Or a wine binary from lutris:
# WINE=/home/burny/.local/share/lutris/runners/wine/lutris-4.20-x86_64/bin/wine64
# Default Lutris StarCraftII Installation path:
SC2PATH='/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/'
WSLをWindowsで実行するとき、Python-SC2はデフォルトでWSLを検出し、Linux Starcraft 2の代わりにWindows Starcraft 2を起動します。代わりにLinuxでゲームを再生したい場合は、 SC2_WSL_DETECT環境変数を「0」に設定することでこの動作を無効にすることができます。 。次のコードでこれをPython内で行うことができます。
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSLバージョン1は構成を必要としません。ファイアウォールを介してPythonを許可するように求められる場合があります。
WSLバージョン2を実行するときは、ボットが接続できるように、次の環境変数を提供する必要があります。
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
これらを.bashrcに追加する場合は、次のことを追加して環境変数をエクスポートする必要がある場合があります。
export SC2CLIENTHOST
export SC2SERVERHOST PowerShell.exeまたはCMD.exeからipconfig /allを使用してWindows IPを見つけることができます。
ライブラリを実行するにはマップが必要です。
Blizzard/S2Client-Protoから公式Blizzardマップのダウンロードを入手できます。
これらのマップをSC2マップディレクトリのそれぞれのサブディレクトリに抽出します。
たとえば、 install-dir/Maps/Ladder2017Season1/
SC2 AIラダーとSC2 AIアリーナで実行されるマップは、SC2AI WikiとAiarena Wikiからダウンロードできます。
これらのマップをSC2マップディレクトリのルートに抽出します(そうでなければ、はしごのリプレイが機能しません)。
たとえば、 install-dir/Maps/AcropolisLE.SC2Map
ライブラリ、StarCraft II実行可能ファイル、およびいくつかのマップをインストールした後、開始する準備ができています。ボットファイルを実行して、ボットを実行してStarcraft IIのインスタンスを起動します。例えば:
python examples/protoss/cannon_rush.py約束どおり、労働者は20行未満で急いでいます:
from sc2 import maps
from sc2 . player import Bot , Computer
from sc2 . main import run_game
from sc2 . data import Race , Difficulty
from sc2 . bot_ai import BotAI
class WorkerRushBot ( BotAI ):
async def on_step ( self , iteration : int ):
if iteration == 0 :
for worker in self . workers :
worker . attack ( self . enemy_start_locations [ 0 ])
run_game ( maps . get ( "Abyssal Reef LE" ), [
Bot ( Race . Zerg , WorkerRushBot ()),
Computer ( Race . Protoss , Difficulty . Medium )
], realtime = True )これはおそらく、ゲームに勝つ可能性が現実的な最もシンプルなボットです。私はそれをミディアムAIに対して数回実行しましたが、たまに勝ちます。
より多くの例をexamples/フォルダーで見つけることができます。
APIは、動作方法を構成するための多くのオプションをサポートしています。
unit_command_uses_self_doボットがself.do(Unit(Ability, Target)) Unit(Ability, Target) )を使用してコマンドを発行している場合、これを「true」に設定します。
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionこれをTrueに設定すると、ボットのパフォーマンスが少し改善されます。
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_method距離計算方法:
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_stepゲームの開始時または実際に任意のフレームで、ゲームステップを設定できます。これは、ボットのstepメソッドが呼び出される頻度を制御します。
クライアントはまだ初期化されていないため、これを__init__関数に設定しないでください!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 質問はありますが、問題を作成したくありませんか? StarCraft 2 AI Discord Serverまたはaiarena.net Discord Serverに参加します。このリポジトリに関する質問は、テキストチャネル#Pythonで質問できます。 SC2ボットプログラミングとこのリポジトリについて毎日議論や質問があります。
問題、アイデア、またはフィードバックがある場合は、新しい問題を作成してください。プルリクエストも大歓迎です!
gitコミットメッセージ命令型スタイルのメッセージを使用し、キャピタルレターから始めて、後続のコンマがありません。
事前コミットフック(オートフォーミングとオートソートインポートを実行する)を実行するには、実行できます
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push