Skip to content

Game kernel of AICup 2022 - AI national event held by Isfahan University of Technology

Notifications You must be signed in to change notification settings

aicup-iut/AICup2022-Game-Kernel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AICup2022-Game-Kernel

نحوه اجرای بازی

برای اجرای کرنل به پایتون نسخه 3.8 یا بالاتر نیاز دارید.
پس از دانلود منابع به root-folder کرنل cd کنید.
ابتدا توسط دستور زیر پیش‌نیازها را نصب نمایید.

$ pip3 install -r requirements.txt

در این فایل همچنین پکیج‌هایی که مجاز به استفاده از آنها هستید، قرار گرفته که در صورت نیاز می‌توانید هر کدام را uncomment کنید.

سپس با دستور زیر کرنل بازی را اجرا کنید.

$ python3 src/main.py -p1 <player1-path> -p2 <player2-path>

برای اجرای کرنل از python-executable خود استفاده کنید. این دستور معمولا در ویندوز py و در لینوکس یا مک python3 می‌باشد.

منظور از player-path فایل اجرایی کلاینت می‌باشد. یعنی برای زبانهای سی‌پلاس‌پلاس، جاوا و سی‌شارپ بایستی آدرس فایل اجرایی خود را قرار دهید نه سورس فایل کد! این آرگومان به صورت پیش‌فرض روی کلاینت پایتون Clients/main.py تنظیم شده است.

توجه کنید در صورتی که به زبان جاوا کد می‌زنید، نام فایل کد و کلاس اصلی را به صورت main بنویسید. (مانند کلاینت آماده شده)

فایل اجرایی جاوا بایستی به صورت jar باشد.

برای کامپایل کلاینت سی‌شارپ از دستور زیر استفاده کنید:

$ csc main.cs   # Windows
$ mcs main.cs   # Linux

اگر از سیستم عامل لینوکس استفاده می‌کنید، تنها در صورتی که به زبان سی‌شارپ کد می‌زنید پسوند فایل اجراییتان exe باشد.

با استفاده از آپشن v- یا visualizer-- و تعیین مسیر فایل اجرایی گرافیک بازی، پس از پایان بازی و تولید game.json، گرافیک بازی به صورت خودکار اجرا خواهد شد.

در صورتی که قصد دارید تنظیمات cgroup برای شما فعال شود، از آپشن cg استفاده کنید و با یوزر root اجرا بگیرید. این تنظیمات باعث می‌شود memory-limit و cpu-limit بازی روی کد شما اعمال شود. (در نظر داشته باشید که این کتابخانه فقط روی سیستم عامل‌های لینوکسی قابل استفاده است)

$ sudo python3 src/main.py -p1 <player1-path> -p2 <player2-path> --cg

همچنین شما می‌توانید نقشه دلخواه خود را به فرمت نقشه موجود در منابع maps/map1.json طراحی نمایید و یا متغیرهای جدیدی را برای بازی خود به فرمت تنظیمات موجود در منابع src/settings.json تدوین کنید.

در نهایت برای اطلاعات بیشتر از بقیه آرگومان‌ها و نحوه استفاده آنها از آپشن h- استفاده کنید.

کلاینت

کلاینت های بازی به ۴ زبان پایتون، سی‌پلاس‌پلاس، جاوا و سی‌شارپ آماده شده‌اند که بسته به نیاز می توانید از یکی از این کلاینت ها استفاده کنید.

اطلاعات observation که در هر مرحله توسط کرنل فرستاده می‌شود، در سمت کلاینت دریافت شده و از طریق کلاس GameState قابل دسترسی است که می‌توانید در ادامه برای نوشتن کدتان از آن استفاده کنید.

این کلاینت از طریق متد getAction خروجی کد شما رو به کرنل می‌فرستد.
با توجه به اینکه ارتباط کلاینت و کرنل بازی از طریق stdin و stdout انجام می‌شود، کد شما نباید هیچ دریافت ورودی یا ارسال خروجی اضافه‌ای داشته باشد. همچنین می‌توانید برای دیباگ کدتان از فایل استریم استفاده کنید که نمونه آن در کلاینت پایتون پیاده سازی شده است و بنا به نیاز خود می‌توانید آن را تغییر دهید.

اکیدا توصیه می‌شود متدها و توابع پیاده سازی شده را تغییر ندهید و خروجی خود در هر مرحله را فقط از طریق متد getAction برگردانید. در غیر این صورت مسئولیت Fail شدن بازی یا مشکلات دیگر بر عهده شرکت کننده خواهد بود.

کلاینت مولتی فایل

اگر قصد دارید به صورت مولتی فایل کد نویسی کنید، ساختار فایل‌های شما باید به شکل زیر باشد:
فایل اصلی شما که کرنل آن را اجرا می‌کند باید main.example باشد. example: {py, cpp, java, cs}
در صورتی که از فایل مدل استفاده می‌کنید، نام آن باید به صورت model باشد. (بدون هیچ پسوندی)
تمامی فایل‌ها باید پسوند یکسانی با فایل main شما داشته باشند. (به جز فایل model و فایل‌های header در سی‌پلاس‌پلاس که h. هستند)
هیچکدام از فایل‌ها داخل فولدر نباشند.
در نهایت فایل‌های خود را داخل یک فایل zip قرار داده و آپلود کنید.
توجه کنید که برای اجرای کرنل روی سیستم لوکال خود، باید همان آدرس فایل اجرایی (در پایتون همان فایل اصلی برنامه) را به کرنل بدهید و فایل zip فقط برای ارسال فایل کدهایتان بر روی سایت می‌باشد.
ساختار یک نمونه کلاینت مولتی فایل پایتون معتبر می‌تواند به صورت زیر باشد:

myCode.zip
|─── main.py
│─── MyModule1.py
|─── MyModule2.py
└─── model