Perpustakaan yang mudah digunakan untuk menulis bot AI untuk Starcraft II di Python 3. Tujuan utamanya adalah kesederhanaan dan kemudahan penggunaan, sambil tetap melestarikan semua fungsionalitas. Bot buru -buru pekerja yang sangat sederhana seharusnya tidak lebih dari dua puluh baris kode, bukan dua ratus. Namun, perpustakaan ini bermaksud memberikan abstraksi tingkat tinggi dan rendah.
Perpustakaan ini (saat ini) hanya mencakup antarmuka skrip mentah. Saat ini saya tidak bermaksud menambahkan dukungan untuk antarmuka berbasis grafis.
Dokumentasi dapat ditemukan di sini. Untuk penulis bot, melihat langsung pada file di folder SC2 juga bisa bermanfaat: bot_ai.py, unit.py, unit.py, client.py, game_info.py dan game_state.py. Sebagian besar fungsi dalam file -file tersebut memiliki docstring, contoh penggunaan dan ketik mengisyaratkan.
Saya berencana untuk mengubah garpu ini secara lebih radikal daripada repositori utama, untuk manfaat kinerja bot dan menambahkan fungsi untuk membantu penulis bot baru. Ini dapat memecahkan bot yang lebih tua di masa depan, namun saya mencoba menambahkan peringatan depresi untuk memberikan pemberitahuan. Ini berarti bahwa tutorial video yang dibuat oleh SentDex sudah ketinggalan zaman dan tidak lagi secara langsung bekerja dengan garpu ini.
Untuk daftar perubahan yang sedang berlangsung dan perbedaan pada repositori utama denosal, periksa di sini.
Dengan menginstal perpustakaan ini, Anda setuju untuk terikat oleh ketentuan AI dan lisensi pembelajaran mesin.
Untuk garpu ini, Anda akan membutuhkan Python 3.10 atau yang lebih baru.
Instal Paket PYPI:
pip install --upgrade burnysc2
atau langsung dari cabang kembar:
pip install poetry
pip install --upgrade --force-reinstall https://github.com/BurnySc2/python-sc2/archive/develop.zip
Kedua perintah akan menggunakan folder perpustakaan sc2 , sehingga Anda tidak akan dapat memiliki dentosal dan garpu ini diinstal pada saat yang sama, kecuali jika Anda menggunakan lingkungan atau puisi virtual.
Anda akan membutuhkan Starcraft II yang dapat dieksekusi. Jika Anda menjalankan Windows atau MacOS, cukup instal SC2 dari aplikasi Blizzard.
Anda dapat memasang Starcraft II di Linux dengan anggur, Lutris atau bahkan biner Linux, tetapi yang terakhir tidak memiliki kepala sehingga Anda tidak dapat benar -benar melihat permainan. Starcraft II dapat langsung diinstal dari Battlenet setelah diunduh dengan Lutris. Secara default, itu akan diinstal di sini:
/home/burny/Games/battlenet/drive_c/Program Files (x86)/StarCraft II/
Selanjutnya, atur variabel lingkungan berikut (baik secara global atau di dalam lingkungan pengembangan Anda, misalnya 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/'
Saat menjalankan WSL di Windows, Python-SC2 mendeteksi WSL secara default dan memulai Windows Starcraft 2 alih-alih Linux Starcraft 2 SC2_WSL_DETECT . Anda dapat melakukan ini di dalam Python dengan kode berikut:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL Versi 1 seharusnya tidak memerlukan konfigurasi apa pun. Anda mungkin diminta untuk mengizinkan Python melalui firewall Anda.
Saat menjalankan WSL Versi 2, Anda perlu menyediakan variabel lingkungan berikut sehingga bot Anda dapat terhubung:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
Jika Anda menambahkan ini ke .bashrc Anda, Anda mungkin perlu mengekspor variabel lingkungan Anda dengan menambahkan:
export SC2CLIENTHOST
export SC2SERVERHOST Anda dapat menemukan IP Windows Anda menggunakan ipconfig /all dari PowerShell.exe atau CMD.exe .
Anda akan membutuhkan peta untuk menjalankan perpustakaan.
Unduhan peta Blizzard resmi tersedia dari Blizzard/S2Client-Proto.
Ekstrak peta ini ke dalam subdirektori masing -masing di direktori peta SC2.
misalnya install-dir/Maps/Ladder2017Season1/
Peta yang dijalankan di tangga SC2 AI dan arena AI SC2 dapat diunduh dari wiki SC2AI dan wiki aiarena.
Ekstrak peta ini ke dalam akar direktori peta sc2 (jika tidak tayangan tangga tidak akan berfungsi).
misalnya install-dir/Maps/AcropolisLE.SC2Map
Setelah menginstal perpustakaan, executable Starcraft II, dan beberapa peta, Anda siap untuk memulai. Cukup jalankan file bot untuk menyalakan contoh Starcraft II dengan bot berjalan. Misalnya:
python examples/protoss/cannon_rush.pySeperti yang dijanjikan, pekerja terburu -buru dalam waktu kurang dari dua puluh baris:
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 )Ini mungkin bot paling sederhana yang memiliki peluang realistis untuk memenangkan permainan. Saya telah menjalankannya melawan AI menengah beberapa kali, dan sesekali, ia menang.
Anda dapat menemukan lebih banyak contoh dalam examples/ folder.
API mendukung sejumlah opsi untuk mengonfigurasi cara beroperasi.
unit_command_uses_self_do Atur ini ke 'true' jika bot Anda menerbitkan perintah menggunakan self.do(Unit(Ability, Target)) alih -alih Unit(Ability, Target) .
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionMenetapkan ini ke True meningkatkan kinerja bot sedikit.
class MyBot ( BotAI ):
def __init__ ( self ):
self . raw_affects_selection = Truedistance_calculation_methodMetode perhitungan jarak:
class MyBot ( BotAI ):
def __init__ ( self ):
self . distance_calculation_method : int = 2game_step Pada permainan mulai atau sebenarnya dalam bingkai apa pun, Anda dapat mengatur langkah game. Ini mengontrol seberapa sering metode step bot Anda dipanggil.
Jangan atur ini dalam fungsi __init__ karena klien belum diinisialisasi!
class MyBot ( BotAI ):
def __init__ ( self ):
pass # don't set it here!
async def on_start ( self ):
self . client . game_step : int = 2 Anda memiliki pertanyaan tetapi tidak ingin membuat masalah? Bergabunglah dengan server Discord Starcraft 2 AI atau aiarena.net Discord Server. Pertanyaan tentang repositori ini dapat ditanyakan di saluran teks #python. Ada diskusi dan pertanyaan tentang pemrograman bot SC2 dan repositori ini setiap hari.
Jika Anda memiliki masalah, ide, atau umpan balik, silakan buat masalah baru. Permintaan tarik juga diterima!
Pesan GIT Commit menggunakan pesan gaya imperatif, mulailah dengan huruf kapital dan tidak memiliki koma trailing.
Untuk menjalankan kait pra-komit (yang menjalankan autoformatting dan impor autosort) Anda dapat menjalankan
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push