一個易於使用的庫,用於在Python 3中為Starcraft II編寫AI機器人。最終目標是簡單性和易用性,同時仍保留所有功能。一個非常簡單的工作人員Rush機器人的代碼不得超過二十行,而不是兩百行。但是,該庫打算同時提供高級和低級抽象。
該庫(當前)僅涵蓋原始腳本接口。目前,我不打算增加對基於圖形的接口的支持。
可以在此處找到文檔。對於機器人作者,直接查看SC2文件夾中的文件也可能有益:bot_ai.py,unit.py,unit.py,client.py,game_info.py和game_state.state.py。這些文件中的大多數功能都有DOCSTRINGS,示例用法和類型提示。
我打算比主要存儲庫更徹底地更改此叉子,以使機器人性能好處並添加功能以幫助新的機器人作者。這可能會在將來打破較舊的機器人,但是我嘗試添加折舊警告以提高通知。這意味著Sentdex製作的視頻教程已經過時,並且不再直接與該叉子一起使用。
有關正在進行的變化和牙齒主要存儲庫的差異列表,請在此處查看。
通過安裝此庫,您同意受AI和機器學習許可證的條款約束。
對於此叉子,您需要Python 3.10或更新。
安裝PYPI軟件包:
pip install --upgrade burnysc2
或直接來自開發分支:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
這兩個命令都將使用sc2庫文件夾,因此除非使用虛擬環境或詩歌,否則您將無法同時安裝牙本質。
您將需要一個starcraft ii可執行的。如果您正在運行Windows或MacOS,則只需從暴雪應用程序安裝SC2即可。
您可以在Linux上使用Wine,Lutris甚至Linux Binary安裝Starcraft II,但是後者是無頭的,因此您實際上看不到遊戲。使用Lutris下載後,可以直接從Battlenet直接安裝Starcraft II。默認情況下,它將在此處安裝:
/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/'
在Windows中運行WSL時,Python-SC2默認情況下檢測WSL,並啟動Windows Starcraft 2而不是Linux 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 。
您將需要地圖運行庫。
可從暴雪/S2Client-Proto獲得官方暴雪地圖下載。
將這些地圖提取到SC2地圖目錄中的各自的子目錄中。
例如, install-dir/Maps/Ladder2017Season1/
可以從SC2AI WIKI和AIARENA WIKI下載在SC2 AI梯子和SC2 AI競技場上運行的地圖。
將這些地圖提取到SC2地圖目錄的根中(否則梯子重播將無法使用)。
例如, install-dir/Maps/AcropolisLE.SC2Map
安裝庫,Starcraft II可執行文件和一些地圖後,您可以開始使用。只需運行一個機器人文件即可在機器人運行的情況下啟動Starcraft II實例。例如:
python examples/protoss/cannon_rush.py如所承諾的,工人趕不可及二十行:
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 BOT編程和此存儲庫的討論和問題。
如果您有任何問題,想法或反饋,請創建一個新問題。也歡迎拉動請求!
git提交消息使用命令式消息,從大寫字母開始,沒有尾隨的逗號。
要運行預加壓掛鉤(運行自動效應和自動修復導入),您可以運行
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push