1 مرفق
[درس] دروس في الدارك بيسيك الجزء الرابع
دروس في الدارك بيسيك الجزء الرابع
مع Snake_x86
هل قرأت الدروس السابقة؟
هذا الدرس ايضا عبارة عن مثال مشروح بالتفصيل داخلالمثال نفسه يمكن نسخه مع الشروحات الى الدارك بيسيك مباشرة .... شكرا لخاصية الـCommensts
علما انه يستحسن تشغيل الملف اللذي في المرفقات لانه منسق اي اسهل للقرائة
و هذا المثال يقوم بانشاء عشرة مكعبات ملونة و موزعة عشوائياً
و ستتحكم بأحد هذه المكعبات و استخدمت اسهل نظام تصادم بسيط حيث لن تستطيع
الدخول في المكعبات الاخرى :biggthump
يمكنك نسخ الكود الى الدارك بيسيك مباشرة مع التعليقات
حيث في الدارك بيسيك اي شيء تكتبه بعد " ` " لن يتم قرائته من قبل الـ compiler
و في المرفقات يوجد ملف مضغوط يحتوي على سورس لهذا المثال نفس الموجود هنا
لكنه منسق حيث التنسيق يحذف عند وضعه في المنتدى.
قبل المثال اريد ان اذكر ببعض الاشياء الضرورية
اولا في العالم الثلاثي الابعاد هناك ثلاث احداثيات
و الدارك بيسيك يرمز لها بـ X و Y و Z
X يعني س
Y يعني ص و اللذي هو الارتفاع كلما زادت قيمة Y اي زاد الارتفاع
Z اي العمق
و في الدارك بيسيك سيكون التعامل في اغلب الاحيان مع ال X و Z
خاصة في الالعاب اللتي يكون فيها ارتفاع اللاعب عن الارض ثابت
ثانيا العملية RND و اللتي هي مستخدمة بهذا المثال كثيرا
تقوم بارجاع عدد عشوائي بين 0 و الرقم اللذي تحدده
ستقوم بارجاع رقم عشوائي بين 0 و 200
ثالثا كل اوبجكت نعطيه رقم معين يكون 1 او اكثر يرمز اليه
ولا يتشارك اوبجكتين برقم واحد
رابعا في الدارك بيسيك حركة رائعة وعي انك اذا لم تفهم احد الاوامر
في الكود ضع المؤشر فوق هذا الامر او الدالة و اضغط عليه بزر الماوس الايسر
سينتقل مؤشر الكتابة اليه و هنا اضغط على help ثم command help
او F1 و سظهر صفحة تشرح لك هذا الامر بالتفصيل .... واو
خامسا .... اذا كنت لا تفم ما هي عملية الـ for Next
حاول فهمها من المثال او راجع الدرس الثاني من سلسلة دروسي هناك شرحتها بالتفصيل الممل
كود:
sync on `جعل عمليات تحديث الشاشة غير تلقائية اي يمكن التحكم بها
sync rate 60 `جعل معدل تحديث الشاشة 60 صورة بالثانية كحد اقصى
autocam off `منع الكانيرا من الانتقال او النظر الى اخر اوبجكت تم استدعائه
`الان نريد اعداد الاوبجكتات حيث نريد 10 اوبجكتات فنستخدم الأمر
`For ... next
`سيقوم بانشاء عشرة اوبجكتات و وضعها يمكان عشوائي
`و تفعيل كشف التصادم عليها
`ثم تلوينها بلون عشوائي
for i = 1 to 10
make object cube i,20 `انشاء اوبجكت على شكل مكعب و ترقيمها و اعطاءها حجم و هنا 20
position object i,rnd(300) - 150, 10 ,rnd(300) - 150 `وضع هذه الاوبجكن بمكان عشوائي
set object collision on i `تفعيل كشف التصادم لهذا الاوبجكت
color object i, rgb(rnd(250),rnd(250),rnd(250)) `تلوين هذا الاوبجكت بلون عشوائي
next i
`الان حصلنا على عشرة اوبجكتات عبارة عن مكعبات مرقمة من 1 الى 10
`كل منها وضعت بمكان عشوائي و لونت بلون عشوائي
`و تم تفعيل كشف التصادم عليها
do `بداية الدائرة الرئيسية
`الآن دخلنا بالدائرة الرئيسة
` Main Loop
`و هذه الدائرة عبارة عن مجموعة اكواد و أوامر ستتحكم باللعبة
`اولا نقوم بحفظ احداثيات اللاعب او المكعب اللذي سنتحكم به
oldx# = object position x(1)
oldz# = object position z(1)
`الأمر التالي يتحكم باللاعب و هو عبارة عن دالة قمت بانشائها
`و ستجدونها بآخر البرنامج
control_player()
`هذه الدالة ستقوم بالتحكم بالكاميرا
`و ستكون الكاميرا عمودية فوق اللاعب
control_camera()
`التصادم:
`في هذا المثال استخدمت عملية تصادم بسيطة جدا
`اذا اصتدم اللاعب بأحد المكعبات الاخرى
`سيتم نقله الى اخر احداثيات قبل ان يحدث التصادم
`و هنا سترون مدى اهمية العملية
`for ... nexr
`الان سنقوم بالتحقق من التصادم بين كل من المكعبات و اللاعب
`علما ان اللاعب هو الاوبجكت رقم 1
`ليس من الضروري ان يكون اللاعب هو الاوبجكت رقم 1 الامر يعود اليك
for i = 2 to 10
`هنا سيتم التحقق من حدوث تصادم بين اللاعب (الاوبجكت رقم 1) وبين الاوبجكتات الاخرى من 2 الى 10
`و اذا كان هناك تصادم نعيد اللاعب الى الاحداثيات اللتي قمنا بحفظها في اول الدائرة الرئيسية
if object collision(1,i) then position object 1,oldx#,10,oldz#
next i
sync `تحديث الشاشة هو امر ضروري جدا في كل نهاية دائرة رئيسية
loop `نهاية الدائرة الرئيسية
` هنا كعادتي اضع في آخر الرنامج الدوال اللتي استدعيها اول البرنامج
` لكي يكون البرنامج مرتب
`اول دالة هي اللتي تتحكم بالمكعب رقم 1 و اللذي هو اللاعب
` قمت باستدعائها في الدائرة الرئيسية
function control_player()
`اولا نحفظ احداثيات اللاعب في ثلاث متغيرات
x# = object position x(1)
`اريد هنا ان اذكر ان في الدارك بيسيك
` Y
`هي احداثية الارتفاع كلما زادت زاد ارتفاع الاوبجكت
y# = object position y(1) `حفظ احداثي الارتفاع
z# = object position z(1)
`الان بعد ان حصلنا على احداثيات اللاعب
`بتزويدها او تنقيصها حسب ضغط ازرار الاتجاهات في الكي بورد
`z# اذا كان زر (فوق) مضغوط في لوحة المفاتيح نزيد 1 على المتغير
if upkey() then inc z#,1
`z# هنا اذا كان زر (اسفل) مضغوط سننقص 1 من المتغير
if downkey() then dec z#,1
`اذا كان ر (اليسار) مضغوط نقلل من قيمة المتغير بمقدار 1
if leftkey() then dec x#,1
`عكس السابقة
if rightkey() then inc x#,1
`الان ننقل اللاعب او المكعب الى الاحداثيات المعدلة
position object 1,x#,y#,z#
endfunction
function control_camera()
`في هذه الدالة سنجعل الكاميرا فوق اللاعب
`نأخذ احداثيات اللاعب و نحفظها في متغيرات
x# = object position x(1)
y# = object position y(1)
z# = object position z(1)
`نقوم بتعيين متغيرات لحساب موضع الكاميرا
camx# = x# `نعطي هذه الاحداثية للكاميرا بدون تغيير
camy# = y# + 150 `هذه احداثية الارتفاع و بما اننا نريد ان تكون الكاميرا فوق اللاعب نزيد 150 عن احداثي اللاعب
camz# = z# - 5 `هنا انقصت 5 لتكون الكاميرا منحنية قليلا
`ننقل الكاميرا الى الاحداثيات اللتي حصلنا عليها
position camera camx#,camy#,camz#
`نجعل الكاميرا تنظر الى اللاعب
point camera x#,y#,z#
endfunction
ردا على طلب Son of UAE
سأتكلم قليلا عن الـ frames
افترض انك استخدمت الثري دي استوديو لانشاء موديل ثلاثي الابعاد
ثم قمت بتحريكه داخل الثري دي استوديو
علما ان الثري دي استوديو يتعامل مع الفريمز
على سبيل المثال نجعل من الفريمز من 0 الى 20 حركات الوقفة
اي سيقوم البطل بالتنفس
و من 20 الى 50 حركات المشي اي سيحرك البطل او الشخصية اقدامه و ايديه
بحيث يبدو انه يمشي لكنه فعليا ثابت بمكانه حيث التحريك يكون في الدارك بيسيك
و من الفريم 50 الى 70 حركات الضرب
ثم نقوم بتصديرها الى ملف ثري دي و الدارك بيسيك يدعم نوعين من ملفات الثري دي
الاول و الافضل هو ملف .x و الثاني و الذي لا يدعمه الدارك بيسيك جيدا و هو ملف 3ds
و يستحسن استخدام مقبس لتصدير لملفات x و الافضل هو مقبس panda Xporter
و يمكنك تنزيله من هذه الصفحة
الان نقوم بادخاله الى الدارك بيسيك.....
نضع الملف في مجلد المشروع اي المجلد اللذي ستضع فيه الملف التطبيقي للعبة
و نقوم بتحميله عن طريق استخدام load object
لنفرض ان لدينا ملف اسمه hero.x و نريد ان نعطيه الـ ID رقم 2
load object "hero.x" , 2
و الان في حال ضغط اي زر من اسهم الاتجاه نريد ان يقوم البطل بالتحرك و كأنه يمشي
و فريمات المشي هي من 20 الى 50 كما حددنا في الثري دي استوديو ماكس
هناك طريقتين للتشغيل الفريمات
loop object : تشغيل الفريمات و ستقوم باعادة نفسها عند النهاية
play object : تشغيل الفريمات و عند انتهاء الفريمات ستتوف عن الحركة
و الـ parameters متطابقة في كل من الدالتين
الان لجعل الشخصية تتحرك و كأنها تمشي(تذكرو اننا عينا للشخصية الـ ID رقم 2 و فريمات المشي من 20 الى 50)
loop object 2 , 20 , 50
هذه في حالة المشي اي عن ضغط اللاعب لاي زر من ازرار التحريك
عند يكون اللاعب واقف اي لا يضغط اي زر من ازرار التحريك يجب ان نشغل الفريمات التي
تظهر فيهاالشخصية واقفة اي الفريمات من 0 ال 20
loop object 2 , 0 , 20
و هكذا..............
و في حالة الضرب نستخدم
play object 2 , 50 , 70
و عند توقف انتهاء الفريمات
if object playing (2) = 0
نعود الى الحالة السابقة اي الوقوف او المشي
____________________________________________________
سأقوم قريبا بعمل مثال عن الفريمز و سيكون عبارة عن نفس المثال في هذا الدرس لكن
باستخدام موديلات بدل من المكعبات :biggthump
رد: دروس في الدارك بيسيك الجزء الرابع
و هذا المثال من دون الـ comments
لمن لا يريدها
كود PHP:
sync on
autocam off
for i = 1 to 10
make object cube i,20
position object i,rnd(300) - 150, 10 ,rnd(300) - 150
set object collision on i
color object i, rgb(rnd(250),rnd(250),rnd(250))
next i
while
do
oldx# = object position x(1)
oldz# = object position z(1)
control_player()
control_camera()
`collision:
for i = 2 to 10
if object collision(1,i) then position object 1,oldx#,10,oldz#
next i
sync
loop
function control_player()
x# = object position x(1)
y# = object position y(1)
z# = object position z(1)
if upkey() then inc z#,1
if downkey() then dec z#,1
if leftkey() then dec x#,1
if rightkey() then inc x#,1
position object 1,x#,y#,z#
endfunction
function control_camera()
x# = object position x(1)
y# = object position y(1)
z# = object position z(1)
camx# = x#
camy# = y# + 80
camz# = z# - 5
position camera camx#,camy#,camz#
point camera x#,y#,z#
endfunction
الان سأقوم بمشاهدة بعض الانميات الى ان يحين موعد الافطار :biggthump
رد: دروس في الدارك بيسيك الجزء الرابع
السلام عليكم ورحمة اله وبركاته
شكراً ليك اخوي درس مفيد جداً وكان نفسي اطبقه
لاكن كمبيوتري لوحته ضربت (تلفت)للأسف ما فضل منه غير الهارد دسك والسي دي روم والسي دي رايتر وكرت الشاشة وكرت الشبكة وبعض القطع
وان شاء الله اول ما اشتري كمبيوتر راح استرجع دروسك كلها واطبقها ورمضان كريم
--------------------
وصياماً مقبولاً وافطاراً شهياً
رد: دروس في الدارك بيسيك الجزء الرابع
مشكور على الدرس و الصراحة انا فهمت كل سطر بالبرنامج و باقي التطبيق .. ان شاء الله بالليل موعد التجارب :D .. المشكلة منزل الدارك بيسك على كمبيوتر ثاني .. شكلي بنزله على هذا الكمبيوتر بعد ... :أفكر:
و شرح ممتاز و خصوصاً الملاحظات على كل امر :أفكر:
رد: دروس في الدارك بيسيك الجزء الرابع
1 --- المثال بالرد الثاني رسم لي مربعات من غير ما تتحرك الكاميرا .. وما قدرت احرك اي مربع .. و طبعاً انا مسحت الامر while لانه كان خلل بالبرنامج ...
2 --- المثال المرفق فاضي ... :31: ما ادري شو السالفة ؟!؟!؟!
ممكن توضيح ؟
رد: دروس في الدارك بيسيك الجزء الرابع
مشكور على درس وانا عندي مشكلة Son Of UAE
مع while حيث طلعلي خلل ؟؟
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
اشكراً snake_x86 على الدرس الرائع :biggthump , والمثال قمت بتشغيله مثال جيد جدا, اعجبني درس الـFrames ,واستفدت فعلاً من الدرس .
اخي انا متابع معاك في الدروس , درس يتلو درس . وفعلا اخذت معلومات جيدة عن اللغة ,جزاك الله خيراً .
في انتظار دروسك الرائعة.:biggthump
وشكراً
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
هذا الدرس أجبرني أطلب من أحدكم وصله لبرنامج الدارك بيسك ^_^
الفانكشن تذكرني بالمثود في الجافا
والكلمات الجاهزه تذكرني بــ GML
يعني إقتنعت بالدارك بيسك 100%
سلسلة رائعه وكل شي مفهم نظريـًا باقي العملي ^.^
مشكور وبالتوفيق
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
السلام عليكم
مشكور يا أخ snake_x86 على الدروس الرائعة
و بالتوفيق ان شاء الله :biggthump
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
باز== العفو ... و الله يعينك و يعننا جميعا على مشاكل الكمبيوترات و مبروك مقدما على الكمبيوتر الجديد.
son of UAE ==
المشكلة الاولى لما ما قدرت تحرك المربع ان موضع(مكان) المربعات يكون عشوائي
و احيانا ممكن يكون مربع اللاعب فوق مربع ثاني و بسبب التصادم ما تقدر تحرك شي!
والـ while ناسيها :D بالغلط,,, كنت راح اضيف كود يتأكد ان مربع اللاعب ما يكون داخل اي مربع ثاني
بس كنسلته عشان ما اعقد المثال :p
المشكلة الثانية تصير معي احيان .... جرب افتح ملف السورس (غير البروجيكت) و بيسألك سؤال قله يسسسسس
و انشاء الله بيشتغل و هاذه عبارة عن Bug بالدارك بيسيك
الحل لها موجود و هوانك تنزل GUI ثاني(ما يدعم العربية... ما تقدر تشوف الـComments) للدارك بيسيك او تسووي تحديث للـ GUI الحالي
لأن الأبديت للـ GUI غير الابديت للـ Compiler
prince of sorrow === احذف الـ while
Nash2 === الحمد لله انه اعجبك تراه ها هو المطلوب و العفو
من التراب === هلا فيك
وصلة البرنامج مع الكراك
ابديت الـ GUI او الـ IDE (ضرورية لتصحيح بعض الأخطاء في البرنامج)
adman == العفو
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
اقتباس:
باز== العفو ... و الله يعينك و يعننا جميعا على مشاكل الكمبيوترات و مبروك مقدما على الكمبيوتر الجديد
الله يبارك فيك
والله نسي اطبق درسك
اقتراح:ضع جميع روابط دروسك في توقيعك^^
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
اقتباس:
اقتراح:ضع جميع روابط دروسك في توقيعك^^
تم :biggthump
و مشكور على الاقتراح
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
شكرا على البرنامج والكراك الي ما عرفت أركبه ^.^
انتظر الدروس الجايه
وجزاك الله خير
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
اقتباس:
المشاركة الأصلية كتبت بواسطة من التراب
شكرا على البرنامج والكراك الي ما عرفت أركبه ^.^
انتظر الدروس الجايه
وجزاك الله خير
انسخ محتويات مجلد الـ Crack واللي هم:
DBPCompiler.exe
و
TGCCertificateViewer.exe
و خذهم على مجلد الـ Compiler داخل مجلد الدارك بيسيك (اسبدال)
و انشاء الله يشتغل معاك
رد: [درس] دروس في الدارك بيسيك الجزء الرابع
فهمت كل الدرس و تشكر و ما قصرت .. بخصوص الفريمات بالحركة واجهتني بعض المشاكل .. و الذي توصلت له هو الاتي : لقد استخدمت الباندا اكسبورتر ولكنه صدر لي ملف x من غير الحركة ... فقد كان حجم الملف بسيط جدا
قارنته مع ملف لعبة كهف الموت للاعب ولكن حجمه معقول بعض الشيء مع وجود اكساء له..
هلا وضحت خيرات الاكسبورتر المفروض اختيارها ( مستعجل للغاية )
و هلا وضعت درس للثري دي ماكس عن كيفيه صنع اكساء لشخصية بنفس طريقة الموجودة ... :أفكر: ( مهم جدا لمشروعي القادم )
و اسف على الاسئلة البدائية :D