برمجة لعبة xo باستخدام الماتلاب


(farisislam) #1

بسم الله الرحمن الرحيم
هذا برنامج بسيط أردت المشاركة فيه أرجو أن لاتبخلوا علي بالأسئلة والاقتراحات والانتقادات:
ما رأيك أن نبدأ ببرمجة لعبة xo لقد وضعت لها رسمة بدائية حتى نتعرف ماذا نريد أن نفعل

خطوات العمل :
 افتح نافذة gui جديدة وضع فيها تسعة أزرار pushbutton كما في الشكل الرائع السابق
 ادخل على menu editor وقم بصنع قائمة file تحتها new و exit
 احفظ الشكل وادخل إلى ملف البرمجة واكتب البرنامج لوحدك لإنه لم يكن لدي وقت لكتابة هذا البرنامج وأرسله على بريدي الإلكتروني moufackshamma@yahoo.com لكي أنزله في النوتة أرجو ان لا تتأخر
 جزاك الله خيرا على إرسالك البرنامج سأبدأ الآن بشرحه بخطوات بكيفية التفكير بتبسيط الأمور !!!

  1. نبرمج الزر بحيث إذا ضغطت عليه يعطيني o مثلا فذلك سيكون على الشكل التالي :
set(handles.pushbutton1,'string','o')
  1. الآن نفكر بطريقة تمكننا من معرفة أي لاعب يلعب الآن فنضع متحول في الـopeningFcn وليكن b ونجعله يساوي الواحد فنكتب مايلي:
global b 
b=1;

  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

  1. نقوم بنسخ هذه البرمجة إلى كل الأزرار وضع في البداية global b ليتعرف كل تابع على قيمة b الأخيرة
  2. نضع في الـopeningFcn
global b
b=1;

  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 

  1. سنبرمج زر new file وعمله أن يقوم بمسح كل ماعلى الأزرار من أحرف وأن يجعل قيمة b=1
global b 
b=1
for i=1:9
    v=eval(['handles.pushbutton' num2str(i)])
    set(v,'string','')
end

  1. الآن بقي أن نحدد الفائز حالة فوزه سنؤجله قليلا سأشرح الآن كيف يتم تلوين زر علما أن الماتلاب 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);

  1. الآن عند استدعائه تكتب مثلا
colory(handles.pushbutton1,[0.4 .5 1]);
  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