نمایش نتایج 1 تا 9 از 9

نام تاپیک: الگوریتم موتور بازی شطرنج

  1. #1

    الگوریتم موتور بازی شطرنج

    سلام دوستان

    من یه برنامه شطرنج نوشتم ، شامل قسمت های زیره :
    1- محیط گرافیکی
    2- موتور بازی
    3- پایگاه داده مربوط به Opening ها

    در مورد محیط گرافیکی و پایگاه داده که بحث خاصی نیست .
    مهمترین قسمت این برنامه ، موتور بازی ه


    موتوری که من نوشتم این ویژگی ها رو داره :

    1- نحوه بازی : آنالیز Position از طریق درخت Min-Max
    2- بهینه سازی درخت آنالیز از طریق حرص Alpha - Beta
    3- عمق پیمایش : 4
    4- ارزیابی هر Position به وسیله شمارش تعداد مهره ها و جمع برداری ارزش مهره ها
    5- بهینه سازی استفاده از حافظه ( در هر لحظه فقط مسیر جاری در حافظه است ، و در پایان کار ، تنها بهترین مسیر در حافظه است . )

    ضعف های اصلی این موتور در عمق پیمایش و نحوه ارزیابی هر Position ه
    حل مشکل عمق پیمایش ساده است ، ولی همون طور که می دونید افزایش عمق پیمایش از 4 به 5 معادل افزایش زمان محاسبات به صورت تصاعدیه ( تصاعد هندسی ) . پس عملا نمیشه به همین سادگی عمق پیمایش رو افزایش داد .
    ولی در مورد تابع evaluate که وظیفه Analysis هر Position رو بر عهده داره ، میشه کاری کرد که با Analysis بهتر ، نتیجه محاسبات موتور رو بهتر کنه .

    بهترین روشی که میشه به کار برد (از نظر من ) ، اینه که از یه الگوریتم پیشگو برای تابع Evaluate در نظر گرفت که با یه آنالیز پیشگو هم در عمق ( نه به صورت درختی ) پیش بره و هم ارزیابی منطقی از Position رو بده .


    دوستان ، به نظر با هم فکری همدیگه بتونیم یه همچین الگوریتمی رو طراحی کنیم .
    خوشحال میشم اگه منو از نظراتون بهره مند کنید .
    ممنون .







    .

  2. #2

    نقل قول: الگوریتم موتور بازی شطرنج

    تابع evaluate دقیقا چه جوری محاسبه می کنه؟
    منظورتون از تابع پیشگویی چیه؟

  3. #3
    کاربر دائمی آواتار Daleeeeer
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    پشت هيچستان
    پست
    183

    نقل قول: الگوریتم موتور بازی شطرنج

    سلام دوست من. دو تا سوال؟
    1- تابع evaluate شما چه جوری کار می کنه؟ نحوه آنالیز اون چه جوریه؟
    2- منظورت از تابع پیشگو همون تابع هیورستیک هست؟ در ضمن الان داری از این تابع پیشگو استفاده می کنی؟ چه جوری؟

    ممنون می شم اینها رو بگی. شاید یه کاری با هم کردیم. یا علی

  4. #4

    نقل قول: الگوریتم موتور بازی شطرنج

    1- این تابع به هیچ عنوان کارا نیست . باید یه تابع جدید نوشته بشه .

    2- نه ، فکر نمی کنم اسم این تابع رو تابع هیوریستیک بشه گذاشت ، و من از هیچ تابع پیشگویی استفاده نمی کنم .

    تابع پیشگو باید این طور عمل کنه :
    1- Attack - Defence ها رو بدون اینکه از درخت استفاده کنه ، محاسبه کنه
    2- Mate Attack Position رو باید بتونه بدون درخت شناسایی کنه
    3- Mate Defence Position رو باید بدون درخت آنالیز کنه
    4- King Safty رو بتونه بدونه استفاده از درخت آنالیز کنه
    5- Relative Agressive position رو باید بتونه شناسایی کنه .





    .

  5. #5
    کاربر دائمی آواتار محمدامین شریفی
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران - شیراز
    پست
    1,302

    نقل قول: الگوریتم موتور بازی شطرنج

    منم دارم روی این بازی کار میکنم.اسمش هست reversi و بازی خیلی جالبی هست.تمام مطالب شما درباره بازی شطرنج در این بازی هم صدق می کند.شما در چه مرحله ای هستید؟
    اینجا را هم ببینید.
    آخرین ویرایش به وسیله aminsharifi67 : یک شنبه 03 خرداد 1388 در 14:10 عصر

  6. #6

    نقل قول: الگوریتم موتور بازی شطرنج

    من کد کردن این موتورو پارسال تموم کردم.
    البته اکثر مواردی که من در مورد این موتور گفتم یه چیزای کلی هست که تقریبا هر موتور بازی هوشمندی از بعضی از این موارد باید استفاده کنه تا بتونه بر حریفش غلبه کنه .




    .

  7. #7
    کاربر دائمی آواتار محمدامین شریفی
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران - شیراز
    پست
    1,302

    نقل قول: الگوریتم موتور بازی شطرنج

    نقل قول نوشته شده توسط hamed jalili مشاهده تاپیک
    من کد کردن این موتورو پارسال تموم کردم.
    البته اکثر مواردی که من در مورد این موتور گفتم یه چیزای کلی هست که تقریبا هر موتور بازی هوشمندی از بعضی از این موارد باید استفاده کنه تا بتونه بر حریفش غلبه کنه .
    .
    دوست من اگر می تونی از الگوریتم هایی که استفاده کردی،توضیح بده.
    اگر برنامه ات تجاری نیست خوشحال میشیم ببینیمش.

  8. #8

    نقل قول: الگوریتم موتور بازی شطرنج

    راستش این یه برنامه خیلی پیچیده هست که هم توضیحش از حد وقت و حوصله من خارجه و هم خوندن توضیحات من از وقت و حوصله شما خارجه .

    یه مثال خیلی کوچک رو از این موتور به صورت خیلی مختصر براتون توضیح میدم :
    تابع تشخیص Mate Position
    این تابع وقتی صدا زده میشه که موتور اعلان کیش رو دریافت میکنه ، این اعلان به ناظر اطلاع داده میشه ( ناظر یه تابع ه که روند بازی رو کنترل می کنه تا تمام قوانین شطرنج پیاده به درستی اجرا بشن ) ناظر Position و تعدادی اطلاعات کلیدی رو به تابع تشخیص مات ارجاع میده که این تابع به این صورت فرمان دریافتی رو برسی می کنه :

    1- کیش توسط چه مهره ای انجام شده است ؟
    2- کیش از چه نوعی است ؟ ( یک طرفه یا دو طرفه )

    اگر کیش یک طرفه است :
    بررسی راه های ممکنه برای فرار شاه ، دفاع شاه و حذف مهره کیش کننده

    اگر کیش دو طرفه است :
    بررسی راه های ممکنه برای فرار شاه

    و در نهایت اعلام می کنه که این Position مات هست یا خیر ؟!

    همون طور که ملاحظه می فرمایید ، به نظر خیلی ساده است ولی همین روند ساده روزها کار می برده تا تکمیل بشه و باور بفرمایید که این فقط یکی از ساده ترین کارهایی ه که این موتور انجام میده .

    این موتور برای جستجو از روش تجزیه درختی استفاده می کنه و برای بهینه سازی از روش حرص Alpha - Beta استفاده میکنه . عمق پیمایش 5 ه و متوسط Node های ساخته شده بدون حرص برای Position های نیمه پیچیده وسط بازی حدود 40^40^40^40^40 ه . حداکثر زمان پاسخ برای یک Position پیچیده وسط بازی با اعمال حرص ، حدود 5 ثانیه است . ( Processor: Core 2 Duo E4500 )





    نه موتور و نه واسط اون تجاری ه؛ ولی چون فعلا به امنیت فایل های exe و dll در حفاظت از کد ها ایمان ندارم متاسفانه ...
    اگه screenshot به دردتوم می خوره می تونم چند تا براتون upload کنم یا چند تا از بازی های موتور رو براتون بنویسم .


    .

  9. #9
    کاربر دائمی آواتار محمدامین شریفی
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران - شیراز
    پست
    1,302

    نقل قول: الگوریتم موتور بازی شطرنج

    نقل قول نوشته شده توسط hamed jalili مشاهده تاپیک
    این موتور برای جستجو از روش تجزیه درختی استفاده می کنه و برای بهینه سازی از روش حرص Alpha - Beta استفاده میکنه . عمق پیمایش 5 ه و متوسط Node های ساخته شده .
    کد پروژه reversi رو اینجا گذاشتم.توضیحات فارسیش هم بعدا گذاشته می شود.
    پروژه اصلیش در اینجاست،که در واقع 50 درصد کدهاش رو کم کردم،و یک کلاس هم بهش اضافه کردم.
    نقل قول نوشته شده توسط hamed jalili مشاهده تاپیک
    تابع تشخیص Mate Position
    این تابع وقتی صدا زده میشه که موتور اعلان کیش رو دریافت میکنه ، این اعلان به ناظر اطلاع داده میشه ( ناظر یه تابع ه که روند بازی رو کنترل می کنه تا تمام قوانین شطرنج پیاده به درستی اجرا بشن ) ناظر Position و تعدادی اطلاعات کلیدی رو به تابع تشخیص مات ارجاع میده که این تابع به این صورت فرمان دریافتی رو برسی می کنه :

    1- کیش توسط چه مهره ای انجام شده است ؟
    2- کیش از چه نوعی است ؟ ( یک طرفه یا دو طرفه )

    اگر کیش یک طرفه است :
    بررسی راه های ممکنه برای فرار شاه ، دفاع شاه و حذف مهره کیش کننده

    اگر کیش دو طرفه است :
    بررسی راه های ممکنه برای فرار شاه

    و در نهایت اعلام می کنه که این Position مات هست یا خیر ؟!
    .
    هر وقت که از امنیت کدهایتان اطمینان حاصل کردید، خوشحال می شویم کد این تابع را ببینیم.

    پیروز باشید.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •