المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : دروس الـDark basic :بدايــــة الطريق (كاملة) من DBprog



PrinceOfSorrow
12-02-2008, 10:47 AM
بسم لله الرحمن الرحيــــــــم
الدرس الأول

وقبل كل شيء السلام عليكم ورحة الله وبركاته
هذه أول دروسي في لغة الـــــــDark basic , وفي هذا الدرس سأشرح عن العلاقات الرياضيّه والأوامر المتعلقه بالنصوص
وأنواع المتغيرات الذي سنتعامل معها .
هناك ثلاثه متغيرات سنتعامل معها وهي:
1)- المتغيرات العدديه(integer ).
2)- المتغيرات من نوع السلسله الحرفيه(string ).
3)- المتغيرات العشريّه (long ).
هنا جدول توضيحي للموضوع
Name : Mark
Integer : None
$ : String
# : long

سنشرح كل واحد على حدى

* المتغيرات العدديه(integer ).
في هذا النوع من المتغيرات سوف نتعامل معه بشكل كبير أثناء دراستنا
لأنه يدخل في العمليات الحسابيه والأكثر أهميّه من ذلك إنه لايقتصر على العمليات الحسابيه فقط
هنا سنذكر إستخدام أخر مهم له


load image "File name",1
load bitmap "File name",2
load object "File name",3
وإلخ........
إذا بتلاحظوا الأعداد 1,2,3 بعد كل File name هي الأعداد التي سنتعامل معها دون الحاجه إلى كتابة أسم
الملف المراد إستدعائه أو العمل عليه
ملاحظه :-
مثل أوامر التحميل(load) أعلاه لاتقبل إلا الأعداد الطبيعيه.
مثال بسيط يوضح إستعمال الأعداد الحقيقيه في العمليات الحسابيه

أفتح برنامج الـــــDark basic وفي نافذة الكود أكتب السطور التاليه:-



a=2+6
print a
Wait key
أو يمكن كتابة الأوامر بهده الطريقه

b=6
c=2
a=b+c
print a
wait keyمـــــــــــاذا تلاحظوا عند الضغط على زر F5 أي عند تنفيذ الأوامر ورؤية الناتج؟
نعم هذا صحيح ,ستلاحظوا إن الناتج هو 8
سنشرح الكود بشكل سريع
في السطر الأول جمعنا عددين هما 6 و 2 وأردنا أن نخزن الناتج في المتغير العددي a
أما بالنسبه للأمر Wait key
فهو يعتبرمن الاوامر تقريباً لولاه لما كنت تستطيع رؤية نتيجة تنفيدك للأوامر
لماذا سمي Wait key ؟
لأن شاشة العرض تبقى حتى تضغط على أي زر من ثم تعود إلى بيئة البرمجه

لمـــــــــــاذا a متغيرعددي ؟
لاحظوا الجدول التوضيحي في سطر Integer تحت عنوان mark
نلاحظ إنه كُتب None أي لايوجد رمز يمثل المتغيرات العدديه حتى إذا حطيتوا رمز
مثل المتغيرات الأخرى($,#) فهو لن يعمل أو تظهر نتيجه غير مرجوّه.

*المتغيرات من نوع السلسله الحرفيّه(String ).
يمكن التعامل مع هذا النوع من المتغيرات بعدة طُرق ومنها :
1)- يمكن عرض النصوص بشكل مباشر.

مثـــــــــال:-


print "Hi,my name is DBprog"
Wait key

أو

a$="Hi,my name is DBprog"
Print a$
Wait key
أو

a$="Hi,my name is DBprog"
b$="and my age is 21"
print a$+b$
wait keyملاحظه:-
1)- يمكن كتابة الكود السابق بهذه الطريقه



a$="Hi,my name is DBprog"
b$=" and my age is 21"
print a$+b$
wait key
مــــــــاذا نلاحظ في السطر الثاني من الكود ؟
نلاحظ وجود فراغ والغرض منه ترك مسافه بين العبارات
2)- يجب وضع النص بين إشارتي التنصيص ("") بحكم إنه متغير نصّي

* المتغيرات العشريّه(long)
أو السلسله العدديه الطويله , يمكن التعامل معها بنفس الطريقه التي تعاملنا مع الــInteger
لهذا لاداعي لشرحها وهذا مثال يشرح الأمور


a#=22.45
b#=56.23
c#=a#+b#
print c#
wait key
ملاحظه:-
إذا أزحنا إشارة إشارة # من أحد المتغيرات فإنه سيتم جمع integer مع long
أما إذا أزحناها من المتغير الذي يمثل الناتج فإن الناتج سيكون عدد طبيعي عند التنفيذ
جربها وشوف..........

الأن والحمد لله أنتهينا من شرح أنواع المتغيرات الأساسيه الذي سنتعامل معها والأن سوف نتطرّق إلى

Convert
في هذا الموضوع سوف نتعلم كيف نقوم بالتحويل مع المتغيرات فيما بينها
عند التحويل إلى string نستخدم الأمر Str$
مثـــــال:-


a=50
a$=str$(a)
print a$
wait key
ملاحظه:-
ينطبق هذا التحويل أعلاه على الـــlong أيضاً
عند التحويل إلى Integer أو long نستخدم أمر val


a$="Hi,my name is DBprog"
a=val(a$)
print a
wait key
نلا حظ أن الناتج كان صفر...... لمـــــــاذا؟
شيء معروف ...لأن القيمه المحوله إلى عدد كانت نصّيه لهذا كان الناتج صفرً
لأنه لم يتعرف على إنها عدد أثناء التحويل.

وهنا أيضاً سوف نتعرف على بعض الأوامر التي تتعلق بالنصوص و سوف تساعدنا فيما بعد,وهي:

Asc$ command
هذا الأمر يعيد قيمة الحرف بما يقابله من عدد بنظام Ascii
مثـــــال:-

s=Asc("b")
print s
wait keyنلاحظ إن النتيجه ستكون 98 وهو العدد الذي يمثل الحرف B
يمكنك أن تجرب على أعداد اُخرى.

Chr$ command
هذا الأمر وبإختصار شديد عكس السابق
مثـــــــال:-

s$=Chr$(98)
print s$
wait keyLen command
هذا الأمر يقوم بإحصاء عدد الحروف الموجوده في النص.....كيف؟
مثـــــــال:-

name=len("Hi,my name is DBprog")
print name
wait keyلمـــاذا لم نخزن النص في متغير نصّي ($name) ؟
هذا الأمر مُختص بإحصاء الحروف وبما إنه مُختص بذلك في هذه الحاله سيتم تخزين النص في متغير من نوع Integer
حتى يظهر لنا عدد الأحرف
ملاحظه:-
هذا الأمر يحصي المسافات(Space) أيضاً ركز على هذه النقطه

Mid$ command
يقوم هذا الأمر بطباعة الحرف الذي أنت تحدده في الـparametar الخاص بيه
مثـــــــال:-

DBprog$=mid$("Hi every body",2)
print DBprog$
wait keyنلاحظ إثناء التنفيذ إنه تم طباعة الحرف i لإننا وضعنا رقم 2 وهو يمثل ثاني حرف في النص
والذي سيتم طباعته
ملاحظه:-
يتم إحصاء الفراغات أيضاً في هذا الأمر وأن صدف إننا كتبنا في المثال السابق
رقم 3 سيصادف أثناء العد فراغ(Space) وسيكون الناتج لاشيء(شاشه سوداء فقط).

Right$ command
هذا الأمر مشابه نوعاً ما للسابق من ناحية الـParametar
وهو يقوم بطباعة النصوص إبتداءً من اليمين
مثـــــــال:-

Myname$=right$("hello every body",4)
print Myname$
wait keyسيتم طباعة كلمة body أثناء التنفيذ

Left$ command
هذا الأمر كالسابق ولكن يطبع من اليسار حسب القيمه المعطاه.
مثــــــال:-


Myname$=left$("hello every body",4)
print Myname$
wait key
هنا سيطبع كلمة جحيم(hell) ههههههههه.

ملاحظه هامّه جداً:-
لاتكتب الأكواد نقلاً من الموضوع بل قوم بنسخها مباشرتاً حتى تراها بشكل صحيح أثناء لصقها وشكراً

وأتمنى أن تكونوا أستفذتم من الشرح ولنا لقاء في الدرس القادم..........;)

PrinceOfSorrow
12-02-2008, 10:52 AM
السلام عليكم ورحمة الله وبركاته

الدرس الثــــاني
في هذا الدرس سوف نتعرف على بعض الأومر التي من شأنها تحسين النصوص أو بمعنى أخر
التعديل في خصائص النصوص ومنها

Set cursor command
هذا الأمر يقوم بتحديد نقطه على شاشة العرض(عند التنفيد)......كيف؟
سيطلب منك هذا الأمر تحديد الأحداثي x,y
وهذا الأمر فعّال جداً مع مع الأمر Print
مثـــــال:-


Rem "This command will print my name"
set cursor 320,240
print "DBprog"
wait key
سنشرح الأمر السابق بسرعه
السطر الأول لو بتلاحظوا كلمة Rem جاءت في بدايته وهذه الكلمه تختص بالتعليقات
أي أن أي شيء يُكتب بعدها سواء كان رمز أو أمر لايتم قرائته من قِبل الــCompiler
السطر الثاني
نقوم بتحديد المكان الذي ستظهر فيه الكتابه وذلك عن طريق الأحداثيات
أما بالنسبه للسطور الأخرى فهي ليست جديده بالنسبه لكم

Text command
هذا الأمر يُعتبر الأفضل في عرض النصوص لإنه يطلب الأحداثيات والنص المراد كتابته
Parametar
Text x,y,String

مثـــــال:-


Rem "This command will print my name"
text 320,240,"DBprog"
wait key
Font commands
ومن ضمنها
set text size
هذا الأمر يتحكم بحجم الخط
set text font
هذا الأمر يتحكم بنوع الخط

مثـــــال:-



set text font "Arial"
set text size 40
text 320,240,"DBprog"
wait key
الأوامر التي تُعيد لك قيــــم

Text font$() command
هذا الأمر يُعيد لك نوع أو أسم الخط المستخدم في الكتابه
مثـــــــال:-



DBprog$=text font$()
text 320,240,DBprog$
wait key

Text size()
مثل السابق ولكن يعيد القيمه المتعلقه بحجم الخط
مثـــــــال:-



DBprog = TEXT SIZE()
set cursor 320,240
print DBprog
wait key
Set text to Bold,italic,normal command

مثـــــال:-



DBprog = TEXT SIZE()
set text to italic
set cursor 320,240
print DBprog
wait key
Ink command
هذا الأمر يقوم بإعطاء لون للخط ولخلفيته, طالما يقوم بذلك فهو يطلب الأمر المختص باللون وأعتقد إنكم سمعتم من قبل عن
RGB
هذا الأمر بيطلب قيم لكلاً من اللون الأحمر والأخضر والأزرق حسب الترتيب

مثــــــال:-



ink rgb(25,255,16),rgb(30,90,50)
DBprog = TEXT SIZE()
set text to italic
set cursor 320,240
print DBprog
wait key
وهناك الكثير من الأوامر المتعلّقه بالخط يمكنك إكتشافها بنفسك
أما الأن فذكرنا أهمها
سنتعرف الأن على أحــــــــد أوامر الأدخال وهو

Input commandهذا الأمر يطلب منك النص المراد ظهوره إلى جانب القيمه التي تريد أن يتم إدخالها
ولهذا الأمر طريقتين للأستخدام
1)- إما أن تضع القيمه المراد إدخالها مباشره(متغير).
2)- إما أن تضع نص لإعطاء الشخص فكره عما يتم إدخاله في الحقل.

مثــــــال:-



Input myname$
print "you make it,Conguratulations"
wait key
أو



Input "my name ",myname$
print "you make it,Conguratulations"
wait key
في السطر الأول من الأمرين السابقين وضعنا متغير نصّي والذي كان عباره عن وحدة الأدخال.
عند تنفيد الأمر نلاحظ إنه بيطلب إدخال إسمك أو أي شيء في الحقل
وعند الضغط لمشاهدة النتيجه سنرى رساله أو أي شيء تريد له الظهور أو حزمه من الأوامر.
وهنا رفعت مثال في المرفقات يختصر كل ناشرحته في هذا الدرس وأعرف إن البعض بيقول لماذا لم يرفعه وينتهي من الأمر؟
وجواب هذا السؤال بسيط جداً
لإن هناك بعض الأشخاص الذين يحتاجون لشرح مفصّل حتى تثبت الفكره بحكم إنهم مبتدئين
وبهذا أنتهينا من الأمور المتعلّقه بالنصوص وسنناقش الجمل الشرطيّه وجمل الدوران في الدرس القادم وهذا مثال بسيط عن جملة الشرط

وشكراً.................(^_^)

PrinceOfSorrow
12-02-2008, 10:57 AM
بسم الله الرحمن الرحيم


السلام عليكم يا إخوتي الكرام وأعتذر عن الأنقطاع الطويل عليكم وذلك بسبب الظروف التي مررت بها مؤخراً إلى جانب أشياء أخرى ومع هذا لم أنساكم بعد
لإنني شخص يفي بوعوده,دعونا من هذا الكلام الأن وأرجو أن تركّزوا معي في هذا الدرس لإنه كل شيء في لغات البرمجه بتتمحور على هذه الأشياء بشكل عام

condition statements

أعتقد بإنّكم تعرفوا جمل الشرط if ..........else..........endif and if............. then ربما صياغتها قد تكون مختلفه في بالمقارنه
مع لغات برمجه أخرى, لكن الفكره لاتختلف أبداً كما يُقال المثل (وجهان لعمله واحده).
سأوضّح سبب الأختلاف في مثال بسيط

في الــــvisual basic

أولاً يتم توقيع أداة النص text مع أداة command ومن ثم نضع الكود الأتي في أداة command تحت الحدث click أو أي شيء تريد


if text1="123456" then
msgbox"Correct code"
else
msgbox"Wrong code"
endif
في الــdark basic



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

فيما سبق أعتقد إنه توضحت الفكره شويّه عن إستخدام هذه الجمل الشرطيّه,أما الأن سيتم مناقشتها بشكل أوضح ومبسّط أكثر إن شاء الله.
هذه الجُمل تكون فعّاله أكثر عندما يتم ربطها أو أستخدامها مع نوع أخر من الجُمل ,هنا سنرى قوتها وفعاليتها.



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)لا تتوفّر له هذه الخاصيّه
أي إنه حالما تضع شرط سينفّذه ولن يخيّرك بين أمرين.

مثـــــال:-



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 أي الذهاب إلى المكان الذي أنت تريده أن ينفّذ من ثم العوده إلى حيث بدأت
مثال توضيحي


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).
والأن بمجرد ما أقولكم الأتي البعض سيغضب ومنهم من ستفهّم الأمر ^_____________^
الأن يمكن تجنّب هذه المشكله كامله بهذا الكود



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:
وظيفتها هي أن تخيّرك بين شرطين لحصول حدث أو أمر معيّن

مثـــــــال:-


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 فهو كثيراً مايستخدم في الأحداث أو القيم

مثــــــــال:-



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 :

هذا النوع من جمُل الشرط يساعد على الأختيار بين عدة أمور أثناء تنفيذ الشرط بحسب القيم المُدخله أو الأحداثوهنا مثال يساعد على فهم الأمور بشكل أوضح
الكود شويّه طويل(قوم بلصق الكود وحاول أن تضع رقم من الصفر إلى العشره لتشاهد الجربنه بتاعك..........أقصد علامتك ^_^...
مثـــــــــــال:-



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:
هذا النوع من جُمل الدوران محدود أي إنه عدد دورات التنفيد فيه يتم وضعها بحسب إحتياجاتك وتساعد كثيراً في العمل(عمليّه)ومتعددة الأستخدام.
ولها فوائد كثيره وسنذكرها
مثـــــــال:-



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 .



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 في اللون الأخضر مع كل دوره(يمكنكم تجربتها مع باقي الألوان).
وهنا مثال أخر سيساعدكم مستقبلاً في تصميم لجزء معيّن من لعبه بمجرد مشاهدتكم لعمله في الواقع المثال موجود وحتفهموا قصدي.



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 ,بإختصار شديد هذا النوع من الجُمل لايتم تنفيذ محتواه إلا إن كان الشرط صحيح

مثــــــــال:-



do
WHILE upkey()=1
print "up key r pressed"
wait 100
ENDWHILE
loop
في السطر الأول كُتب (طالما زر السهم للأعلى مضغوط أطبع الرساله "الزر للأعلى مضغوط") 1 هي قيمه تدل على إن الزر مضغوط.
السطر الثالث هو للأنتظار عند كل ضغطه يتم تكرار الجُمل.
أو يمكن كتابتها بالشكل التالي حتى لاتظهر كل تلك الجُمل بل جمله واحده فقط.



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

مثــــــــــال:-



repeat
print "fsafsdfdsf"
wait 200
until spacekey()=1
في هذا المثال سيتم تنفيذ أمر الطباعه حتى يتم الضغط على زر space هنا سيتم الخروج من الجمله والبرنامج كمان.

Do...............loop:

هذه هي أساس العمل كلّه وهي لاتقيّدك بشرط أو حدث معيّن على غرار الجُمل الأخرى وفيها سيتم الدوران بشكل متواصل ولا يتم الخروج منها إلا بشرط تضعه
أنت بحسب الذي يتكيّف مع إحتياجاتك ويمكن مزجها مع كافة الجُمل الذي مررنا عليها والعكس كمان.



do
print "hi montada";
loop
طبّق هذا الأمر وحاول أن تخرج منها من دون إستخدام زر الــــescape
لايمكنك ذلك أما زر الـescape تم وضعه للخروج لكي تخرج بشكل إعتيادي وتعود إلى واجهة التطبيق لكي تعدّل ماتريد
وهنا مثال أخر يتم فيه مزج if ........then و Do......loop



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)- أه........يبدوا إنني أتحدث كثيراً بالنسبه للمثال تجدوه في المرفقات.
أما بالنسبه للإستفسارات سيتم مناقشتها في المكان المتخصص بها وأرجو أن تبهرونا بالنتائج وأرى الكثير من أخواني في مجال تصميم الالعاب.
مع إنني لا أشعر بوجود أشخاص من مستخدمي الدارك .
أعتقد بهذا أنتهينا من جُمل الشرط والدوران إن شاء الله وأرجو من إن الشرح قد نال رضاكم...............:biggthump

PrinceOfSorrow
12-02-2008, 11:23 AM
أحداث الفأره(mouse command)

أعرف إن البعض سيقول (من سيحتاج إلى هذا النوع من الأوامر ) هذا صحيح ولكن يكون لها فعاليّه في الألعاب البسيطه أو الألغاز في الألعاب
مثل(الكروت,ترتيب الأشكال...........إلخ) وهي أوامر قليله وسهله يمكن الأستفاده منها وذلك بجُمل الشرط والأدوات امساعده لها and & or
سنذكر هذه الأوامر ومنها

mousex() command:

وظيفة هذا الأمر هو أعطاء قيمه لحركة الماوس في المحور السيني
parameter:
return value=mousex()

mousey() command:

وظيفة هذا الأمر هو أعطاء قيمه لحركة الماوس في المحور الصادي
parameter:
return value=mousey()

mousez() command:

وظيفة هذا الأمر هو أعطاء قيمه لحركة الماوس في المحور العُمق(أي الزر أو العجله التي تتوسّط زرّي الماوس)
وهذا مثال ينفّذ الأوامر مع ظهور قيمها.
parameter:
return value=mousez()

mouseclick command:

وظيفته هو عرض قيمة الزر عند الضغط عليه أي أن:
1 = هي قيمة الزر الأيسر
2 = قيمة الزر الأيمن
3 = الأيمن والأيسر معاً
4 =العجله أ, الزر الذي يتوسّط الأيسر والأيمن
وهكذا عند الضغط على أي زر أو زرّين معاً يتم عرض قيمهم.
parameter:
return value=mouseclick()
مثـــــــــال:-


do
cls
x$=str$(mousex())
y$=str$(mousey())
z$=str$(mousez())
clk$=str$(mouseclick())
text 10,10,x$
text 10,20,y$
text 10,30,z$
text 10,40,clk$
if mouseclick()=1 then
text 320,240,"left button"
if mouseclick()=2 then
text 320,240,"right button"
if mouseclick()=3 then
text 320,240,"left & right button"
if mouseclick()=4 then
text 320,240,"middle button"
if mouseclick()=5 then
text 320,240,"left & middle button"
if mouseclick()=6 then
text 320,240,"right & middle button"
if mouseclick()=7 then
text 320,240,"right & middle & left button"
loop


http://www.m5zn.com/uploads/4c4f0053fa.JPG (http://www.afra7.net/vb/)

mousemovex () command:

وظيفته هي إظهار القيمه منذ أن تحرك الماوس من نقطة البدايه إلأى أخر نقطه وقفت أنت عليها(طبعاً هذا في نطاق المحور السيني)
ملاحظه :
نفس الغرض مع الأوامر الذي تحمل نفس عنوانه mousemovey() and mousemovez()
parameter
return value = mousemovex ()
كما إن هذا الأمر بالكاذ إنك تشاهد مخرجاته لإنه في جملة دوران جرب



do
cls
print mousemovex()
loop
هنا بعض الأوامر الفعّاله الذي يمكن الأستفاده منها عند تصميم الألعاب....ألم يتسائل البعض ويقول (لماذا يظهر زر الماوس في الألعاب.....أنا لا أريده أن يظهر...)؟
عندها يمكنك أستخدام الأمر

Hide mouse command:

بمجرد وضعه في بداية السطر ستلاحظ إن زر الماوس قد أختفى والأمر لايطلب إدخال قيم أو يقوم بإخراجها فقط يتم وضعه كما هو مبيّن لك على العنوان ..........وهناك أمر عكسه أيضاً وهو
Show mouse:

هنا أنتهينا من أوامر الماوس وكما إنه هناك أمثله مفيده يمكنك من عبرها أن تقتبس أفكار (في المرفقات)
وأي نقطه غير مفهومه في المرفقات سيتم مناقشتها في القسم المتخصص لها

أمر Data & Read:

هذه الأوامر نافعه في النصوص وفي برمجة الألعاب, والغرض الأصلي منها جدوله أ, فهرسة المتغيرات عند ظهورها وهنا في الصوره التاليه ستتوضّح الفكره إن شاء الله حول هذا النوع من الأوامر
http://www.m5zn.com/uploads/5ee77428e5.JPG (http://www.afra7.net/vb/)
وأرجو إنكم أستفدتوا منه
إن شاء الله في القريب العاجل سيتم رفع دروس في مواضيع متقدّمه (الجزيئات +التعامل مع المجسمات ثلاثيّة الأبعاد بشكل كبير).