هذا الموضوع مثبت لأهميته.
X
X

تصميم مسابقة باستعمال الاختيارات

Collapse
  • تصفية
  • الوقت
  • عرض
مسح الكل
مشاركات جديدة
  • VIP
    • Nov 2018
    • 74

    السلام عليكم

    كثيرا ما نريد تصميم مسابقات بسيطة تعتمد على الاختيارات
    درسنا اليوم حول استعمال الاوتويلاي من اجل ذلك
    ---------------
    افتح مشروع جديد
    الان في الصفحة في ONSHOW ضع الكود
    PHP Code:
    Page.ClickObject("xButton1"
    وهو كود خاص بشتغيل الاوامر الموجودة في زر XBUTTON
    هذا xButton نجعله مخفيا

    ---------------------
    نضع الاسئلة في ليسبوكس بحيث نضع في item السؤال
    و نضع في data الاختيارات الثلاثة بحيث نفصل بينها بنقطة (.) و يكون الاختيار الصحيح هو الاول

    مثال : في item نضع ( ما عاصمة الجزائر ؟ )
    في data نضع ( الجزائر . بشار . اقلي )




    --------------------
    الان كيف نستدعي الاسئلة من اليستبوكس ؟
    ضع في المشروع paragraph لعرض السؤال
    ضع 3 من الازرار button واحد اسفل الاخر وهذا لعرض الاختيارات

    ------------------
    الان سنتدعي سؤال من اليسبوكس بطريقة عشوائبة رقمه مثلا igli
    اذن نستعمل الدالة math.rondom من 1 الى عدد عناصر اليسبوكس
    فيضبح الكود هو :


    PHP Code:
    igli Math.Random(1,ListBox.GetCount("ListBox1")); 
    -----------------------
    بعد اختيارانا العشوائي للعنصر من اليسبوكس .......نستعدي محتوى item في البارغراف و الاختيارات في الازار
    الكود المناسب للسؤال ببساطة هو


    PHP Code:
    qus ListBox.GetItemText("ListBox1"igli);
    Paragraph.SetText("Paragraph1"qus
    اما الاختيارات فيجب تفرقة المحتوى الى 3 بحيث نستعمل دالة البحث لتحديد موضع النقطة الاولى و بالتالي الاختيار الاول سيكون من بداية النص (1) الى موضع النقطة الاولى ناقصا 1 ...........
    نحدد موضع التقطة الثانية فيكون الاختيار الثاني من موضع النقطة الاولى الى موضع النقطة الثانية
    الاختيار الثالث سيكون من نهاية من موضع النقطة الثانية الى نهاية النص


    نستدعي النص من data عبر الكود التالي
    PHP Code:
    ala ListBox.GetItemData("ListBox1"igli); 
    الان تبحث عن النقطة الاولى
    PHP Code:
    f1 String.Find(ala"."1); 
    اما النقطة الثانية
    PHP Code:
    f2 String.Find(ala"."f1+1); 
    جميل ..........الان الاختيار الاةل يكون من بادية النص 1 الى f1
    ثم نضع النص قس الزر الاول


    PHP Code:
    v1 String.Mid(ala1f1-1);          
    Button.SetText("Button1"v1); 
    بالنسبة للاختيار الثاني
    PHP Code:
    v2 String.Mid(alaf1+1f2-f1-1);      
    Button.SetText("Button2"v2); 
    الان نحدد طول النص كله
    PHP Code:
    long String.Length(ala); 
    فيكون الاختيار الثالث من f2 الى اخر النص اي الى long
    و نضعه في الزر الثالث


    PHP Code:
    v3 String.Mid(alaf2+1long-f2);    
    Button.SetText("Button3"v3); 
    --------------------------
    الان كي لا يتكرر السؤال نمحيه من ليسبوكس
    PHP Code:
    ListBox.DeleteItem("ListBox1",igli); 
    -----------------------------
    الان يجب ان نخلط موقع الازار كل مرة حتى لا يعرف موقع الزر الاول و الذي هو الجواب الصح
    كيف ؟؟؟؟؟؟؟؟


    اولا نسجل مواقع الازار في مصفوفة نسميها مثلا pos

    PHP Code:
    pos={};
    for 
    i=1,do
    pos[i] = Button.GetPos("Button"..i);
    end 
    الان نغير المواقع عشوائيا
    وفي كل مرة تحذف الموقع من المصفوفة


    PHP Code:
    for i=1,#pos do
    ali Math.Random(1,#pos);
    Button.SetPos("Button"..i,pos[ali].,pos[ali].Y);
    Table.Remove(pos,ali);
    end 
    ------------------------------------------
    بعد نفاذ عناصر الليسبوكس اي تنتهي الاسئلة
    يجب ان تظهر مرة اخرى ..........لذلك سنقوم بلقطة جميلة .......و هي بعد ان تنتهي من كتابة الاسئلة باجابتها
    انسخ اليسبوكس كلها فيصبح لدينا اثنين من اليسبوكس listBox1 و lisbox2

    الان اذا وصل عدد الاسئلة اقل من 1 اي عدد عناصر اليسبوكس سيقوم الاكود بنسخ كل محتوى اليسبوكس 2 الى الليسبوكس 1
    بالكودالتالي :


    PHP Code:
    if ListBox.GetCount("ListBox1") < 1  then
    ListBox
    .DeleteItem("ListBox1"LB_ALLITEMS);
      for 
    ListBox.GetCount("ListBox2") do
     
    ListBox.GetItemText("ListBox2"i);
     
    ListBox.GetItemData("ListBox2"i);
     
    ListBox.AddItem("ListBox1"qa)
      
    end
    end
    ------ 
    ------------------------------------------
    نجمع كل ما سبق نضع كل الاكواد في زر xbutton

    PHP Code:
    pos={};
    for 
    i=1,do
    pos[i] = Button.GetPos("Button"..i);
    end
    ---------------
    if 
    ListBox.GetCount("ListBox1") < 1  then
    ListBox
    .DeleteItem("ListBox1"LB_ALLITEMS);
      for 
    ListBox.GetCount("ListBox2") do
     
    ListBox.GetItemText("ListBox2"i);
     
    ListBox.GetItemData("ListBox2"i);
     
    ListBox.AddItem("ListBox1"qa)
      
    end
    end
    ---------------------
    igli Math.Random(1,ListBox.GetCount("ListBox1"));
    qus ListBox.GetItemText("ListBox1"igli);
    Paragraph.SetText("Paragraph1"qus)
    -------------------------------------
    ala ListBox.GetItemData("ListBox1"igli);
    f1 String.Find(ala"."1);
    f2 String.Find(ala"."f1+1);
    long String.Length(ala);
    v1 String.Mid(ala1f1-1);          
    Button.SetText("Button1"v1);
    v2 String.Mid(alaf1+1f2-f1-1);      
    Button.SetText("Button2"v2);
    v3 String.Mid(alaf2+1long-f2);    
    Button.SetText("Button3"v3);
    ------------------------------------------
    for 
    i=1,#pos do
    ali Math.Random(1,#pos);
    Button.SetPos("Button"..i,pos[ali].,pos[ali].Y);
    Table.Remove(pos,ali);
    end

    ListBox
    .DeleteItem("ListBox1",igli); 
    ---------------------------------------
    التصحيح : نضع لبيال Label1 و الذي سيعرض فيه عدد الاجابات الصحيحة

    الان في الازار الثلاثة :
    الزر الاول وهو الذي يحمل الجواب الصح اذا ضغطه يصدر صوت التصفيق و يضاف الى عدد الاجابات الصحيحة
    بعد فترة معينة سيقوم النبرنامج بعرض السوال الموالي بتفعيل الزر xButton
    نضع في الزر الاول الكود التالي :


    PHP Code:
    Label.SetText("Label1"tonumber(Label.GetText("Label1"))+1);
    Audio.Load(CHANNEL_NARRATION"AutoPlay\\Audio\\yes1.wav"true);
    Application.Sleep(1000);
    Page.ClickObject("xButton1"
    في الزر الثاني و الثالث هو الجواب الخطا يصدر صوت الخطا و بعد فترة يعرض السرال الموالي

    نضع فيهما الكود


    PHP Code:
    Audio.Load(CHANNEL_NARRATION"AutoPlay\\Audio\\no1.wav"true);
    Application.Sleep(1000);
    Page.ClickObject("xButton1"
    ----------------------------------------------------------
    بعد الانتهاء اضغط معاينة



    ننتظر مشاريعكم و نلتقي بعدها في الاصدار الثاني

    تحياتي
  • المسؤول الفني
    • Sep 2018
    • 19637

    #2
    يتبع:
    المشاركة الأصلية بواسطة عبد الهادي بهاب
    الاصدار الثاني :

    الان نريد ادخال تعديلات على المشروع
    ---------------
    اذا ضغط الزر الصح يصبح الزر اخضر ......................
    و اذا ضغط على الخطأ يصبح لونه الزر احمر ............و يظهر الزر الصح بلونه الاخضر
    في السؤال الموالي تعود الازار الى لونها الاول
    ------------------
    نتفق على المسميات :
    يلومنا ثلاثة ازرار الزر الاصلي يمون تسميته في محلد الازار buttons ....... باسم gris


    زر اخر بلون احمر باسم red

    زر اخر اخضر باسم green

    ------------
    الان في الزر الاول نستبدل الكود الموحود بالتالي :

    PHP Code:
    Label.SetText("Label1"tonumber(Label.GetText("Label1"))+1);
    Audio.Load(CHANNEL_NARRATION"AutoPlay\\Audio\\yes1.wav"true);
    Button.SetProperties(this,{ButtonFile "AutoPlay\\Buttons\\green.btn"});
    Application.Sleep(1000);
    Page.ClickObject("xButton1"
    في الزر الثاني و الثالث نضع الكود التالي :
    PHP Code:
    Audio.Load(CHANNEL_NARRATION"AutoPlay\\Audio\\no1.wav"true);
    Button.SetProperties(this,{ButtonFile "AutoPlay\\Buttons\\red.btn"});
    Button.SetProperties("Button1",{ButtonFile "AutoPlay\\Buttons\\green.btn"});
    Application.Sleep(1000);
    Page.ClickObject("xButton1"
    ---------------------------
    في زر عرض الاسئلة في xButoon نضيف في الاعلى

    PHP Code:
    for i=1,do
    Button.SetProperties("Button"..i,{ButtonFile "AutoPlay\\Buttons\\gris.btn"});
    end 
    -----------------------------
    ثم بالمعاينة



    بالتوفيق
Working...
X