بسم الله الرحمن الرحيم
السلام عليكم يا إخوتي الكرام وأعتذر عن الأنقطاع الطويل عليكم وذلك بسبب الظروف التي مررت بها مؤخراً إلى جانب أشياء أخرى ومع هذا لم أنساكم بعد
لإنني شخص يفي بوعوده,دعونا من هذا الكلام الأن وأرجو أن تركّزوا معي في هذا الدرس لإنه كل شيء في لغات البرمجه بتتمحور على هذه الأشياء بشكل عام
condition statements
أعتقد بإنّكم تعرفوا جمل الشرط if ..........else..........endif and if............. then ربما صياغتها قد تكون مختلفه في بالمقارنه
مع لغات برمجه أخرى, لكن الفكره لاتختلف أبداً كما يُقال المثل (وجهان لعمله واحده).
سأوضّح سبب الأختلاف في مثال بسيط
في الــــvisual basic
أولاً يتم توقيع أداة النص text مع أداة command ومن ثم نضع الكود الأتي في أداة command تحت الحدث click أو أي شيء تريد
كود PHP:
if text1="123456" then
msgbox"Correct code"
else
msgbox"Wrong code"
endif
في الــdark basic
كود PHP:
msg$ = "hi there"
print msg$
if msg$="hi there" then
wait 1000
cls
print "exist"
wait key
or
msg$ = "hi there"
print msg$
if msg$="hi there"
wait 1000
cls
print "exist"
else
print"buz off"
endif
wait key
# ملاحظه:
else
لن يكون لها غرض في المثال الثاني من الدارك والسبب هو لعدم وجود حدث معيّن حتى يتم التخيير من أمرين لذا لاتستغربوا من الأمر
وسيتم مناقشته لاحقاً.
# ماذا نلاحظ في الأمثله السابقه؟
نلاحظ إن في الــvisual basic قد تم الجمع في كلا الأسلوبين الذي أستخدمناهم في الدارك
أي إن في الدارك نستخدم if .......then وإما if........else........endif وهذا ما أقصده من خلال كلامي فيما سبق عن إختلاف أسلوب
سياغة جمل الشرط بأساليب مختلفه ولكن الغرض واحد.........يبدوا إنني تماديت في الكلام والأن هيا لنباشر في الشرح.
If.........else..........endif & if .........then
فيما سبق أعتقد إنه توضحت الفكره شويّه عن إستخدام هذه الجمل الشرطيّه,أما الأن سيتم مناقشتها بشكل أوضح ومبسّط أكثر إن شاء الله.
هذه الجُمل تكون فعّاله أكثر عندما يتم ربطها أو أستخدامها مع نوع أخر من الجُمل ,هنا سنرى قوتها وفعاليتها.
كود PHP:
msg$ = "hi there"
do
input "Set (hi there) statment int field ",msg$
if msg$="hi there"
wait 1000
set cursor 0,20
print "exist"
else
print "buz off"
wait 1000
end
endif
loop
نلاحظ عند تطبيق هذا المثال بشكل صحيح أي تنفيد ما طُلب منك بحسب السؤال سيتم ظهور رساله وتخبرك إنه النص المدخل موجود (Exist)
مالم سيتم طباعة أبتعد وستخرج من البرنامج بعد ثانيه(buzz off)
لإن اّليّة عمل جملة الشرط هذه هي إختبار نوعين من المدخلات إن كان المُدخل صحيح أو الحدث الذي أنت وضعته سيتم نقلك إلى المنطّقه أو الحدث الذي تريده
مالم سيتم حدث معيّن, أما النوع الأخر من الجُمل (If.........then)لا تتوفّر له هذه الخاصيّه
أي إنه حالما تضع شرط سينفّذه ولن يخيّرك بين أمرين.
مثـــــال:-
كود PHP:
msg$ = "hi there"
do
input "Set (hi there) statment int field ",msg$
if msg$="hi there" then
wait 1000
set cursor 0,20
print "exist"
loop
ستلاحظ عند كتابة المطلوب أو أي شيء أخر سيتم ظهور النص(exist),وهذه مشكله ويمكن التخفيف من ضررها أي تحسينها لعملها بشكل مش بطّال
وذلك بإستخدامgoto
كيــــــــــف؟
أي إنه لكي نتفاداها نرفق بعد الشرط goto أي الذهاب إلى المكان الذي أنت تريده أن ينفّذ من ثم العوده إلى حيث بدأت
مثال توضيحي
كود PHP:
up:
input "Set (hi there) statment int field ",msg$
if msg$= "hi" then
goto there
if msg$= "go away" then
goto there2
there:
set cursor 0,20
print "exist"
goto up
there2:
set cursor 0,20
print "Buzz off"
goto up
wait key
عند التنفيذ سيتم إدخال الكلمه المطلوبه في نافذة الكود ليتم الحصول على النتيجه المُرضيّه والعوده إلى حيث بدأت العمليّه أما إن قمت بإزالة
goto up
ستلاحظ بإنه يتخطى النص المراد ظهوره في الشاشه ويتم ظهور أخر نص بحكم إنه مقيد بــgoto up سواء كانت موجوده أم لا
جرب تزيل goto up في أول نقله وستلاحظ ماذا سيحدث
أي إنه بإزالتها ستم عرض النص الذي يليها مباشرهم
ومع هذا الخطاء موجود..............ماهــــــــو؟
جرب تدخل كلمه أخرى عدا الذي يتم طلبهم وشوفوا ماذا سينتج.
نعم هذا هو الخطاء سيكتب أول جمله وهي (exist).
والأن بمجرد ما أقولكم الأتي البعض سيغضب ومنهم من ستفهّم الأمر ^_____________^
الأن يمكن تجنّب هذه المشكله كامله بهذا الكود
كود PHP:
up:
input "Set (hi there) statment int field ",msg$
if msg$= "hi" then
goto there
if msg$<> "hi" then
goto there2
there:
set cursor 0,20
print "exist"
wait 1000
cls
goto up
there2:
set cursor 0,20
print "Buzz off"
wait 1000
cls
goto up
wait key
قوموا بلصقه وجربوا أن تكتبوا العباره الصحيحه أو أي عباره في ذهنكم ولاحظوا ماذا سيحصل,إشارة <>معناها لايساوي
أي إنه أي كلمه عدا exist سيتم نقلك إلى كلمة buzz off .
من سيتفهّم الأمر هو الشخص الذي مُلم في هذا الموضوع من قبل أما من سيغضب هو الشخص الذي مازال يتعلّم وسيقوللماذا لم يقولها من البدايه ويخلصنا)
السبب هو إنني أريد لأخوتي أن يحيطوا بالموضوع بشكل كبير وكلما تشعّب الموضوع وزادت إحاطتك به قلّت و قوعك بالأخطاء أخي الكريم.
# ملاحظه:
يمكنك وضع الكود السابق في جملة دوران do.....loop .
هناك بعض إضافات من خلالها تحسن عمل جُمل الشرط وهي
AND & OR
هذه الأوامر من شأنها تحسين جُمل الشرط ومنافعها كبيره
OR:
وظيفتها هي أن تخيّرك بين شرطين لحصول حدث أو أمر معيّن
مثـــــــال:-
كود PHP:
up:
input "Set (hi there) statment int field ",msg$
if msg$= "hi" or msg$= "hello" then
goto there
if msg$<> "hi" then
goto there2
there:
set cursor 0,20
print "exist"
wait 1000
cls
goto up
there2:
set cursor 0,20
print "Buzz off"
wait 1000
cls
goto up
loop
هو نفس المثال السابق وإنما أضفنا السطر or msg$= "hello" بعد الشرط الأول وبذلك يتم التخيير بين نوعين من المٌدخلات
ويمكنك أيضاً أن تجعل المدخلات متعدده إي إنه لايحصرك بين عدد معين من المدخلات
or msg$= "hello" or msg$= "jackass" or msg$="welcom"..................elc
AND:
أما بالنسبه لأمر And فهو كثيراً مايستخدم في الأحداث أو القيم
مثــــــــال:-
كود PHP:
up:
if upkey()=1 and inkey$()="X" then
TEXT 10,20,"Up arrow & X r pressed"
WAIT 100
cls
goto up
WAIT KEY
إن تم الضغط على زرّ ي الــx و ^(السهم للأعلى) في نفس الوقت ستظهر لك رساله وتخبرك بإنه العمليّه صحيحه
# ملاحظه:-
ألم تلاحظوا عدم الخروج من نافذة البرنامج على الرغم من وجود أمر Wait key .
ذلك بسبب GOTO
وهنا جمله يمكنها التحسين في العمل وهي
select .......case.........endselect.........endcase.........Case default
select .......case.........endselect.........endcase.........Case default :
هذا النوع من جمُل الشرط يساعد على الأختيار بين عدة أمور أثناء تنفيذ الشرط بحسب القيم المُدخله أو الأحداثوهنا مثال يساعد على فهم الأمور بشكل أوضح
الكود شويّه طويل(قوم بلصق الكود وحاول أن تضع رقم من الصفر إلى العشره لتشاهد الجربنه بتاعك..........أقصد علامتك ^_^...
مثـــــــــــال:-
كود PHP:
up:
input "your mark ",m
if m=10 or m=9 or m=8 or m=7 or m=6 or m=5 or m=4 or m=3 or m=2 or m=1 or m=0 then
select m
case 10
print "Exellent";
wait 2000
cls
goto up
endcase
case 9
print "Imprisseve";
wait 2000
cls
goto up
endcase
case 8
print "Very good";
wait 2000
cls
goto up
endcase
case 7
print "Good";
wait 2000
cls
goto up
endcase
case 6
print "Not bad";
wait 2000
cls
goto up
endcase
case 5
print "Acceptable";
wait 2000
cls
goto up
endcase
case 4
print "Failed";
wait 2000
cls
goto up
endcase
case 3
print "Dump ass";
wait 2000
cls
goto up
endcase
case 2
print "Empty tank";
wait 2000
cls
goto up
endcase
case 1
print "No comment";
wait 2000
cls
goto up
endcase
case 0
print "grban";
wait 2000
cls
goto up
endcase
endselect
كما يمكن الأستغناء عن هذا النوع من الجُمل فهو لايدخل بكثره في التطبيقات
Looping statements
هنا سنعرف كيفية التعامل مع جمل التكرار ومنها :
For...........next
While..........endwhile
Do.............loop
Repeat................until
For ...............next:
هذا النوع من جُمل الدوران محدود أي إنه عدد دورات التنفيد فيه يتم وضعها بحسب إحتياجاتك وتساعد كثيراً في العمل(عمليّه)ومتعددة الأستخدام.
ولها فوائد كثيره وسنذكرها
مثـــــــال:-
كود PHP:
for a= 1 to 5
print "this statement will repeated in 5 lines"
wait 100
next a
wait key
في هذا الكود سيتم تكرار النص داخل جملة التكرار for........next خمس مرّات ,لاحظ المتغيّر a كُتب بجانبه من 1 إلى 5 وهي عدد
الدورات وتنفيد أمر الطباعه في كل دوره وبين كل دوره وأُخرى سيتأخر 100 مللي ثانيه لكي تتمكن من رؤية التنفيد بشكل بطيء لكي تتمكن من فهمه
لكن إن أزلت أمر wait 100 سيتم تنفيذهم بسرعه لدرجة إنهم سيظهروا وكإنهم عباره واحده(سطور الطباعه).
وهنا إستخدام أخر لجملة الدوران for.....next .
كود PHP:
for a= 1 to 100
ink rgb(0,a,0),rgb(0,0,0)
print "this statement will repeated in 5 lines"
wait 100
next a
wait key
ستلاحظوا عند التنفيذ شاشه سوداء ولكن إنتظروا شويّه...............
أها بدأت الكتابه بالظهور وباللون الأخضر ..........كيـــــف؟
لاحظوا هذا السطر الموجود في نطاق جملة الدوران
ink rgb(0,a,0),rgb(0,0,0)
في قيم الألوان المتعلّقه في لون الخط ثاني قيمه وهي اللون الأخضر أستبدلناها بالمتغيّر a ,أعتقد إنه الأن عرفتم سبب بروز لون الخط بعد فتره
من تنفيذ الأكواد وهو بسبب مضاعفة القيمه للمتغير a في اللون الأخضر مع كل دوره(يمكنكم تجربتها مع باقي الألوان).
وهنا مثال أخر سيساعدكم مستقبلاً في تصميم لجزء معيّن من لعبه بمجرد مشاهدتكم لعمله في الواقع المثال موجود وحتفهموا قصدي.
كود PHP:
color backdrop rgb(0,0,0)
for a= 1 to 5
make object sphere a,3
color object a,rgb(0,255,0)
position object a,rnd(3),rnd(3),rnd(3)
wait 200
next a
wait key
# ملاحظه:
إن قمت بعمل object في جملة for.....next تأكد من إن جميع الأضافات لهذا الــobject لهم نفس المتغيّر كما في المثال أعلاه
لإنه لو بتريدوا تلوين الــobjects الناتجه عن جملة الدوران سيطلب رقم الـobject وإن تم تحديد رقم محصور من 1 إلى 5 لن يعمل البرنامج
لإن التغيير يطبّق على كافة الobjects في اّن واحد لذا ستواجه الكثير من الأوامر الذي تطلب رقم الobject هنا يجب وضع المتغيير الرئيسي لجملة الدوران
في مكان رقم الــobject لكي يتم التعامل مع كافة الobjects في نطاق الجمله.
While(condition)...........endwhile:
هذا النوع من الجمل فعّال أكثر عندما يكون داخل جملة Do.......loop ,بإختصار شديد هذا النوع من الجُمل لايتم تنفيذ محتواه إلا إن كان الشرط صحيح
مثــــــــال:-
كود PHP:
do
WHILE upkey()=1
print "up key r pressed"
wait 100
ENDWHILE
loop
في السطر الأول كُتب (طالما زر السهم للأعلى مضغوط أطبع الرساله "الزر للأعلى مضغوط") 1 هي قيمه تدل على إن الزر مضغوط.
السطر الثالث هو للأنتظار عند كل ضغطه يتم تكرار الجُمل.
أو يمكن كتابتها بالشكل التالي حتى لاتظهر كل تلك الجُمل بل جمله واحده فقط.
كود PHP:
do
up:
WHILE upkey()=1
print "up key r pressed"
wait 100
cls
goto up:
ENDWHILE
loop
في هذا الكود إضافه بسيطه والغرض منها التحسين
السطر الذي يلي wait 100
cls يتم مسح الشاشه عندما تكون قيمة الضغط هي الصفر وتذهب إلى أعلى الكود حتى يتم التنفيذ من جديد ........
Repeat..........until(contitio)
هذه عكس الجمله الأولى ,أي إنها سيتم فيها الدوران لغاية شرط معيّن سيخرج من جملة
repeat.......until
مثــــــــــال:-
كود PHP:
repeat
print "fsafsdfdsf"
wait 200
until spacekey()=1
في هذا المثال سيتم تنفيذ أمر الطباعه حتى يتم الضغط على زر space هنا سيتم الخروج من الجمله والبرنامج كمان.
Do...............loop:
هذه هي أساس العمل كلّه وهي لاتقيّدك بشرط أو حدث معيّن على غرار الجُمل الأخرى وفيها سيتم الدوران بشكل متواصل ولا يتم الخروج منها إلا بشرط تضعه
أنت بحسب الذي يتكيّف مع إحتياجاتك ويمكن مزجها مع كافة الجُمل الذي مررنا عليها والعكس كمان.
كود PHP:
do
print "hi montada";
loop
طبّق هذا الأمر وحاول أن تخرج منها من دون إستخدام زر الــــescape
لايمكنك ذلك أما زر الـescape تم وضعه للخروج لكي تخرج بشكل إعتيادي وتعود إلى واجهة التطبيق لكي تعدّل ماتريد
وهنا مثال أخر يتم فيه مزج if ........then و Do......loop
كود PHP:
sync on:sync rate 60
color backdrop rgb(0,0,0)
make object cube 1,5
position object 1,0,0,20
do
if rightkey()=1 then
yrotate object 1, object angle y(1)+1
if leftkey()=1 then
yrotate object 1, object angle y(1)-1
sync
loop
عند الضغط على الأسهم الأيسر والأيمن بشكل مختلف تلاحظوا إن المكعّب بيتحرك بحسب الزر المضغوط حالما يتم التوقّف عن الضغط سيتوقف المٌكعّب عند أخر
نقطه تحرّك فيها.
وهناك الكثير من الجُمل الذي يتم مزجها وحتى جميعهم في نفس الــdo........loop .
وهذا مثال يمكنكم من عبره أن تتعلموا المزج بين الجُمل وفي نفس اللحظه أن تستوحوا فكره في العابكم إن شاء الله.
سيتم إستخدام الجمل الأكثر إستخداماً في العمل لذا لاتتعجبو من عدم وجود بعضها لإنها لاتلبّي الطلب أو إنها تستهلك الكثير من الكتابه.
*طريقة اللعب*
الأسهم للحركه
زر space للإيقاف.
# ملاحظه:
* هذا المثال تنقصه تحسينات بسيطه ويصبح لعبه تقريباً(لاتتوقّعوا الكثير من مثال بسيط وفيه نقص بسبب عدم توفّر الوقت,يمكنكم تحسينها وإكمال النُقص فيها ^_^)
* سأقوم برفع المثال على هيئة ملف dpo من عبره يمكنكم مراجعة الأوامر وهي نفس الذي ناقشناه سابقاً.
لن أقوم بكتابته هنا نظراً لعدة أسباب:
1)- بمجرّد كتابته وكإنني أعيد الذي كتبته أعلاه
2)- الوقت لايسمح لي كما إن الشرح أستغرقني 3ساعات متواصله
3)- أه........يبدوا إنني أتحدث كثيراً بالنسبه للمثال تجدوه في المرفقات.
أما بالنسبه للإستفسارات سيتم مناقشتها في المكان المتخصص بها وأرجو أن تبهرونا بالنتائج وأرى الكثير من أخواني في مجال تصميم الالعاب.
مع إنني لا أشعر بوجود أشخاص من مستخدمي الدارك .
أعتقد بهذا أنتهينا من جُمل الشرط والدوران إن شاء الله وأرجو من إن الشرح قد نال رضاكم...............