السلام عليكم ورحمة الله و بركاته
سأحاول في هذا الموضوع وضع مجموعة من التطبيقات المتنوعة و البسيطة التي ستمكن إن شاء الله المبرمجين من تعلم لغة البرمجة الMFC بسهولة.
السلام عليكم ورحمة الله و بركاته
تم تعديل هذه المشاركة بواسطة بن العيد في 24 ديسمبر 2008 في 18:07
السلام عليكــم ورحمـة الله وبركاتــه ،،
تم تعديل هذه المشاركة بواسطة بن العيد في 18 مايو 2009 في 14:20
اللعبة تعتمد على Dialogs
هذه هي النافذة الرئيسية:
زر Start يقوم ببداية اللعبة وذلك برسم اللوحة الزرقاء اولاً ثم مناداة النافذة Add Ball .
كود اللعبة موجود داخل دالة زر Start two players
ال classes التي كتبتها هي
Ball.h
وتحتوي على متغير state لتحديد ما اذا كانت الكرة لللاعب الاول او الثاني
والمتغيران p1 و p2 من نوع CPoint للاحداثيات (top-left and bottom-right points)
Board.h
وتحتوي على مصفوفة ذات بعدين من نوع Ball وحجم ROW & COL
ومصفوفة اخرى ذات بعد واحد لتحديد ارتفاع كل عامود (عدد الكرات الموجودة داخل كل عامود حتى تساعدني في اضافة كرات جديدة)
addBall.h
وهي class للنافذة الخاصة بادخال رقم العامود (اتوقع ان لكل Dialog لابد من عمل class؟)
وباقي الكود موجود في connect_fourDlg وهي class الاساسية
كما تلاحظون وجود كلمة Player & CPU وايضا في الكود يوجد Player & CPU كمتغيرات enum ، لاني في البداية كان الهدف عمل لعبة بين المستخدم والكمبيوتر باستخدام الذكاء الاصطناعي ، وحولتها الى لاعبين حتى تكون اسهل. لذلك Player يعني اللاعب الاول و CPU تعني اللاعب الثاني.
اللعبة تحتاج الى التطوير
فانا احاول ان اجعل اختيار العامود باستخدام الفأره ، فالمستخدم يضغط على العامود الذي يريد وضع الكرة فيه
لكن واجهتني بعض المشاكل ، فلا استطيع ارسال احداثية زر الفأره عند النقر :( اذا كان لديكم بعض النصائح متعلقة بهذا الموضوع ارجو ان تكتبوها
ايضاً هناك فكرة وهي وضع نص لتحديد دور اللاعب ، فعندما يكون دور اللاعب الاول تتم كتابة كلمة "دور اللاعب الاول" على النافذة الاساسية مثلا او في نافذة Add Ball
بالنسبة لمن يريد تشغيل اللعبة على جهازه ، فسوف يواجهه مشكلة تحميل صورة ال Board
فعندما تقوم بتشغيل ال solution لاول مره سوف يظهر لك خطأ متعلق ب path الخاص بالصورة connect_four_board_new.bmp
الحل هو انك تقوم بتعديل ال path ، الصورة موجودة في المرفقات وهي مضغوطة ، امتدادها bmp لان ال visual لا يقبل غير هذا الامتداد!
( ألا توجد طريقة لدمج الصورة مع البرنامج حتى لا أقلق مستقبلاً عن وجود الصورة وال path .. إلخ ؟)
هذا هو البرنامج كاملاً ، لا تنس ان تحمل الصورة قبل ذلك لانه عند تشغيل ال solution سوف يخبرك ان هناك مشكلة في path الخاص بالصورة فيجب ان تقوم بتحديده.
ارجو ان يكون البرنامج مفيد لكم
في حال واجه اي شخص مشكلة في التشغيل الرجاء طرح المشكلة هنا
وايضا اذا استطاع شخص تشغيل اللعبة الرجاء اخباري بذلك
احب ان انبه عن مشكلة في الرسم
بعد الضغط على زر start two players حاول تحريك نافذة Add Ball على النافذة الاساسية ، سوف تلاحظ ان الصورة قد انمسحت :( ماهو الحل ؟
تم تعديل هذه المشاركة بواسطة بن العيد في 29 يوليو 2008 في 11:35
اقتباسعد الضغط على زر start two players حاول تحريك نافذة Add Ball على النافذة الاساسية ، سوف تلاحظ ان الصورة قد انمسحت :( ماهو الحل ؟
ضع كود رسم الصور في الحدث: OnPaint هذا الحدث ينطلق كلما احتاجت الشاشة للرسم من جديد.
صعبه افضل كود الرسم واضع جزء منه في دالة Start والجزء الآخر في دالة onPaint :(
الجزء الاول وهو رسم الكرات( وهذا الشيء يحدث اكثر من مره ) ، والجزء الثاني هو رسم اللوحة ( يحدث مره واحدة فقط عند بداية اللعب) .
جربت طريقتك و وضع كود رسم اللوحة داخل onpaint :
void Cconnect_fourDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
CRect myRect( CPoint(0,0), CPoint(700,600));
CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP3);
CBrush myBrush( &bitmap);
dc.FillRect( &myRect, &myBrush);
}
else
{
CDialog::OnPaint();
}
}ولم يتغير شيء مطلقلاً :(
تم تعديل هذه المشاركة بواسطة مجلـد جديـد في 4 يوليو 2008 في 22:08
اينكم ؟؟؟ ماهو الحل :(
فهدالشلوي كتب:لا تضعه داخل الشرط ضعه في الأعلى.
:D
بالفعل اشتغل البرنامج بشكل ممتاز ، شكرا لك اخي فهد :)
هل هذا يعني ان اي كود للرسم لابد ان يكون داخل دالة OnPaint ؟
اذا كان كذلك
فلا بد من تعديل الكود من جديد حتى يكون رسم الكرات واللوحة في دالة نسميها مثلا drawBoard تقوم برسم الكرات واللوحة.
ألا يمكن ان تحدث هذه المشكلة : رسم اللوحة فوق الكرات ؟
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii