دروس في الدارك بيسيك الجزء الثاني
مع Snake_x86
مقدمة: في الدرس الماضي ركزت على واجهة الدارك بيسيك و لم اتكلم كثيرا عن لغة البرمجة.
و في هذا الدرس سأشرح الاساسيات للغة....
و هنا اريد ان انوه انني افترض ان القاريء لديه خلفية في البرمجة على اي لغة اخرى
مثل ال GML و الفيجوال بيسيك او السي , اي لغة او سكريبت
اذا كنت اريد التعليم من الصفر سيشيب شعري و لن تتعلموا شيء مفيد.
****معلومة مهمة: لن اتطرف الى جميع اوامر الدارك بيسيك فكلها موجودة مع ملفات
المساعدة المرفقة مع الدارك بيسيك,مرتبة, منسقة, مشروحة بالتفصيل كل ما عليكم فعله
هو: من الدارك بيسيك اضغط help ثم Command Help ستظهر نافذة اختر Commands.
و هنا يوجد كل شيء مشروح مرتب حسب الوظيفة و اهم قسم بالنسبة لل 3دي هو قسم Basic3D Commands.
قبل ان ابدأ اذا كنت تبحث عن دروس بسيطة راجع هذا الدرس(ليس من كتابتي).
و اريد ان اذكر بأشياء اشرت اليها في الجزء الاول من دروسي:
· الدارك بيسيك لا يفرق بين حرف صغير و كبير.
· اغلبية اوامر الدارك بيسيك تحتوي على فراغات مثلا position camera على عكس اللغات الاخرى
سأبدأ بشرح طريقة عمل عملية ال IF else
الحالة الاولى(بدون Else):
كود PHP:
IF heroHP < 1 then killhero()
If HeroHP < 1
Killhero()
Restartlevel()
Endif
الحالة الثانية (ELSE):
كود PHP:
If MonsterHP < 1 then MonsterDie() else whatever()
If ccc = 5
ccc = ccc + 5
aaa = aaa + 4
else
nnn = 3
ddd = 0
endif
ادوات المقارنة الموجودة بالدارك بيسيك:
= , <> , < , <= , > , >= و كل منها يشرح نفسه
و بالنسبة لل and و الـ or:
if (a = 10 and b = 5) then cc = 5
if (k <>4 or c>9) then bbb =88
ملاحظة: يمكنك استخدام الاقواس و عدم استخدمها الامر يعود لك حيث لن يؤثر وجودها او عدم وجودها
اذا كان لديك خلفية جيدة بالبرمجة اعتقد انك ستكون قد فهمت موضوع ال IF
علما ان الاوامر التي استخدمتها بالمثال غير موجودة بالدارك بيسيك انما استخدمتها كمثال
الان الى احد اهم العمليات في برمجة الالعاب و هي عملية for next
و هنا سأقوم بشرحها كليا لانني اعتقد ان الكثير لا يعرفها او يعرف ما الفائدة منها
اولا الهيكل:
كود PHP:
For [variable] = [InitialNumber] to [LastNumber]
dothis()
dothat()
dowhatever()
next [variable[
الان الى الشرح.... تمعن الهيكل اعلاه
ثم هاذا امثال:
كود PHP:
For number = 1 to 5
Print number
Next number
ماللذي يحدث هنا؟
سيقوم الدارك بيسيك بتعيين متغيير جديد(مؤقت) بالذاكرة اسمه number و سيعطيه القيمة الاولية (1 في المثال)
ثم سيقوم بتشغيل التعليمات بين السطر الذي يبدأ بـ For و السطر الذي يبدأ بـ Next
الان سيضاف للمتغير (1في المثال) "1" و سيصبح 2
بعد ذلك سيعود و يشغل التعيمات داخل عملية For
الى ان يصل المتغير الى الرقم الاخير و الذذي هو 5 بالمثال
و في حالة المثال ستكون النتيجة:
1
2
3
4
5
جربها بنفسك:
كود PHP:
For number = 1 to 5
Print number
Next number
Wait key
علما ان التعليمة الاخيرة تعني ان يتوقف الدارك بيسيك عن قراءة باقي الاسطر حتى يتم ضغط اي زر بالكيبورد
-----------------------------------------------------------------------------------------------------
الان سانتقل الى المصفوفات و سأشرح المصفوفة ذات البعد الواحد فقط لاني لم استخدم غيرها
المصفوفات هي متغيرات.....
لكن هذه المتغيرات تحتوي داخلها متغيرات فرعية اخرى ليس لها اسامي بل مرقمة نصاعديا
بداية من الصفر
لنتخيل المصفوفات كدفتر او كتاب صفحاته مرقمة من الصفر الى مئة
كل صفحة تحتوي على محتويات مختلفة
ما فائدتها؟
افترض ان لديك 50 وحش داخل اللعبة و هذا الرقم غير ثابت من جولة لأخرى
هل يعقل انه عليك ان تعرف لكل وحش متغيرات للطاقة و الاحداثيات و الحالة .... اخ؟؟؟
هنا تأتي اهمية المصفوفات
حيث تحدد مصفوفة واحدة مثلا للطاقة تضم طاقات جميع الوحوش يمكنك التحكم بها و الوصول اليها بسهولة..
الان كيفية التعامل مع المصفوفات...
اولا المصفوفة يجب ان تكون معرفة لتعريف المصفوفة نستخدم DIM
Dim arrayname(topnumber) as type
حيث arrayname هو اسم المصفوفة اللذي تريده و topnumber هو عدد الصفوف التي تريدها داخل المصفوفة (عدد الاوراق في مثال الكتاب)
كيفية استخدامها؟
كما تستخدم المتغيرات تماما لكن باضافة بسيطة....
تذكر مثال الكتاب و الصفحات....
اولا علينا تكوين المصفوفة , اي صناعة الكتاب و سيكون فالرغ في البداية و لنسمي الكتاب TheBookOfNumbers و سيكون عدد صفحاته 50 و يحتوي على ارقام اي نوع المتغير Integer
Dim TheBookOfNumbers(50) as integer
لادخال قيمة 400 مثلا بالمصفوفة بالصف رقم 6 .... لكتابة قيمة في الصفحة رقم 6:
TheBookOfNumbers(6) = 400
الان اصبح لدينا في الصفحة 6 من هذا الكتاب رقم و هو 400
لنعود و نقرأ هذه الصفحة:
Number = TheBookOfNumbers(5)
الان المتغير Number سيحصل على النسخة من الرقم الموجود في تلك الصفحة من الكتاب وهي 400
و من هنا سأعطيكم مدى فائدة المصفوفات مع عملية ال for next
تمعنوا هذا المثال
كود PHP:
For i = 1 to 50
If monsterExist(i)
If monsterHP(i) < 1 then killMonster(i)
Endif
Next i
ما هذا؟؟
لنفرض ان لعبتك تتحمل 50 وحش و كل وحش له رقم
هذه العملية ستقوم بمعاينة كل الوحوش من الوحش 1 حتى 50
اذا كان هذا الوحش موجود ستتحقق من طاقته اذا كانت تحت الواحد سيموت الوحش و يتوقف عن الحركة
صعبة؟ ......... اذا اهلا بك في عالم برمجة الالعاب الحقيقي
-----------------------------------------------------------------------
سأكتفي بهذا الحد من المعلومات حتا الان .... لقد تعبت
و سأتابع في الدرس القاد و سيكون موضوعنا هو The Main Game Loop
اي دائرة اللعبة الرئيسية
و سنقوم بصناعة لعبة ثلاثية الابعاد 100%
و اذكر بضرورة قرائة دروس الاخ GOGENDANTES من هنا
و من ثم تصفح ملفات المساعدة في الدارك بيسيك خاصةً
قسمين:
Getting started و Principles
اذكر بشي وهو عدم نقل هذى الموضوع الا باذن مني و بوضع وصلة لهذه الصفحة
و سأضمن عدم حدوث ذلك