一个易于使用的库,用于在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