تطبيقات الكمبيوتر لا تختلف عن تلك الورقة. الفكرة تكمن في كيفية تبسيط المشكلة او الشيء الذي نريد حله.
قبل ظهور البرمجة الشيئية Object Oriented Programming كانت الامور اصعب و تحتاج جهد.
لكن الOOP قربت المسافة بين الواقع و البرمجة و سهلت تمثيل الاشياء او محاكاتها.
قبل ظهور البرمجة الشيئية Object Oriented Programming كانت الامور اصعب و تحتاج جهد.
لكن الOOP قربت المسافة بين الواقع و البرمجة و سهلت تمثيل الاشياء او محاكاتها.
قبل البدء في تصميم أي برنامج, لا بد أن تفهمه في ارض الواقع. في حالتنا هذه لا بد ان تعرف طريقة عمل لعبة الشطرنج. قد تستعين بخبير Domain Expert شخص محترف او هاوي للشطرنج او يمكنك قراءة كتاب عن اللعبة.
لكن هل سيكون ذلك بنفس الكفاءة كما لو كنت انت الخبير؟ سنبدأ بالتحليل.
لكن هل سيكون ذلك بنفس الكفاءة كما لو كنت انت الخبير؟ سنبدأ بالتحليل.
من الصورة نرى لاعبين اثنين Player و لوحة لعب Board و مجموعتين من القطع Piece بلونين مختلفين. هذه الاشياء هي المكونات الرئيسية للعبة Game. و اللعبة طبعاً لها قوانين Rule. هذه المرحلة هي التحليل و بدأنا بالاشياء الكبيرة الواضحة. و يمكن مسك كل مكّون و تحليله الى اشياء اصغر.
لم نتكلم في ماسبق عن اي عملية , فقط كنا نصف الاشياء. الاشياء يمكن ان تتحول الClasses و بمساعدة الComposition يمكن جعل الSquares بداخل الBoard.
و يمكن صنع مصفوفة تشمل اللاعبين Players او List اختر الانسب. كلاس الGame يمكن يشتمل بداخله على كل ماسبق.
و يمكن صنع مصفوفة تشمل اللاعبين Players او List اختر الانسب. كلاس الGame يمكن يشتمل بداخله على كل ماسبق.
نأتي للقطع Piece , لدينا 16 قطعة لكل لاعب. تلك القطع تتشارك في اوصاف properties مثل الاسم , النوع , اللون المكان الابتدائي والحالي. ولها مالك Player وتتشارك في افعال methods فجميعها تتحرك Move و يمكن أن تلتقط Capture قطع الخصم لكن تحركها مختلف و كذلك طريقة الالتقاط.
هنا نستفيد من خاصية التوريث Inheritance. فيمكن انشاء Abstract class نسميه Piece تتورث منه كل القطع. و ننشيء كلاس لكل نوع من انواع القطع, مثلا الKing و الQueen و ننشيء من كل كلاس اوبجكتين و اذا كان من نوع
الجندي Pawn ننشيء 16 اوبجكت .
الجندي Pawn ننشيء 16 اوبجكت .
الفن يكمن في هذي التفاصيل, كيف تحلل بعمق. كيف تنتبه للتفاصيل الدقيقة في البزنس ( المشكلة ) و كيف تعكسها برمجياً. طريقة الDDD اضافت لنا شيء جميل في هذا الخصوص وهو الUbiquitous Language اننا نسمي الامور بمسمياتها بمعنى تلتزم بنفس المسميات في ارض الواقع عندما تكتب الكود . لا تخترع.
لكل قطعة تحركات مسموحه لها, خطوة او خطوات في اتجاه معين على اللوحة او الBoard. تحتاج تفهمها. ولأن الboard عبارة عن مصفوفة فالجبر (رياضيات) يساعدك هنا في كيف تمثل التحرك. مثلا التحرك للأمام يعني الY تنقص مع ثبات X.
التحرك بزاوية لليمين يعني الX و الY تزيد بواحد مع بعض مع كل مربع.
التحرك بزاوية لليمين يعني الX و الY تزيد بواحد مع بعض مع كل مربع.
اثناء التحرك اذا صادفتك في مربع معين قطعة خصم ممكن تأخذها , وعندها بتغير الPiece في الSquare من القطعة الاولى الى القطعة الجديدة و تغير خاصية الموقع الحالي للقطع و تزيد الScore للاعب. و اذا كانت القطعة لك وليست للخصم فيجب التوقف في اي مكان قبلها. هنا عمليات If بسيطة.
اذا بتبني اللعبة بJavaScript مثلا يمكن استخدام خاصية الDrag & Drop لتحريك القطع. ويكون عندك Method في كلاس Rule يتأكد اذا حركة القطعة مسموح بها ام لا. اذا مسموح يتم الDrop واذا لا تفشل و تعود لمكانها.
تقدر ايضاً انك تنشيء method في الRule يعطيك مسبقاً كل التحركات المسموح بها و الممكنة لكل قطعة تبدأ في تحريكها DragStart وهذي ستفيدنا لاحقاً في اضافة الذكاء الاصطناعي للعبة.
ما سبق مجرد Hints عام و مختصر لكيفية برمجة لعبة الشطرنج. هناك تفاصيل كثيرة اكتشفها بنفسك عندما تبدأ. حاول ترتب افكارك قبل كتابة الكود.
في السلسلة القادمة سنرى موضوع اضافة الذكاء الاصطناعي وفكرته البسيطة جداً.
-تمت.
في السلسلة القادمة سنرى موضوع اضافة الذكاء الاصطناعي وفكرته البسيطة جداً.
-تمت.
اعتذر. التحرك بزاوية لليمن من منظور اللاعب الأبيض ( الاسفل) يكون بزيادة الX و انقاص الY بنفس العدد.
جاري تحميل الاقتراحات...