دروس في الدارك بيسيك الجزء الثالث
مع Snake_x86
هل قرأت الدروس السابقة؟
حسنا هذا الدرس الثالث مني و اسف على التأخير بسبب انشغالي المفاجيء لكنني
لم و لن اتوقف
في الدرس السابق تكلمت عن اهم الادوات اللتي تبني فيها اللعبة
و الان ساتكلم عن اداة او عملية لم اتكلم عنها و هي من اهمهم و اللتي هي:
Do
….
Loop
بالمختصر المفيد هذه العملية عند تشغيلها ستقوم بتشغيل الاوامر اللتي تحويها
اي ما بين Do و Loop الى ما لا نهاية!
و يمكن الخروج منها بـ Goto (ذكرتها بالدرس الماضي)
و الان سأدخل بالموضوع و هو هيكل اللعبة
يمكن تصميم هيكل اللعبة بطرق لا حد لها حسب متطلبات اللعبة
و ساقوم بالتكلم عن الهيكل اللذي استخدمته بكهف الموت....
و ببساطة عبارة عن عدة اقسام:
1) الاعداد للعبة.
2) تعريف المتغيرات و تشمل المتغيرات العادية و المصفوفات و الانواع....
3) تحميل الوسائط المتعددة كالصور و الاصوات و المسيقى و الموديلات
4) التهيئة للدائرة اللعبة الرئيسية
5) دائرة اللعبة الرئيسية (سأتكلم عنها بالتفصيل)
6) الدوال اوالـ Functions
سأتكلم الان عن الدائرة الرئيسية و اللتي هي عبارة عن سلسلة اوامر و عمليات
تتحكم باللعبة كتحريك الشخصيات و كشف التصادم و العمليات الحسابية
و التحكم بالاصوات و الصور .... كل شيء
وهذه الدائرة هي قلب اللعبة .... وسميتها دائرة لان سلسلة الاوامر و العمليات هذه
عندما تنتهي ترجع الى اول السلسلة و تعاد هذه الاوامر....
و هنا عادة تستخدم ال do loop و يمكن استخدام while
لكن الاولى هي الشائعة في الدارك بيسيك
------------------------------------------------------------------------
و الان هيا بنا الى العملي
الان سنقوم بعمل برنامج بسيط عبارة عن مكعب يدور حول نفسه....
نبدأ بفتح مشروع جديد....
الان سنعد للبرنامج و انا ابدأ عادة بهذا الامر:
Sync on
و هذا امر ضروري حيث يمنع البرنامج من تحديث الشاشة اوتوماتيكياً
و تحديث الشاشة اقصد به ان يقوم كارت الفيديو بعمليات الرسم و ذلك يأخذ وقت
و لو كان ذالك عشوائي سيؤدي الى بطئ اللعبة
و يجب تحديث عند كل نهاية نهاية للأوامر اي بآخر الدائرة الرئيسية
عن طريق الأمر sync.
الآن الامر التالي هو التحكم بعدد عمليات التحديث او الرسم حيث اذا لم نحددها
ستصبح سرعة اللعبة تعمل بأقصى سرعة يستطيع الجهازتحملها مما يعني البطئ على الاجهزة البطيئة
و السرعةالجنونية على الاجهزة السريعة و ايضا ستؤثر العمليات اللتي يقوم بها
البرنامج في كل لفة (او نهاية دائرة)
و ستجدون الكثير من الالعاب المبرمجة بلغات البرمجة كالسي هكذا و هو خطأ شنيع!
و للتجنب ذلك نستخدم الأمر:
Sync rate 60
و بهذا الامر سنحد سرعة التحديث الى 60 صورة بالثانية و 60 هي المستخدمة عادة
يمكن استخدام 80 ايضا و ذلك يؤدي الى حركة انعم لكن بعض الشاشات قد لا تدعمها.
و الان الى الامر التالي واللذي هو
Autocam on
و اللذي يقوم به هذا الامر هو جعل الكاميرة تنظر الى آخر اوبجكت نقوم بتوريده الى
البرنامج او نقوم بصنعه و هذا الامر في هذا المثال غير ضروري لأنه افتراضي
لكنني وضعته لأشرحه .... لأنه مهم فبالالعاب المعقدة سيؤدي ان يكون هاذا الامر مفعل
الى مشاكل و لذلك نستخدم الامر autocam off و اللذي هو عكس autocam on
في الالعاب التي تحوي الكثيرمن الاوبجكتات لتجنب ذهاب الكاميرة الى الاوبجكت الجديد.
و الآن انتهينا من الاعدادات وسنبدأ لاعداد المكعب اولا يجب ان نصنعه
بالأمر
Make object cube 1 , 40
و سيقوم الدارك بيسيك بعمل اوبجكت عبارة عن مكعب و يعطيه رقم 1 و سيكون
طول كل ضلع 40, و من هنا أتكلم عن رقم الاوبجكت او الـ ID
و هو عبارة عن رقم يعطى لكل اوبجكت في الدارك بيسيك و لا يمكن ان يتشارك
اوبجكتان او اكثر في رقم واحد.
الان سنعد الاوبجكت واللذي هو المكعب و سأعطيه لون عشوائي....
اولا سأقوم بتكوين اللون العشوائي بالعملية التالية:
كود PHP:
col# = rgb(rnd(255),rnd(255),rnd(255))
لاحظوالمتغير col# الرمز اللذي اخره يقول للبرنامج بان هاذا عبارة عن متغير عشري
او Float و يسمى احيانا Long
و بعد ذلك تأتي العملية rgb و وجود القوسين يعني ان هذه العملية سترجع قيمة
و هذه الاعملية تعطيها ثلاث ارقام من 0 الى 255 و كل منهم يرمز للون
الاول الاحمر و الثاني الاخضر و الثالث الازرق و سيتكون لون
و انا قمت بوضع ثلاث عمليات تعطي ارقام عشوائية (rnd) و هاذا الامر سيرجع
رقم عشوائي بين الصفر و العدد اللذي تعطيه اياه و في حالة الالوان 255
الان سنحصل على قيمة ترمز للون في المتغير col#
و الان سنطبق هذا اللون على المكعب
Color object 1 , col#
وهنا هذا الامر واضح الرقم واحد يرمز الى رقم الاوبجكت و المتغير يرمز للون
و الان الى الدائرة الرئيسية و اللتي هي في هذا المثال بسيطة
وساتكلم الان عن المطلوب من الدائرة.....
يجب ان يدور المكعب في كل لووب او دورة 0,5 الى اليمين
ثم يدور 0,5 درجة الى الاعلى
ثم نعطي البرنامج الامر بالقيام بعمليات الرسم
do
turn object right 1,0.5
pitch object up 1,0.5
sync
loop
و هنا ستتكر الاوامر حتى يتم انهاء البرنامج
و اخر امر في الدورة هو sync و للتذكير هو بأمرالبرنامج بالقيام بعمليات الرسم او العرض
المثال كامل:
كود PHP:
sync on
sync rate 60
autocam on
make object cube 1,40
col# = rgb(rnd(255),rnd(255),rnd(255))
color object 1,col#
do
turn object right 1,0.5
pitch object up 1,0.5
sync
loop
يمكن نسخه الى الدارك بيسيك لتروا النتائج
و لا يحتاج الى ملفات اخرى.....
سأكتفي الان بهذا الدرس و في الدرس القادم سأقوم بشرح مثال معقد يتوي على عمليات
For next