ห้องสมุดที่ใช้งานง่ายสำหรับการเขียนบอท AI สำหรับ Starcraft II ใน Python 3 เป้าหมายสูงสุดคือความเรียบง่ายและใช้งานง่ายในขณะที่ยังคงรักษาฟังก์ชั่นทั้งหมด บอท Rush Bot ที่เรียบง่ายจริงๆไม่ควรมีรหัสไม่เกินยี่สิบบรรทัดไม่ใช่สองร้อย อย่างไรก็ตามห้องสมุดนี้ตั้งใจที่จะให้ทั้ง abstractions ระดับสูงและต่ำ
ไลบรารีนี้ (ปัจจุบัน) ครอบคลุมเฉพาะอินเตอร์เฟสสคริปต์ดิบ ในเวลานี้ฉันไม่ได้ตั้งใจที่จะเพิ่มการสนับสนุนสำหรับอินเทอร์เฟซที่ใช้กราฟิก
เอกสารสามารถพบได้ที่นี่ สำหรับผู้เขียน BOT การดูไฟล์โดยตรงในโฟลเดอร์ SC2 ยังเป็นประโยชน์: bot_ai.py, unit.py, units.py, client.py, game_info.py และ game_state.py ฟังก์ชั่นส่วนใหญ่ในไฟล์เหล่านั้นมีเอกสารตัวอย่างการใช้งานและพิมพ์คำใบ้
ฉันวางแผนที่จะเปลี่ยนส้อมนี้อย่างรุนแรงกว่าพื้นที่เก็บข้อมูลหลักเพื่อประโยชน์ประสิทธิภาพของบอทและเพื่อเพิ่มฟังก์ชั่นเพื่อช่วยผู้เขียนบอทใหม่ สิ่งนี้อาจทำให้บอทเก่าแก่ในอนาคต แต่ฉันพยายามเพิ่มคำเตือนการเสียเปรียบเพื่อแจ้งเตือน ซึ่งหมายความว่าวิดีโอการสอนที่ทำโดย 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
คำสั่งทั้งสองจะใช้โฟลเดอร์ Library sc2 ดังนั้นคุณจะไม่สามารถติดตั้ง Dentosal's และ Fork นี้ได้ในเวลาเดียวกันเว้นแต่คุณจะใช้สภาพแวดล้อมเสมือนจริงหรือบทกวี
คุณจะต้องใช้งาน Starcraft II หากคุณใช้ Windows หรือ MacOS เพียงติดตั้ง SC2 จากแอพ Blizzard
คุณสามารถติดตั้ง Starcraft II บน Linux ด้วยไวน์, Lutris หรือแม้แต่ Linux Binary แต่หลังไม่มีหัวเลยดังนั้นคุณจึงไม่สามารถเห็นเกมได้ Starcraft II สามารถติดตั้งโดยตรงจาก Battlenet เมื่อดาวน์โหลดด้วย Lutris โดยค่าเริ่มต้นจะติดตั้งที่นี่:
/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 โดยค่าเริ่มต้นและเริ่มต้น Windows Starcraft 2 แทน Linux Starcraft 2 หากคุณต้องการให้เกมเล่นใน Linux แทนคุณสามารถปิดการใช้งานพฤติกรรมนี้ได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม SC2_WSL_DETECT เป็น "0" . คุณสามารถทำได้ภายใน Python ด้วยรหัสต่อไปนี้:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"WSL เวอร์ชัน 1 ไม่ควรกำหนดค่าใด ๆ คุณอาจถูกขอให้อนุญาตให้หลามผ่านไฟร์วอลล์ของคุณ
เมื่อเรียกใช้ WSL เวอร์ชัน 2 คุณต้องจัดหาตัวแปรสภาพแวดล้อมต่อไปนี้เพื่อให้บอทของคุณสามารถเชื่อมต่อได้:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
หากคุณกำลังเพิ่มสิ่งเหล่านี้ลงใน. BASHRC ของคุณคุณอาจต้องส่งออกตัวแปรสภาพแวดล้อมของคุณโดยการเพิ่ม:
export SC2CLIENTHOST
export SC2SERVERHOST คุณสามารถค้นหา windows ip ของคุณโดยใช้ ipconfig /all จาก PowerShell.exe หรือ CMD.exe
คุณจะต้องใช้แผนที่เพื่อเรียกใช้ห้องสมุด
การดาวน์โหลดแผนที่ Blizzard อย่างเป็นทางการมีให้บริการจาก Blizzard/S2Client-Proto
สกัดแผนที่เหล่านี้ลงใน ไดเรกทอรี ย่อยของตนในไดเรกทอรี SC2 MAPS
เช่น install-dir/Maps/Ladder2017Season1/
แผนที่ที่ทำงานบนบันได SC2 AI และ SC2 AI Arena สามารถดาวน์โหลดได้จาก SC2AI Wiki และ Aiarena Wiki
แยกแผนที่เหล่านี้ลงใน รูท ของไดเรกทอรี SC2 MAPS (มิฉะนั้นการเล่นซ้ำบันไดจะไม่ทำงาน)
เช่น install-dir/Maps/AcropolisLE.SC2Map
หลังจากติดตั้งไลบรารีสตาร์คราฟต์ที่สองได้รับการปฏิบัติการและแผนที่บางอย่างคุณก็พร้อมที่จะเริ่มต้น เพียงเรียกใช้ไฟล์บอทเพื่อยิงอินสแตนซ์ของ 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)
class MyBot ( BotAI ):
def __init__ ( self ):
self . unit_command_uses_self_do = Trueraw_affects_selectionการตั้งค่าสิ่งนี้เป็นจริงช่วยปรับปรุงประสิทธิภาพของบอทได้เล็กน้อย
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 หรือ Aiarena.net Discord Server คำถามเกี่ยวกับที่เก็บนี้สามารถถามได้ในช่องข้อความ #python มีการอภิปรายและคำถามเกี่ยวกับการเขียนโปรแกรม SC2 Bot และที่เก็บนี้ทุกวัน
หากคุณมีปัญหาความคิดหรือข้อเสนอแนะใด ๆ โปรดสร้างปัญหาใหม่ ยินดีต้อนรับคำขอดึง!
GIT COMMENT MESSOX ใช้ข้อความสไตล์ที่จำเป็นเริ่มต้นด้วยจดหมายทุนและไม่มีเครื่องหมายจุลภาคต่อท้าย
ในการเรียกใช้ hooks ล่วงหน้า (ซึ่งเรียกใช้การกำหนดค่าอัตโนมัติและการนำเข้าอัตโนมัติ) คุณสามารถเรียกใช้
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push