عن المشروع
# chess_z
chess_z هو إطار برمجي للشطرنج الصيني مطبق بلغة C، وينصب التركيز الحالي على نواة القواعد وحدود ربط الذكاء الاصطناعي.
## الميزات الرئيسية
- **تمثيل لوحة البتات**: لوحة من 90 مربعًا ممثلة بلوحتي بتات `uint64_t` مزدوجتين، ولكل نوع قطعة من كل جانب bitboard مستقل.
- **مصفوفة البريد**: صيانة متزامنة لمصفوفة البريد `board[90]` لتسهيل توليد القواعد والتصحيح.
- **دعم كامل للقواعد**: يدعم الوضعية الابتدائية، قراءة وكتابة FEN، تنفيذ النقلات، توليد النقلات القانونية، كشف الكش، وperft.
- **واجهة تكييف الذكاء الاصطناعي**: توفر `XqEngineAdapter`، ويمكن لاحقًا ربط دوال بحث/تقييم خارجية لشطرنج صيني.
- **محرك مبسط مدمج**: يتضمن تقييمًا صغيرًا للمواد وحركية النقلات القانونية + بحث negamax، ويُستخدم أساسًا لاختبار دخان الإطار.
## هيكل المجلدات
```text
include/xiangqi/bitboard.h عمليات لوحة البتات الأساسية
include/xiangqi/types.h الأنواع الأساسية، القطع، النقلات
include/xiangqi/position.h تمثيل الوضعية، FEN، تنفيذ النقلات
include/xiangqi/movegen.h النقلات شبه القانونية/القانونية، كشف الكش، perft
include/xiangqi/engine.h واجهة تكييف محرك الذكاء الاصطناعي
src/ التنفيذ الأساسي
examples/cli.c مثال لواجهة سطر الأوامر
stats/generate_positions.c مدخل توليد وضعيات قانونية عشوائية
stats/search_positions.c مدخل بحث الوضعيات بالدفعات
stats/random_fen/ بيانات FEN للوضعيات العشوائية
stats/data/ نتائج تحليل الأداء
tests/test_core.c اختبارات القواعد الأساسية
```
## البناء
يُنصح باستخدام CMake:
```sh
cmake -S . -B build
cmake --build build
ctest --test-dir build
```
إذا كان الجهاز يحتوي على GCC فقط، يمكن أيضًا تجميع الاختبارات مباشرة:
```sh
gcc -std=c99 -Wall -Wextra -Wpedantic -I include src/position.c src/movegen.c src/engine.c tests/test_core.c -o build/xiangqi_core_tests
./build/xiangqi_core_tests
```
تجميع مثال اللعب التفاعلي بين الإنسان والآلة:
```sh
gcc -std=c99 -Wall -Wextra -Wpedantic -I include src/position.c src/movegen.c src/engine.c examples/cli.c -o build/xiangqi_cli
./build/xiangqi_cli
```
مدخل المثال الافتراضي هو "أنت تلعب بالأحمر، والمحرك المبسط المدمج يلعب بالأسود". صيغة الإدخال هي `نقطة البداية+نقطة النهاية`، والملفات تستخدم `a..i`، وأرقام الصفوف تستخدم `0..9`، على سبيل المثال:
```text
b2b9
```
الأوامر المتاحة:
```text
moves طباعة جميع النقلات القانونية الحالية
fen طباعة FEN الحالي
help طباعة المساعدة
quit الخروج
```
## توليد الوضعيات العشوائية والبحث بالدفعات
بعد البناء يمكن أولًا توليد مجموعة من الوضعيات القانونية العشوائية القابلة لإعادة الإنتاج، ثم جعل المحرك المدمج يبحث فيها واحدة تلو الأخرى:
```sh
./build/xiangqi_generate_positions
./build/xiangqi_search_positions
```
يستخدم البرنامجان افتراضيًا `stats/random_fen/random_positions.fen`، ويمكن أيضًا تحديد نفس مسار الملف لكليهما:
```sh
./build/xiangqi_generate_positions build/profile_positions.fen
./build/xiangqi_search_positions build/profile_positions.fen
```
يستخدم المولد بذرة عشوائية ثابتة، وينفذ نقلات عشوائية من الوضعية الابتدائية لمسافة `0..100` خطوة، ويخرج إجمالي 100 وضعية، كل سطر يحتوي على FEN واحد. يقرأ برنامج البحث الملف مرة واحدة بالترتيب، ويبحث خطوة واحدة لكل وضعية بإعداد أقصى عمق 6 وبدون حد زمني، وهو مناسب كمدخل غير تفاعلي لتحليل الأداء.
## ربط الذكاء الاصطناعي
يمكن للذكاء الاصطناعي الخارجي إعادة استخدام طبقة القواعد مباشرة:
```c
XqMoveList legal;
xq_generate_legal(&pos, &legal);
for (int i = 0; i < legal.count; ++i) {
XqPosition next = pos;
xq_position_make_move(&next, legal.moves[i]);
/* قم بالبحث أو التقييم على next */
}
```
يمكن أيضًا ربط بحث مخصص عبر `XqEngineAdapter`:
```c
static bool my_search(const XqPosition *pos, unsigned depth, XqMove *best, void *user) {
(void)user;
/* استخدم xq_generate_legal / xq_position_make_move لتنفيذ بحثك الخاص */
return false;
}
XqEngineAdapter engine = {
.evaluate = NULL,
.search = my_search,
.user = NULL,
};
XqMove best;
XqSearchLimits limits = xq_search_limits_default();
xq_engine_find_best_move(&engine, &pos, &limits, &best);
```
## اصطلاحات الإحداثيات
- نطاق `file` هو `0..8`، ونطاق `rank` هو `0..9`.
- خط القاعدة الأحمر هو `rank = 0`، وخط القاعدة الأسود هو `rank = 9`.
- `xq_square_make(file, rank)` يحول الإحداثيات إلى `rank * 9 + file`.
- يُكتب FEN في 10 صفوف من الأسود إلى الأحمر، باستخدام الأحرف الكبيرة للأحمر والأحرف الصغيرة للأسود.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.