بسم الله الرحمن الرحيم
هذا برنامج بسيط أردت المشاركة فيه أرجو أن لاتبخلوا علي بالأسئلة والاقتراحات والانتقادات:
ما رأيك أن نبدأ ببرمجة لعبة xo لقد وضعت لها رسمة بدائية حتى نتعرف ماذا نريد أن نفعل
خطوات العمل :
افتح نافذة gui جديدة وضع فيها تسعة أزرار pushbutton كما في الشكل الرائع السابق
ادخل على menu editor وقم بصنع قائمة file تحتها new و exit
احفظ الشكل وادخل إلى ملف البرمجة واكتب البرنامج لوحدك لإنه لم يكن لدي وقت لكتابة هذا البرنامج وأرسله على بريدي الإلكتروني moufackshamma@yahoo.com لكي أنزله في النوتة أرجو ان لا تتأخر
جزاك الله خيرا على إرسالك البرنامج سأبدأ الآن بشرحه بخطوات بكيفية التفكير بتبسيط الأمور !!!
- نبرمج الزر بحيث إذا ضغطت عليه يعطيني o مثلا فذلك سيكون على الشكل التالي :
set(handles.pushbutton1,'string','o')
- الآن نفكر بطريقة تمكننا من معرفة أي لاعب يلعب الآن فنضع متحول في الـopeningFcn وليكن b ونجعله يساوي الواحد فنكتب مايلي:
global b
b=1;
- الآن في كل زر يجب فحص إن كانت b=1 دلالة على اللاعب الأول أو b=2 دلالة على الثاني وتغيير الدور
if b==1
set( handles.pushbutton1,'string','o')
b=2;
elseif b==2
set( handles.pushbutton1,'string','x')
b=1;
End
- نقوم بنسخ هذه البرمجة إلى كل الأزرار وضع في البداية global b ليتعرف كل تابع على قيمة b الأخيرة
- نضع في الـopeningFcn
global b
b=1;
- الآن إذا ضغط المستثمر على زر قد ضغط عليه من قبل فيجب أن لاتتغير الحرف الموجود على الزر فالحل هاهنا :
if isempty(get(handles.pushbutton1,'string'))
if b==1
set( handles.pushbutton1,'string','o')
b=2;
elseif b==2
set( handles.pushbutton1,'string','x')
b=1;
end
end
- سنبرمج زر new file وعمله أن يقوم بمسح كل ماعلى الأزرار من أحرف وأن يجعل قيمة b=1
global b
b=1
for i=1:9
v=eval(['handles.pushbutton' num2str(i)])
set(v,'string','')
end
- الآن بقي أن نحدد الفائز حالة فوزه سنؤجله قليلا سأشرح الآن كيف يتم تلوين زر علما أن الماتلاب 7 لا يمكن تلوين الزر بالطريقة الاعتيادية سيكون البرنامج التالي برنامجا تكتبه بشكل مستقل في mfile
function n=colory(m,b)
set(m,'units','pixels');
f=get(m,'position');
v(:,:,1)=b(1)*ones(f(4)-5,f(3)-5);
v(:,:,2)=b(2)*ones(f(4)-5,f(3)-5);
v(:,:,3)=b(3)*ones(f(4)-5,f(3)-5);
set(m,'cdata',v);
- الآن عند استدعائه تكتب مثلا
colory(handles.pushbutton1,[0.4 .5 1]);
- برمجة زر exit تكتب في مكان برمجته
delete(handles.figure1)
برمجة الزر الأول ستكون بشكل نهائي كالتالي :
global b
if isempty(get(handles.pushbutton1,'string'))
if b==1
set( handles.pushbutton1,'string','o')
b=2;
elseif b==2
set( handles.pushbutton1,'string','x')
b=1;
end
end
for i=1:9
v=eval(['handles.pushbutton' num2str(i)])
n{i,1}=get(v,'string')
end
if (strcmp(n{1,1},'o')==1 & strcmp(n{2,1},'o')==1 & strcmp(n{3,1},'o')==1 ) | (strcmp(n{1,1},'x')==1 & strcmp(n{2,1},'x')==1 & strcmp(n{3,1},'x')==1)
msgbox('you win','mabrook')
end
if (strcmp(n{1,1},'o')==1 & strcmp(n{4,1},'o')==1 & strcmp(n{7,1},'o')==1 ) | (strcmp(n{1,1},'x')==1 & strcmp(n{4,1},'x')==1 & strcmp(n{7,1},'x')==1)
msgbox('you win','mabrook')
end
if (strcmp(n{1,1},'o')==1 & strcmp(n{5,1},'o')==1 & strcmp(n{9,1},'o')==1 ) | (strcmp(n{1,1},'x')==1 & strcmp(n{5,1},'x')==1 & strcmp(n{9,1},'x')==1)
msgbox('you win','mabrook')
end
end