مكتبة سهلة الاستخدام لكتابة روبوتات AI لـ StarCraft II في Python 3. الهدف النهائي هو البساطة وسهولة الاستخدام ، مع الحفاظ على جميع الوظائف. يجب ألا يزيد روبوت العمال البسيط حقًا عن عشرين سطرًا من التعليمات البرمجية ، وليس مائتي. ومع ذلك ، تعتزم هذه المكتبة توفير كل من تجريدات عالية ومنخفضة المستوى.
تغطي هذه المكتبة (حاليًا) فقط الواجهة النصية الخام. في هذا الوقت ، لا أنوي إضافة دعم للواجهات المستندة إلى الرسومات.
يمكن العثور على الوثائق هنا. بالنسبة لمؤلفي BOT ، يمكن أن يكون النظر مباشرة إلى الملفات الموجودة في مجلد SC2 مفيدًا: bot_ai.py ، unit.py ، units.py ، client.py ، game_info.py و game_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 ، لذلك لن تتمكن من الحصول على DentshoST و Dentship مثبتة في نفس الوقت ، ما لم تستخدم البيئات أو الشعر الافتراضي.
ستحتاج إلى 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". . يمكنك القيام بذلك داخل بيثون مع الكود التالي:
import os
os . environ [ "SC2_WSL_DETECT" ] = "0"يجب ألا يتطلب الإصدار 1 WSL أي تكوين. قد يُطلب منك السماح لـ Python من خلال جدار الحماية الخاص بك.
عند تشغيل WSL الإصدار 2 ، تحتاج إلى توفير متغيرات البيئة التالية حتى يتمكن روبوتك من الاتصال:
SC2CLIENTHOST=<your windows IP>
SC2SERVERHOST=0.0.0.0
إذا كنت تضيف هذه إلى .bashrc ، فقد تحتاج إلى تصدير متغيرات البيئة الخاصة بك عن طريق إضافة:
export SC2CLIENTHOST
export SC2SERVERHOST يمكنك العثور على IP Windows باستخدام ipconfig /all من PowerShell.exe أو CMD.exe .
ستحتاج إلى خرائط لتشغيل المكتبة.
تتوفر تنزيلات خريطة العاصفة الثلجية الرسمية من Blizzard/S2Client-Proto.
استخراج هذه الخرائط في الدلائل الفرعية الخاصة بكل منها في دليل خرائط SC2.
مثل install-dir/Maps/Ladder2017Season1/
يمكن تنزيل الخرائط التي يتم تشغيلها على سلم SC2 AI و SC2 AI Arena من SC2AI Wiki و Aiarena Wiki.
استخراج هذه الخرائط في جذر دليل خرائط SC2 (وإلا لن يعمل إعادة سلم السلم).
على سبيل المثال install-dir/Maps/AcropolisLE.SC2Map
بعد تثبيت المكتبة ، وقابلة للتنفيذ من StarCraft II ، وبعض الخرائط ، فأنت مستعد للبدء. ما عليك سوى تشغيل ملف bot لإطلاق مثيل لـ 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 )ربما يكون هذا أبسط الروبوت الذي لديه أي فرص واقعية للفوز باللعبة. لقد ركضته ضد الذكاء الاصطناعى المتوسط عدة مرات ، وفازت مرة واحدة.
يمكنك العثور على المزيد من الأمثلة في examples/ المجلد.
يدعم API عددًا من الخيارات لتكوين كيفية عملها.
unit_command_uses_self_do اضبط هذا على "True" إذا كان الروبوت الخاص بك يصدر أوامر باستخدام self.do(Unit(Ability, Target)) بدلاً من Unit(Ability, Target) .
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 في Game Start أو في أي إطار في الواقع ، يمكنك تعيين خطوة اللعبة. يتحكم هذا في عدد المرات التي تسمى طريقة 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 رسائل على الطراز الضروري ، وتبدأ بالحرف الرأسمالي وليس لديها فواصل زائدة.
لتشغيل السنانير قبل الالتزام (التي تعمل على تنسيق تلقائي واردات Autosort) يمكنك التشغيل
poetry run pre-commit install
poetry run pre-commit run --all-files --hook-stage push