قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية DELTA67
DELTA67
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
نشاط [ DELTA67 ]
قوة السمعة:80
قديم 18-02-2017, 11:53 AM المشاركة 1   
افتراضي حصـــري: ألعب الشطرنج ضد "منــال". كيف تكتب برنامج شطرنج خطوة بخطوة. Twitter FaceBook Google+



أهـــلا بكم.
سوف نرى من خلال هذا الموضوع خطوات كتابة برنامج حاسوب بسيط للعب الشطرنج ضد الكومبيوتر.
في المرحلة الأولى يكون رد الحاسوب بطريقة صحيحة لكن دون أي ذكاء كولد صغير و لهذا أخترت له اسم بنت صغيرة "منـــال" . طبعا بمرور الوقت ستكبر "منــال" و تكون أكثر ذكاءا أي أننا سنضيف لاحقا نوعا من الذكاء لبرنامجنا حتى يختار اللعبة المناسبة للرد على اللاعب.
للتسهيل البرنامج مكتوب بلغة سي C و لبيئة دوس DOS و الهدف الأساسي منه هو فهم كيف تشتغل برامج لعب الشطرنج و لا نبتغي منافسة البرامج الموجودة بأي حال.
- القطع البيضاء ممثلة بالحروف: P R N B Q K
- القطع السوداء ممثلة بالحروف: p r n b q k

- حاليا لا يمكن القيام بالنقلات Castling أو En passant كما لا يفحص البرنامج ان كان الملك في وضعية "كش" أم لا و هذا ما سيتم اضافته لاحقا.
هذه صورة واجهة البرنامج عند الانطلاق وقد تم ادخال النقلة e2e4 من طرف اللاعب:


هنا نرى رد الحاسوب بالنقلة a7a6:


هذا رابط تحميل البرنامج:

https://www.sendspace.com/file/86x18r

روابط مهمة:
http://chessprogramming.wikispaces.com/

http://www.oellermann.com/cftchess/notes

سنعــــــود





لا تسأل الطغاه لماذا طغو بل اسأل العبيد لماذا انحنو
--------------------------------------------------------------------------------------
مـــــواضـــيعــي: (أنقـــر على العنوان لتصفح الموضوع)

- حصـــري: ألعب الشطرنج ضد "منــال". كيف تكتب برنامج شطرنج خطوة بخطوة.

- حصري: التحكم في تلفونات نوكيا بواسطة البروتوكول FBUS .

- حصـــري: تعرف على معالجات المستقبل ARM – دورة عملية على RASPBERRY.

- أصنعها بنفسك ..... أبسط لوحة أردوينو.

- هيا نصنع المبرمجة السحرية PICkit2 .

- حصـــــري :هيا نصنع سكانر سيارة OBD-II .

- حصري: هيا نصنع دارة تحكم في الدش بواسطة الريسيفر باستعمال أوامر الدايزك DiSEqC.

- أصنع محلل اشارات رقميةLOGIC ANALYZER .

- مبرمجة بسيطة جدا لعائلة AVR على البورت COM أو USB .

-حصـــري : هل تعــــرف الـبوت-كيكر BUTTKICKER ؟؟

- هل تعرف التسخين بالتحريض المغنطيسي induction heating ؟

- مبرمجة البيك داخل الدارة PIC ICSP Programmer

- دارة تحكم استطاعة بـ 5 ريليات أو أكثر لمشاريعك


- كيفية استعمال تحويل فورييه السريع FFT لايجاد طيف اشارة.

-هيا نصنع دارة محول صوت مونو الى "شبه ستيريو"Mono to Pseudo STEREO.

- كيف تستعمل شاشة تلفون نوكيا 3310 أو 3410؟

- ما رأيكم في مشروع يناء حاسوب موافق للـ IBM PC 5150 ؟؟

- مبرمجة الـــ PIC داخل الدارة In Circuit.

- وصل بطاقة SD أو MMC بالـــ ATMEGA8.

- مبرمجة لعائلة الــ AVR سهلة جدا جدا جدا !!!

- دارة بسيطة جدا لعرض نص على شاشة التلفزيون.

- مبرمجات PIC بسيطة جدا.

- أشعل شمعة الكترونية، استرخي تحت وقع زخات المطرثم نم نوما هادئا!!!

- مبرمجـــة الــ ATMEL AVRs عن طريق الــ USB .

- أضف شاشة عرض LCD الى مشاريعك.

- ما رأيكم في مشروع دايزك DISEQC ؟؟

- هل تعرف LTSPICE IV ؟ برنامج محاكاة احترافي قوي و مجاني.

- تعالوا نتعرف على الصوت المحيطي SURROUND SOUND .

- مجموعة من الحيل "العفسات" للمحترفين و الهواة.

- مدخل لاستخدام البورت USB. أستعد لنهاية البورتات LPT و RS232.

-كيف تصنع جهاز استقبال راديو بترانزستور واحد؟؟



التعديل الأخير تم بواسطة : DELTA67 بتاريخ 18-02-2017 الساعة 12:05 PM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ياسين الحانوتي ( شكر العضو على هذه المشاركة )
اعجاب ياسين الحانوتي ( أعجبته المشاركة )
اعلانات

الصورة الرمزية ياسين الحانوتي
ياسين الحانوتي
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2013
المشاركات: 164
نشاط [ ياسين الحانوتي ]
قوة السمعة:0
قديم 18-02-2017, 07:37 PM المشاركة 2   
افتراضي


مشكوور اخي فعلا فكرة رائعة جدا .. في انتظار الكود..
ملاحظة: بيئة الدوس غير ملائمة للعب مارأيك باضافة واجهة؟ مع الحفاظ عل نفس البرنامج؟

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية DELTA67
DELTA67
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
نشاط [ DELTA67 ]
قوة السمعة:80
قديم 18-02-2017, 08:01 PM المشاركة 3   
افتراضي


مشكوور اخي فعلا فكرة رائعة جدا .. في انتظار الكود..
ملاحظة: بيئة الدوس غير ملائمة للعب مارأيك باضافة واجهة؟ مع الحفاظ عل نفس البرنامج؟
عفوا عزيزي . مشكور أنت على مرورك الطيب.
أنا ما زلت مبتدءا في هذا المجال لكن أظن أنه اذا تمكنا من كتابة البرنامج لبيئة دوس يمكن بسهولة استعمال الواجهة الغرافيكية WinBoard .
لم أجرب هذا بعد لذا أرجو من كل من لديه خبرة اثراء الموضوع,


الصورة الرمزية DELTA67
DELTA67
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
نشاط [ DELTA67 ]
قوة السمعة:80
قديم 19-02-2017, 05:05 PM المشاركة 4   
افتراضي




1- تصميم واجهة البرنامج:

كما هو موضح على الصور السابقة يتفاعل البرنامج مع اللاعب من خلال تمثيل الرقعة على الشاشة بشكل مربعات تمثل جدولا بــ 8 أسطر و 8 أعمدة.
على يسار الجدول نجد الأرقام العربية من 1 الى 8 وتحته نجد الحروف اللاتينية من A الى H و هذا لتسهيل تمثيل النقلات.
- القطع البيضاء ممثلة بالحروف: P R N B Q K
- القطع السوداء ممثلة بالحروف: p r n b q k
نضع القطع السوداء في أعلى الرقعة و البيضاء أسفلها.
في البرنامج نمثل هذه الرقعةالظاهرة على الشاشة بمصفوفة 18في 18 و نسميها vboard اختصارا لــ visible board…

هذا هو الكود لملأ المصفوفة (الرقعة) عند انطلاق اللعبة و رسمها على الشاشة:

كود:
#include <stdlib.h>

init_board();
print_board();

char vboard[18][18]; // visible board array

char* blackp= "rnbqkbnr";  // black pieces for initial visible board
char* whitep= "RNBQKBNR";  // white pieces for initial visible board

char* notation= "ABCDEFGH";

main(){
	init_vboard();
	print_vboard();
		
	while(1);
}

//---------------------------------------
init_vboard(){
 char i, x, y, n, z=9;
  // fill boxes
  for(x=0;x<18;x++)
  {
     i=0;
  //  x even 
  if ( (x & 1) == 0 ) { vboard[x][0] = ' ';for(y=1;y<18;y++) vboard[x][y] = '-';}
  else // x odd 
   { z--;   n=z+0x30; // convert to ascii
          vboard[x][0] = n; // numbers for notation help
    for(y=1;y<18;y++)
       {
     if ( ((y & 1) == 1)&(x!=17) ) vboard[x][y] = '|'; 
     else{ 
          if(x==1) {vboard[x][y] = blackp[i]; i++;} // black pieces
          else if(x==3)  vboard[x][y] = 'p'; // black pawns
          else if(x==13) vboard[x][y] = 'P'; // white pawns
          else if(x==15) {vboard[x][y] = whitep[i]; i++;} // white pieces
          // characters for notation help
          else if (x==17){vboard[x][0]=' ';if((y & 1)== 1) vboard[x][y]=' ';else{vboard[x][y]=notation[i];i++;}} 
          else vboard[x][y]= ' '; // empty box
         }
       }
    }
  }

  }
//-----------------------------------------------
print_vboard(){ 
    char x, y;
    
  for(x=0;x<18;x++)
  {
    for(y=0;y<18;y++)
    {
      printf("%c", vboard[x][y]);
    }
    printf("\n");      //next line
  }
   printf("\n");      
 }

لا أدعي أن هذا الكود هو الأفضل من حيث الـ optimisation و لا الأسهل للفهم لكن الهدف هو فهم الفكرة العامة و كل من لديه أي اقتراحات لتعديله أو تحسينه فعلى الرحب و السعة.
أنا أستعمل الكومبايلر BORLAND C++ V5 لكن أظن أنه يمكن استعمال أي كومبايلر C دون مشاكل.

سنعــــود


التعديل الأخير تم بواسطة : DELTA67 بتاريخ 19-02-2017 الساعة 09:57 PM
احصائية الشكر والاعجاب - 2 شكراً, 0 عدم اعجاب, 2 اعجاب
شكراً ياسين الحانوتي, سعيد قادر ( شكر العضو على هذه المشاركة )
اعجاب ياسين الحانوتي, سعيد قادر ( أعجبته المشاركة )

الصورة الرمزية DELTA67
DELTA67
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
نشاط [ DELTA67 ]
قوة السمعة:80
قديم 20-02-2017, 12:14 PM المشاركة 5   
افتراضي




عـــــدنا

الكتابة :
" char* blackp= "rnbqkbnr
تكــافئ :

char blackp[]= {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r’}

و هذه الصورة تسهل فهم الكود السابق اذ لا بد من استيعاب هذه النقطة من أجل فهم كيفية تحريك القطع على الرقعة.



لاحظ أن المصفوفة الممثلة للرقعة تتكون من 18 سطرا و 18 عمودا كل منها مرقم من 0 الى 17.
نبدأ رسم الرقعة على الشاشة انطلاقا من الأعلى يسارا.

سنعــــود

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً ياسين الحانوتي ( شكر العضو على هذه المشاركة )
اعجاب ياسين الحانوتي ( أعجبته المشاركة )

الصورة الرمزية ياسين الحانوتي
ياسين الحانوتي
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2013
المشاركات: 164
نشاط [ ياسين الحانوتي ]
قوة السمعة:0
قديم 20-02-2017, 01:14 PM المشاركة 6   
افتراضي


جميل.. فهمت الآن كيف ترسم الرقعة ... واتضح لي حتى الاجراء init_vboard .. واصل اخي


التعديل الأخير تم بواسطة : ياسين الحانوتي بتاريخ 20-02-2017 الساعة 01:18 PM

الصورة الرمزية DELTA67
DELTA67
:: ضو فضي ::
تاريخ التسجيل: Aug 2010
المشاركات: 350
نشاط [ DELTA67 ]
قوة السمعة:80
قديم 20-02-2017, 05:58 PM المشاركة 7   
افتراضي


جميل.. فهمت الآن كيف ترسم الرقعة ... واتضح لي حتى الاجراء init_vboard .. واصل اخي
سعيد أنك قد أستفدت و لو قليلا و شكرا على اهتمامك.
لكن للأسف يبدوا أن لا أحد غيرك يبالي بالموضوع لذلك فأنا ملزم على التوقف عند هذا الحد لأن اعداد الشرح يتطلب الكثير من الوقت و الجهد كما تعلم.
رابط السورس كود:
https://www.sendspace.com/file/q6gfwc

الكود تطلب مني الكثير من الوقت و يصاحبه الكثير الكثير من التعليقات و بالتالي يسهل فهمه أتمنى ذلك.
فقط أرجوا من كل من استفاد منه مشاركتنا عمله لتعم الفائدة على الجميع.


التعديل الأخير تم بواسطة : DELTA67 بتاريخ 20-02-2017 الساعة 06:14 PM
احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً ياسين الحانوتي ( شكر العضو على هذه المشاركة )
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:38 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025