اگر دنبال کتابخانه ارائه کننده چارچوب بازی شطرنج هستید و میخواهید عامل هوشمند برای شطرنج بازی کردن بنویسید، این نوشته مخصوص شماست. در این نوشته به معرفی کتابخانه chess پرداخته خواهد شد که چارچوب بازی شطرنج را فراهم کرده است. در این کتابخانه صفحه شطرنج در اختیار شما میباشد و میتوانید خروجی متنی و گرافیکی آن را دریافت نمایید. حرکات را انجام دهید و یا بازگردانی نمایید. این کتابخانه حاوی توابعی برای تشخیص حالات تساوی و کیش و مات شدن و تهدید مهرهها میباشد. قابلیت خواندن گشایشهای polyglot نیز در این کتابخانه در نظر گرفته شده است.
بسم الله الرحمن الرحیم
قبل از هر کار سراغ نصب این کتابخانه میرویم. برای نصب این کتابخانه میتوانیم از ابزار استاندارد pip یا ابزارهای مشابه دیگر استفاده نماییم:
pip install chess
اگر همزمان ویرایش دو و سه پایتون را بر روی سیستم عامل خود نصب دارید بهتر است از pip3 استفاده کنید. کتابخانه chess با نسخه سه به بعد پایتون سازگار است:
pip3 install chess
خب برای شروع کتابخانه را فراخوانی مینماییم و یک صفحه شطرنج ایجاد مینماییم:
import chess board = chess.Board() print(board)
خروجی کد بالا به شکل زیر خواهد بود:
r n b q k b n r p p p p p p p p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P P P P P P P P R N B Q K B N R
اگر از ipython console استفاده میکنید، میتوانید با نوشتن board صفحه شطرنج را به صورت گرافیکی مشاهده نمایید:
In [3]: board
که خروجی آن به شکل زیر خواهد بود:
همچنین میتوانیم در ادامه کدها لیست تمام حرکتهای ممکن در حالت فعلی صفحه شطرنج را مشاهده نماییم. این کار زمانی که بخواهیم درخت بازی را بر اساس حرکتهای ممکن تشکیل دهیم به کار میآید.
print(board.legal_moves)
خروجی کد بالا به شکل زیر خواهد بود:
<LegalMoveGenerator at 0x7f9d68a2e520 (Nh3, Nf3, Nc3, Na3, h3, g3, f3, e3, d3, c3, b3, a3, h4, g4, f4, e4, d4, c4, b4, a4)>
همچنین ما میتوانیم معتبر بودن یک حرکت را با سنجیدن حضور آن در لیست فوق بیازماییم:
print(chess.Move.from_uci("a8a1") in board.legal_moves)
انجام حرکتها نیز با استفاده از دستور push_san از کلاس Board امکان پذیر است. مثال زیر را مشاهده نمایید:
board.push_san("e4")
که باعث میشود صفحه شطرنج ما اینگونه تغییر نماید:
مثال دیگر از توابع این کتابخانه آزمودن کیش و مات شدن یک طرف میباشد:
print(board.is_checkmate())
در کلاس صفحه شطرنج حرکات انجام شده ذخیره میشوند و همان طور که میتوانیم حرکات جدید را push نماییم، میتوانیم با pop کردن آنها، این حرکات را بازگردانی نماییم. کد نمونه زیر را مشاهده نمایید:
Nf3 = chess.Move.from_uci("g1f3") board.push(Nf3) print(board.pop())
حالات مختلف بازی مثل تساوی، نبود مهرههای کافی برای اتمام بازی و تمام شدن بازی، علاوه بر کیش و مات شدن که قبلا معرفی شد، به شکل زیر قابل سنجش هستند:
print(board.is_stalemate()) print(board.is_insufficient_material()) print(board.is_game_over())
امکان سنجش شرط پنج تکرار و هفتاد و پنج حرکت بدون گرفتن مهره حریف یا پیش بردن سرباز نیز در این کتابخانه قابل انجام است:
print(board.is_fivefold_repetition()) print(board.is_seventyfive_moves())