عبد الهادي بهاب
10-01-2018, 06:19 PM
السلام عليكم
كثيرا ما نريد تصميم مسابقات بسيطة تعتمد على الاختيارات
درسنا اليوم حول استعمال الاوتويلاي من اجل ذلك
---------------
افتح مشروع جديد
الان في الصفحة في ONSHOW ضع الكود
Page.ClickObject("xButton1")
وهو كود خاص بشتغيل الاوامر الموجودة في زر XBUTTON
هذا xButton نجعله مخفيا
---------------------
نضع الاسئلة في ليسبوكس بحيث نضع في item السؤال
و نضع في data الاختيارات الثلاثة بحيث نفصل بينها بنقطة (.) و يكون الاختيار الصحيح هو الاول
مثال : في item نضع ( ما عاصمة الجزائر ؟ )
في data نضع ( الجزائر . بشار . اقلي )
http://u.damasgate.com/001/4/lkvyc8kh3wnbiza9re7z.png
--------------------
الان كيف نستدعي الاسئلة من اليستبوكس ؟
ضع في المشروع paragraph لعرض السؤال
ضع 3 من الازرار button واحد اسفل الاخر وهذا لعرض الاختيارات
------------------
الان سنتدعي سؤال من اليسبوكس بطريقة عشوائبة رقمه مثلا igli
اذن نستعمل الدالة math.rondom من 1 الى عدد عناصر اليسبوكس
فيضبح الكود هو :
igli = Math.Random(1,ListBox.GetCount("ListBox1"));
-----------------------
بعد اختيارانا العشوائي للعنصر من اليسبوكس .......نستعدي محتوى item في البارغراف و الاختيارات في الازار
الكود المناسب للسؤال ببساطة هو
qus = ListBox.GetItemText("ListBox1", igli);
Paragraph.SetText("Paragraph1", qus)
اما الاختيارات فيجب تفرقة المحتوى الى 3 بحيث نستعمل دالة البحث لتحديد موضع النقطة الاولى و بالتالي الاختيار الاول سيكون من بداية النص (1) الى موضع النقطة الاولى ناقصا 1 ...........
نحدد موضع التقطة الثانية فيكون الاختيار الثاني من موضع النقطة الاولى الى موضع النقطة الثانية
الاختيار الثالث سيكون من نهاية من موضع النقطة الثانية الى نهاية النص
نستدعي النص من data عبر الكود التالي
ala = ListBox.GetItemData("ListBox1", igli);
الان تبحث عن النقطة الاولى
f1 = String.Find(ala, ".", 1);
اما النقطة الثانية
f2 = String.Find(ala, ".", f1+1);
جميل ..........الان الاختيار الاةل يكون من بادية النص 1 الى f1
ثم نضع النص قس الزر الاول
v1 = String.Mid(ala, 1, f1-1);
Button.SetText("Button1", v1);
بالنسبة للاختيار الثاني
v2 = String.Mid(ala, f1+1, f2-f1-1);
Button.SetText("Button2", v2);
الان نحدد طول النص كله
long = String.Length(ala);
فيكون الاختيار الثالث من f2 الى اخر النص اي الى long
و نضعه في الزر الثالث
v3 = String.Mid(ala, f2+1, long-f2);
Button.SetText("Button3", v3);
--------------------------
الان كي لا يتكرر السؤال نمحيه من ليسبوكس
ListBox.DeleteItem("ListBox1",igli);
-----------------------------
الان يجب ان نخلط موقع الازار كل مرة حتى لا يعرف موقع الزر الاول و الذي هو الجواب الصح
كيف ؟؟؟؟؟؟؟؟
اولا نسجل مواقع الازار في مصفوفة نسميها مثلا pos
pos={};
for i=1,3 do
pos[i] = Button.GetPos("Button"..i);
end
الان نغير المواقع عشوائيا
وفي كل مرة تحذف الموقع من المصفوفة
for i=1,#pos do
ali = Math.Random(1,#pos);
Button.SetPos("Button"..i,pos[ali].X ,pos[ali].Y);
Table.Remove(pos,ali);
end
------------------------------------------
بعد نفاذ عناصر الليسبوكس اي تنتهي الاسئلة
يجب ان تظهر مرة اخرى ..........لذلك سنقوم بلقطة جميلة .......و هي بعد ان تنتهي من كتابة الاسئلة باجابتها
انسخ اليسبوكس كلها فيصبح لدينا اثنين من اليسبوكس listBox1 و lisbox2
الان اذا وصل عدد الاسئلة اقل من 1 اي عدد عناصر اليسبوكس سيقوم الاكود بنسخ كل محتوى اليسبوكس 2 الى الليسبوكس 1
بالكودالتالي :
if ListBox.GetCount("ListBox1") < 1 then
ListBox.DeleteItem("ListBox1", LB_ALLITEMS);
for i = 1 , ListBox.GetCount("ListBox2") do
q = ListBox.GetItemText("ListBox2", i);
a = ListBox.GetItemData("ListBox2", i);
ListBox.AddItem("ListBox1", q, a)
end
end
------
------------------------------------------
نجمع كل ما سبق نضع كل الاكواد في زر xbutton
pos={};
for i=1,3 do
pos[i] = Button.GetPos("Button"..i);
end
---------------
if ListBox.GetCount("ListBox1") < 1 then
ListBox.DeleteItem("ListBox1", LB_ALLITEMS);
for i = 1 , ListBox.GetCount("ListBox2") do
q = ListBox.GetItemText("ListBox2", i);
a = ListBox.GetItemData("ListBox2", i);
ListBox.AddItem("ListBox1", q, a)
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(ala, 1, f1-1);
Button.SetText("Button1", v1);
v2 = String.Mid(ala, f1+1, f2-f1-1);
Button.SetText("Button2", v2);
v3 = String.Mid(ala, f2+1, long-f2);
Button.SetText("Button3", v3);
------------------------------------------
for i=1,#pos do
ali = Math.Random(1,#pos);
Button.SetPos("Button"..i,pos[ali].X ,pos[ali].Y);
Table.Remove(pos,ali);
end
ListBox.DeleteItem("ListBox1",igli);
---------------------------------------
التصحيح : نضع لبيال Label1 و الذي سيعرض فيه عدد الاجابات الصحيحة
الان في الازار الثلاثة :
الزر الاول وهو الذي يحمل الجواب الصح اذا ضغطه يصدر صوت التصفيق و يضاف الى عدد الاجابات الصحيحة
بعد فترة معينة سيقوم النبرنامج بعرض السوال الموالي بتفعيل الزر xButton
نضع في الزر الاول الكود التالي :
Label.SetText("Label1", tonumber(Label.GetText("Label1"))+1);
Audio.Load(CHANNEL_NARRATION, "AutoPlay\\Audio\\yes1.wav", true);
Application.Sleep(1000);
Page.ClickObject("xButton1")
في الزر الثاني و الثالث هو الجواب الخطا يصدر صوت الخطا و بعد فترة يعرض السرال الموالي
نضع فيهما الكود
Audio.Load(CHANNEL_NARRATION, "AutoPlay\\Audio\\no1.wav", true);
Application.Sleep(1000);
Page.ClickObject("xButton1")
----------------------------------------------------------
بعد الانتهاء اضغط معاينة
http://u.damasgate.com/001/4/5msuiuybjhrxa7yp5qzv.gif
ننتظر مشاريعكم و نلتقي بعدها في الاصدار الثاني
تحياتي
كثيرا ما نريد تصميم مسابقات بسيطة تعتمد على الاختيارات
درسنا اليوم حول استعمال الاوتويلاي من اجل ذلك
---------------
افتح مشروع جديد
الان في الصفحة في ONSHOW ضع الكود
Page.ClickObject("xButton1")
وهو كود خاص بشتغيل الاوامر الموجودة في زر XBUTTON
هذا xButton نجعله مخفيا
---------------------
نضع الاسئلة في ليسبوكس بحيث نضع في item السؤال
و نضع في data الاختيارات الثلاثة بحيث نفصل بينها بنقطة (.) و يكون الاختيار الصحيح هو الاول
مثال : في item نضع ( ما عاصمة الجزائر ؟ )
في data نضع ( الجزائر . بشار . اقلي )
http://u.damasgate.com/001/4/lkvyc8kh3wnbiza9re7z.png
--------------------
الان كيف نستدعي الاسئلة من اليستبوكس ؟
ضع في المشروع paragraph لعرض السؤال
ضع 3 من الازرار button واحد اسفل الاخر وهذا لعرض الاختيارات
------------------
الان سنتدعي سؤال من اليسبوكس بطريقة عشوائبة رقمه مثلا igli
اذن نستعمل الدالة math.rondom من 1 الى عدد عناصر اليسبوكس
فيضبح الكود هو :
igli = Math.Random(1,ListBox.GetCount("ListBox1"));
-----------------------
بعد اختيارانا العشوائي للعنصر من اليسبوكس .......نستعدي محتوى item في البارغراف و الاختيارات في الازار
الكود المناسب للسؤال ببساطة هو
qus = ListBox.GetItemText("ListBox1", igli);
Paragraph.SetText("Paragraph1", qus)
اما الاختيارات فيجب تفرقة المحتوى الى 3 بحيث نستعمل دالة البحث لتحديد موضع النقطة الاولى و بالتالي الاختيار الاول سيكون من بداية النص (1) الى موضع النقطة الاولى ناقصا 1 ...........
نحدد موضع التقطة الثانية فيكون الاختيار الثاني من موضع النقطة الاولى الى موضع النقطة الثانية
الاختيار الثالث سيكون من نهاية من موضع النقطة الثانية الى نهاية النص
نستدعي النص من data عبر الكود التالي
ala = ListBox.GetItemData("ListBox1", igli);
الان تبحث عن النقطة الاولى
f1 = String.Find(ala, ".", 1);
اما النقطة الثانية
f2 = String.Find(ala, ".", f1+1);
جميل ..........الان الاختيار الاةل يكون من بادية النص 1 الى f1
ثم نضع النص قس الزر الاول
v1 = String.Mid(ala, 1, f1-1);
Button.SetText("Button1", v1);
بالنسبة للاختيار الثاني
v2 = String.Mid(ala, f1+1, f2-f1-1);
Button.SetText("Button2", v2);
الان نحدد طول النص كله
long = String.Length(ala);
فيكون الاختيار الثالث من f2 الى اخر النص اي الى long
و نضعه في الزر الثالث
v3 = String.Mid(ala, f2+1, long-f2);
Button.SetText("Button3", v3);
--------------------------
الان كي لا يتكرر السؤال نمحيه من ليسبوكس
ListBox.DeleteItem("ListBox1",igli);
-----------------------------
الان يجب ان نخلط موقع الازار كل مرة حتى لا يعرف موقع الزر الاول و الذي هو الجواب الصح
كيف ؟؟؟؟؟؟؟؟
اولا نسجل مواقع الازار في مصفوفة نسميها مثلا pos
pos={};
for i=1,3 do
pos[i] = Button.GetPos("Button"..i);
end
الان نغير المواقع عشوائيا
وفي كل مرة تحذف الموقع من المصفوفة
for i=1,#pos do
ali = Math.Random(1,#pos);
Button.SetPos("Button"..i,pos[ali].X ,pos[ali].Y);
Table.Remove(pos,ali);
end
------------------------------------------
بعد نفاذ عناصر الليسبوكس اي تنتهي الاسئلة
يجب ان تظهر مرة اخرى ..........لذلك سنقوم بلقطة جميلة .......و هي بعد ان تنتهي من كتابة الاسئلة باجابتها
انسخ اليسبوكس كلها فيصبح لدينا اثنين من اليسبوكس listBox1 و lisbox2
الان اذا وصل عدد الاسئلة اقل من 1 اي عدد عناصر اليسبوكس سيقوم الاكود بنسخ كل محتوى اليسبوكس 2 الى الليسبوكس 1
بالكودالتالي :
if ListBox.GetCount("ListBox1") < 1 then
ListBox.DeleteItem("ListBox1", LB_ALLITEMS);
for i = 1 , ListBox.GetCount("ListBox2") do
q = ListBox.GetItemText("ListBox2", i);
a = ListBox.GetItemData("ListBox2", i);
ListBox.AddItem("ListBox1", q, a)
end
end
------
------------------------------------------
نجمع كل ما سبق نضع كل الاكواد في زر xbutton
pos={};
for i=1,3 do
pos[i] = Button.GetPos("Button"..i);
end
---------------
if ListBox.GetCount("ListBox1") < 1 then
ListBox.DeleteItem("ListBox1", LB_ALLITEMS);
for i = 1 , ListBox.GetCount("ListBox2") do
q = ListBox.GetItemText("ListBox2", i);
a = ListBox.GetItemData("ListBox2", i);
ListBox.AddItem("ListBox1", q, a)
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(ala, 1, f1-1);
Button.SetText("Button1", v1);
v2 = String.Mid(ala, f1+1, f2-f1-1);
Button.SetText("Button2", v2);
v3 = String.Mid(ala, f2+1, long-f2);
Button.SetText("Button3", v3);
------------------------------------------
for i=1,#pos do
ali = Math.Random(1,#pos);
Button.SetPos("Button"..i,pos[ali].X ,pos[ali].Y);
Table.Remove(pos,ali);
end
ListBox.DeleteItem("ListBox1",igli);
---------------------------------------
التصحيح : نضع لبيال Label1 و الذي سيعرض فيه عدد الاجابات الصحيحة
الان في الازار الثلاثة :
الزر الاول وهو الذي يحمل الجواب الصح اذا ضغطه يصدر صوت التصفيق و يضاف الى عدد الاجابات الصحيحة
بعد فترة معينة سيقوم النبرنامج بعرض السوال الموالي بتفعيل الزر xButton
نضع في الزر الاول الكود التالي :
Label.SetText("Label1", tonumber(Label.GetText("Label1"))+1);
Audio.Load(CHANNEL_NARRATION, "AutoPlay\\Audio\\yes1.wav", true);
Application.Sleep(1000);
Page.ClickObject("xButton1")
في الزر الثاني و الثالث هو الجواب الخطا يصدر صوت الخطا و بعد فترة يعرض السرال الموالي
نضع فيهما الكود
Audio.Load(CHANNEL_NARRATION, "AutoPlay\\Audio\\no1.wav", true);
Application.Sleep(1000);
Page.ClickObject("xButton1")
----------------------------------------------------------
بعد الانتهاء اضغط معاينة
http://u.damasgate.com/001/4/5msuiuybjhrxa7yp5qzv.gif
ننتظر مشاريعكم و نلتقي بعدها في الاصدار الثاني
تحياتي