نريد أن نبدأ بتحريك كرة واحدة، ثم بعد ذلك نتصرف في باقي الكرات.
(اعتبر الإجراء مثل void function).
هذا الإجراء يأخذ اربع عوامل:
الأمر هنا بسيط: الأمر ارسم.طيف/في يأخذ طيفاً ويرسمة في نقطة محددة هي هنا نقطة البداية، ثم نغير هذه النقطة كل مرة حسب متجه السرعة، بأن نضيف السرعة في الاتجاه السيني إلى س ونفس الشيء في ص. لاحظ أن المصفوفات في كلمات تبدأ من الواحد.
نكرر هذه العملية باستمرار مع انتظار بسيط - 15 ميلليثانية - بين رسمة والأخرى
المشكلة هنا هي أن الكرة ستخرج من الشاشة بعد قليل وتختفي، نحن نريدها أن "تصطدم" بالشاشة ومن ثم تغير اتجاهها. خطتنا بسيطة:
الحافة اليمنى هي النقطة س=صفر، فأن كانت س أقل من الصفر فمعنى هذا أن الكرة توشك أن تخرج، فنعيدها مرة أخرى إلى الحافة ونعكس إشارة المكون الأول للسرعة. لاحظ أن نظام الإحداثيات يساير الكتابة العربية (س تزداد من اليمين لليسار).
ماذا يحدث لو تجاوزت الكرة يسار الشاشة؟ هذا:
شاشة الرسم في كلمات عرضها 800 نقطة وارتفاعها 600، لذلك النقطة في أقصى اليسار هي النقطة 799 لأن العد يبدأ من الصفر.
إذا تجاوزت حافة الكرة اليسرى (المحددة بقيمة س + عرض الكرة) هذا الحد نعيد الحافة اليسرى للنقطة الأخيرة. لاحظ أن التخصيص
سنفعل نفس الشيء مع قيم ص ليكون الإجراء الكامل كالآتي:
عظيم!! لقد أنهينا الإجراء. لم يتبق سوى استدعاؤه:
هنا قمنا باستخدام الدالة الجاهزة حمل.طيف لنقوم بتحميل صورة للكرة وتكوين طيف منها، ثم ولدنا بعض القيمة العشوائية لمكان الكرة وسرعتها وقمنا بتمريرهم إلى الإجراء. لاحظ كيف يمكن عمل مصفوفة من عنصرين بالتعبير [ أ، ب] كما فعلنا للمتغير السرعة
يمكننا الآن أن ننفذ البرنامج:
للأسف لقطة الشاشة لا تبين روعة الكرة وهي تجري..كان ينبغي أن أضع فيديو لهذا المثال على اليوتيوب :]
الآن نريد أن نجعل البرنامج يتحرك فيه كرات كثيرة...هذا في الواقع أسهل مما نتخيل بسبب إمكانات البرمجة المتوازية في لغة كلمات. الأمر شغل يأخذ الصيغة التالية:
شغل <استدعاء إجراء>
ومعناه "استدع هذا الإجراء بحيث يعمل على التوازي مع باقي البرنامج وأي إجراءات أخرى". كل ما علينا الآن هو تشغيل عدة نسخ من الإجراء على التوازي ليكون لدينا كرات كثيرة!
(ملاحظة: تنفيذ الإجراءات في الواقع لن يكون متوازياً، بل ستقوم الآلة الافتراضية virtual machine الخاصة بكلمات بالانتقال بسرعة بين إجراء والآخر ليبدو الأمر كأنه على التوازي. في المستقبل ننوي تغيير الآلة الافتراضية لتحقيق توازٍ حقيقي).
سيبدو تنفيذ الإجراء الآن كالآتي، لنحرك عشر كرات عشوائياً:
جميل، لكن الكرات كلها من نفس اللون، نريد أن يكون الأمر متنوعاً قليلاً..نرى الآن البرنامج في صورته النهائية:
لتحميل المثال كاملاً:
اضغط هذا الرابط
لتحميل لغة كلمات:
http://code.google.com/p/kalimat/downloads
أو من الموقع الرسمي http://www.kalimat-lang.com
إجراء حرك.الكرة ( طيف ، س ، ص ، السرعة ) : -- سوف نكتب كود هنا نهاية
هذا الإجراء يأخذ اربع عوامل:
- طيف هو الطيف الذي يعبر عن رسمة الكرة؛ الطيف شكل متحرك يرسم على الشاشة (sprite) وسنعرف الآن كيف نتعامل معه
- س، ص هو المكان الذي نريد أن يبدأ فيه رسم الكرة
- السرعة هو مصفوفة (array) من عنصرين يعبر عن متجه vector فيه سرعة الكرة في الاتجاهين السيني والصادي
إجراء حرك.الكرة ( طيف ، س ، ص ، السرعة ) : كرر : ارسم.طيف طيف في ( س ، ص ) س = س + السرعة [ 1 ] ص = ص + السرعة [ 2 ] انتظر(15) تابع نهاية
نكرر هذه العملية باستمرار مع انتظار بسيط - 15 ميلليثانية - بين رسمة والأخرى
المشكلة هنا هي أن الكرة ستخرج من الشاشة بعد قليل وتختفي، نحن نريدها أن "تصطدم" بالشاشة ومن ثم تغير اتجاهها. خطتنا بسيطة:
- إذا اصطدمت الكرة بقمة الشاشة أو قاعها، نقلب إشارة السرعة في الاتجاه الصادي فنحيلها من موجبة لسالبة أو بالعكس، وبذلك تنزل الكرة مثلاً إن كانت تصعد.
- إذا اصطدمت بيمين الشاشة أو يسارها نغير إشارة المكون السيني للسرعة
- في الحالتين إن كانت الكرة تكاد أن تُرسم خارج الشاشة نعيد مكانها لحافة الشاشة
إذا س < 0 : س = 0 السرعة [ 1 ] = - السرعة [ 1 ] تم
ماذا يحدث لو تجاوزت الكرة يسار الشاشة؟ هذا:
إذا س + عرض.الطيف ( طيف ) > 799 : س = 799 - عرض.الطيف ( طيف ) السرعة [ 1 ] = - السرعة [ 1 ] تم
إذا تجاوزت حافة الكرة اليسرى (المحددة بقيمة س + عرض الكرة) هذا الحد نعيد الحافة اليسرى للنقطة الأخيرة. لاحظ أن التخصيص
س = 799 - عرض.الطيف ( طيف )معناه اجعل س + عرض الطيف = 799، أي اجعل الحافة اليسرى بهذه القيمة.
سنفعل نفس الشيء مع قيم ص ليكون الإجراء الكامل كالآتي:
إجراء حرك.الكرة ( طيف ، س ، ص ، السرعة ) : كرر : ارسم.طيف طيف في ( س ، ص ) س = س + السرعة [ 1 ] ص = ص + السرعة [ 2 ] إذا س < 0 : س = 0 السرعة [ 1 ] = - السرعة [ 1 ] وإلا إذا س + عرض.الطيف ( طيف ) > 799 : س = 799 - عرض.الطيف ( طيف ) السرعة [ 1 ] = - السرعة [ 1 ] تم إذا ص < 0 : ص = 0 السرعة [ 2 ] = - السرعة [ 2 ] وإلا إذا ص + ارتفاع.الطيف ( طيف ) > 599 : ص = 599 - ارتفاع.الطيف ( طيف ) السرعة [ 2 ] = - السرعة [ 2 ] تم انتظر ( 15 ) تابع نهاية
ط = حمل.طيف ( "ball1.bmp" )
س = عشوائي ( 800 )
ص = عشوائي ( 600 )
السرعة.س = عشوائي ( 20 ) + 1
السرعة.ص = عشوائي ( 20 ) + 1
السرعة = [ السرعة.س ، السرعة.ص ]
حرك.الكرة ( ط ، س ، ص ، السرعة )
يمكننا الآن أن ننفذ البرنامج:

الآن نريد أن نجعل البرنامج يتحرك فيه كرات كثيرة...هذا في الواقع أسهل مما نتخيل بسبب إمكانات البرمجة المتوازية في لغة كلمات. الأمر شغل يأخذ الصيغة التالية:
شغل <استدعاء إجراء>
ومعناه "استدع هذا الإجراء بحيث يعمل على التوازي مع باقي البرنامج وأي إجراءات أخرى". كل ما علينا الآن هو تشغيل عدة نسخ من الإجراء على التوازي ليكون لدينا كرات كثيرة!
(ملاحظة: تنفيذ الإجراءات في الواقع لن يكون متوازياً، بل ستقوم الآلة الافتراضية virtual machine الخاصة بكلمات بالانتقال بسرعة بين إجراء والآخر ليبدو الأمر كأنه على التوازي. في المستقبل ننوي تغيير الآلة الافتراضية لتحقيق توازٍ حقيقي).
سيبدو تنفيذ الإجراء الآن كالآتي، لنحرك عشر كرات عشوائياً:
لكل أ من 1 إلى 10 : ط = حمل.طيف ( "ball1.bmp" ) س = عشوائي ( 800 ) ص = عشوائي ( 600 ) السرعة.س = عشوائي ( 20 ) + 1 السرعة.ص = عشوائي ( 20 ) + 1 السرعة = [ السرعة.س ، السرعة.ص ] شغل حرك.الكرة ( ط ، س ، ص ، السرعة ) تابع

ملفات.الأطياف=["ball4.bmp"،"ball3.bmp"،"ball2.bmp"،"ball1.bmp"] لكل أ من 1 إلى 10 : ط = حمل.طيف ( ملفات.الأطياف [ عشوائي ( 4 ) + 1 ] ) س = عشوائي ( 800 ) ص = عشوائي ( 600 ) السرعة.س = عشوائي ( 20 ) + 1 السرعة.ص = عشوائي ( 20 ) + 1 السرعة = [ السرعة.س ، السرعة.ص ] شغل حرك.الكرة ( ط ، س ، ص ، السرعة ) تابع إجراء حرك.الكرة ( طيف ، س ، ص ، السرعة ) : كرر : ارسم.طيف طيف في ( س ، ص ) س = س + السرعة [ 1 ] ص = ص + السرعة [ 2 ] إذا س < 0 : س = 0 السرعة [ 1 ] = - السرعة [ 1 ] وإلا إذا س + عرض.الطيف ( طيف ) > 799 : س = 799 - عرض.الطيف ( طيف ) السرعة [ 1 ] = - السرعة [ 1 ] تم إذا ص < 0 : ص = 0 السرعة [ 2 ] = - السرعة [ 2 ] وإلا إذا ص + ارتفاع.الطيف ( طيف ) > 599 : ص = 599 - ارتفاع.الطيف ( طيف ) السرعة [ 2 ] = - السرعة [ 2 ] تم انتظر ( 15 ) تابع نهاية

اضغط هذا الرابط
لتحميل لغة كلمات:
http://code.google.com/p/kalimat/downloads
أو من الموقع الرسمي http://www.kalimat-lang.com