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

مشاهدة النسخة كاملة : [درس] تعليم RGSS2 ومبادئها الأساسية



Ordaz
06-07-2008, 04:47 PM
السلام عليكم ورحمة الله وبركاته.
من عنوان الدرس: تعليم RGSS2 ومبادئها الأساسية. إن شاء الله هذا الدرس بادئة سلسلة دروس تعليم RGSS2.

تحذير: هذا الدرس طويل وهو جزئين. والراغبين في التعلم فقط هم من ينهونه دون ترك سطر منه. لذا الرجاء الخروج اذا لم تكن لك نية للتعلم.

ملاحظة مهمة جداً: RGSS2 هي فرع من لغة Ruby، ولكن Ruby نفسها ليست RGSS. شي يخربط شوي بس سهلة مع شوية تركيز.
عودة لموضوعنا:

أولاً: RGSS2 مثل أي لغة تتكون من مجموعة تعابير وقواعد ثابتة
وتبدأ اللائحة بـ:
نص الـComment/التعليق
وهذا يبدأ بـ#. ويهمل قارئ السكربت التعليقات، إذ هي مجرد ملاحظات تكتبها لنفسك ومستعملي السكربت لتفهيم عمله.مثال:



This is a comment#


المعرفات Identifiers:

مثال عليها:



hello
my_name_is_talal


المعرف في Ruby هو مايبدأ بحرف صغير lowercase او underscore ( _ ). وليس هناك حدود لطول المعرف.

الكلمات المحجوزة Reserved words

وهي 38 كلمة:


BEGIN class ensure nil self when


END def false not super while
alias defined? for or then yield
and do if redo true
begin else in rescue undef
break elsif module retry unless
case end next return until

ولايمكن اطلاقاً استعمال هذه الكلمات لأسماء صفوف classes. ولكن اذا سبقت بـ@ أو $، يمكن استعمالها كمتغير (أنظر ادناه).
مثال:



we can NOT use class nil
BUT we can use $nil = 10
and we can use def nil


التعابير Expressions

مثال:



true
(1+2)*3
if test then ok else ng end


يطلق مصطلح "تعبير" على كل مايوجد في روبي. وان مجموعة تعابير معينة تُخلِّق برمجية ruby
وتفصل عن بعضها البعض باستخدام الفاصلة المنقوطة ( ; )


ثانياً: الثوابت والمتغيرات

لابد من اي لغة برمجة ان تحتوي على هاتين الاثنتين، بدونهما لايمكننا ابداً ان نجري عمليات حسابية مما يحيل حياتنا جحيماً! ولغة ruby تحتوي الآتي:-

1)متغيرات محلية Local Variables
2)متغيرات محدودة Instance variables
3)متغيرات الصفوف class variables
4)متغيرات عامة/عالمية Global variables
5)الثوابت Constants

وسنذكر كل واحد بالتفصيل:
المتغيرات المحلية: مثال عليها


ruby

يذكركم هذا بشيء؟:33: ... انها نفسها المعرفات. وتحتاج الى اعلان declaration قبل استعمالها.


المتغيرات المحدودة: مثال عليها


@myname

المتغيرات المبدوءة بـ’@’ تعد متغيرات محدودة، وهي تعود الى اماكن معينة من السكربت، وهذه المتغيرات يمكن أن ترجع من أي صنف او فئة فرعية في السكربت نفسه.


متغيرات الصفوف: مثال عليها



class A
@@A = 1
def B
puts @@AA
end
end


المتغيرات المبدوءة بـ"@@" تسمى متغيرات الصفوف، ويتم تعريفها في صف ما ويمكن الرجوع اليها في نفس الصف.
المتغيرات العامة/ العالمية: مثال عليها



$name


المتغيرات المبدوءة بـ$ تسمى متغيرات عامة. ويمكن الرجوع اليها من اي مكان في البرنامج (إذن يستحسن الحذر عند الإستعمال). ولا تحتاج الى اعلان، وقيمة اي متغير غير مشغل = nil.


الثوابت: مثال عليها:



RUBY = 'ruby'


انتبه!! هذا لايعد معرفاً. لأنه لايبدأ بحروف صغيرة lowercase.
ولكن الثوابت لديها نظام مختلف عن المتغيرات في الرجوع.




class Identity
NAME = 'SOMEBODY'
end
class Checkin < Identity
p NAME # Gives us "SOMEBODY"
end
p Identity::NAME # Gives us "SOMEBODY"


والآن انظر هنا.
المتغير NAME موجود فقط في صف Identity. لكن من الممكن الرجوع الى الصف باستخدام < التي تعني أن صف Checkin يتَّبِع صف Identity ويرجع الى ثوابته ومتغيراته.
أي ان Identity = Checkin Superclass


نسينا شيئاً! لقد تكلمت قبل قليل عن nil. فهل عرفنا ماهي؟
انها تعد متغيراً كاذباً Pseudo variable.
وأمثلة آخرى: self, true, false. وهذه تعمل على صفوف خاصة بها في Ruby. مثل
NilClass.


ثالثاً: الحرفيات Literals.


القيم التي تصرّف فوراً في Ruby مثل رقم 1 او القيمة "Hello" تعد من الحرفيات.
وهي 7 انواع:
1) الحرفيات الرقمية Numerical Literals
مثل 1,2,3 أو 0xffff.
يمكن ان تحتوي الحرفيات الرقمية على Underscore. فمترجم الـRuby يتجاهلها ولا يترجمها بشكل خاص. مثل:



03_10_1987 # => 03101987
29_03_1928 # => 29031928




2)مدخلات حرفية String Literals
مثال عليها:



"this is a string expression\n"


'this is a string expression'

الحرفيات المحاطة بـ"-" أو '-' تسمى strings.
ملاحظة: الحرفيات المفصولة بمسافة فارغة تدمج اوتوماتيكياً



p"mon" "tada" # montada


الفروق بين " " و ' '
ان التنقيط المزدوج = \\ ويسمح ببديل التعبير (#{}) مثل:




class RGSS2

"NAME = "Tutorial$
"p" This is a #{$NAME} related to RGSS2



في حين عند عمل الآتي:



class RGSS2

"NAME = "Tutorial$
'p' This is a #{$NAME} related to RGSS2


سوف يصبح لدينا This is a #{$NAME} related to RGSS2 لكن " " ابطأ نوعاً من
' ' لأنها تستهلك CPU اعلى :D

3)التعابير المنتظمة Regular Expression
مثل:


/^Ruby the OOPL/


/Ruby/i
/my name is #{myname}/


يبدو هذا شائقاً! لم أفهم :boggled:.
حسناً، هذه التعابير المنتظمة هي ماحددت بـBackslash او ( \ ).
الحروف التي تتبع الـSlash النهائي فوراً تدل على خيار التعبير المنتظم:
i
وتعني مقارنة التعبير المنتظم غير حساسة لحالة الأحرف.
m
وتعني ان السطور الجديدة تعني انها تعد حروفاً طبيعية (مقارنةً مثلاً بـالنقطة "." )

4)تعابير الصف Array Expression: مثال:



[1, 2, 3]



تعيد تعابير الصف نتيجة كل تعبير. والـArray محدود للصف Array في RGSS2


5)الـHash Expressions: مثال عليها:


{1=>2, 2=>4, 3=>6}


تعيد علامة رقم Hash تخطيط قيمة ناتجة إلى مفتاح (Key). علامات الأرقام محدودة للصف Hash.
وعلامة الرقم ويمكن تسميتها بـAssociative array يمكنها ربط جسمين Objects مع بعضها البعض.


6)تعابير المدى Range Expressions: مثال:



1 .. 20


إذا ظهر هذا في أي مكان عدا التعبير الشرطي، يعيد المدى الإحتمالات من تعبير 1 الى تعبير 2.
والـ( .. ) تظهر الأرقام بين الرقمين التي هي بينهما. مثلا المثال، النقطتين تعني 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20. للإختصار نقوم بوضع هاتين النقطتين.


7) الرموز Symbols: مثل



:class
:lvar
:method
:$gvar
:@ivar
:+



رموز عائدات التي لها اتصال بين اثنين مراسلة بالـStrings.
والرموز اجسام Objects فريدة تعطي نفس الـجسم عند التقييم Evaluation


---------------------------------يتبع (يعني لسه ماخلصنا درس1)---------------------------------

Karim Ghazal
06-07-2008, 07:07 PM
شكراً يا أورداز على درسك القيم هذا , سوف أقراه حرف حرف .. و أبدأ بكتابة السكربتات بيدي

حتى لو كانت تافهة !! و سوف أضيفك في Credits !! تشكر يا بطل ..

Ordaz
06-07-2008, 07:25 PM
شكراً يا أورداز على درسك القيم هذا , سوف أقراه حرف حرف .. و أبدأ بكتابة السكربتات بيدي




حتى لو كانت تافهة !! و سوف أضيفك في Credits !! تشكر يا بطل ..

شكراً خيو! :D
بس للأسف هذا كله تقريباً ما ينفع لعمل سكربت. اتوقع مع الدرس الثالث سوف نبدأ بعمل سكربتات خاصة فينا ^^

PrinceOfSorrow
08-07-2008, 09:38 AM
السلام عليكم ورحمة الله وبركاته

هذه خطوة جبارة منك أخوي العزيز Ordaz !!
مرجع ممتاز وأسمحلي اني أخذ منك أذن لمشروع خاص لهذا الموضوع ^___~
تفاصيل ستكون بيني وبينك أن شاء الله

Ordaz
08-07-2008, 05:15 PM
تابع درس 1

والآن لنبدأ شرح بعض السكربتات المكتوبة بلغة RGSS2:


class Hello_World


class Hello_World
p"Hello"
end


شرحه:
class Hello_World هي اعلان لصف\Class جديد يضاف الى قاعدة بيانات RGSS2.
p تعني طباعة او عمل صندوق حوار Dialog.
"Hello" هي مايوجد في صندوق الحوار الذي تم اعلانه باستخدام p.
end انهاء الصف الذي تم اعلانه "Hello_World".
وتوتة توتة خلصت الحدوته! سكربت بسيط سهل الاستيعاب.


سكربت آخر اعقد قليلاً:


class Game


def initialize
$RMVXCORP = "Enterbrain"
$WINDOWSCORP = "Microsoft"
p"RPG Maker VX is produced by #{$RMVXCORP} and Windows VISTA is produced by #{$WINDOWSCORP}"
end
end


وشرحه كالآتي:-
class Game بداية صف
def initialize تعني اننا بدأنا Definition او تعريف.
$RMVXCORP = متغير عام.
$WINDOWSCORP = انظر اعلاه
p اختصار Print او عمل صندوق حوار.
الـString يحتوي على #{} أو ما يعني ان نضع قيمة المتغير العام مابين الاقواس. وهذا شبيه قليلاً بالـtext.gsub التي سندرسها في الدرس القادم، ان شاء الله.
end انهاء الـDefinition
end انهاء الصف.
------------------------------------
ليس شيئاً معقداً لدرجة! يمكنك فهم السكربت بشيء من التركيز الأقل من قليل.


ونأخذ آخر شبيه ولكن متقدم اكثر (صفين هذه المرة)



class Montada
ID = "404209"
MEMBER = "Ordaz"
end
class Game_Making_Forum < Montada
def initialize


MEMBER2 = "PrinceOfSorrow"
p [MEMBER, MEMBER2, ID]
end
end
p Montada::MEMBER


أها! صفين مختلفين ونحتاج الى شرح:
class اعلان لصف جديد (من الآن فصاعداُ لن اقول شيئاً. فقد حفظنا ماذا يعني)


ID + MEMBER = ثوابت. هاتان تتغيران بدون مشاكل في module. سنرى كيف بعد قليل.
end نهاية صف (من الآن فصاعداُ لن اقول شيئاً. فقد حفظنا ماذا يعني)


class Game_Making_Forum > Montada تعني ان Game_Making Forum صف تابع لـMontada.


def initialize تعني Definition (من الآن فصاعداُ لن اقول شيئاً. فقد حفظنا ماذا تعني)


p هذه المرة مختلفة. حيث اننا الآن نستعمل اقواس Array لطبع MEMBER, MEMBER2 و ID..
p Montada::MEMBER تعني ان نطبع MEMBER الموجودة في Montada.
--------------------------------------
آخ. ظننتها صعبة لكنها اسهل من شرب الماء .
وممكن تعديل الثوابت بحرية نوعاً ما. عند عمل module (وهي ليست مصاص دماء فلا تخاف)
مثل:



module Ruby
RUBY = "Ruby Programming Language" #Full name
RGSS2 = "Ruby Game Scripting System 2"
end




هذا مثال على الـmodule. غالباً ماتكون موجودة في اكثر السكربتات التي فيها Configuration System. مثل Messaging System او Battle System.
فالثابت RUBY الآن يمكن اعتبارها متغيراً عاماً في السكربت حيث ممكن استدعاءها باستخدام Ruby::RUBY و كذلك الثابت RGSS2. لكن احذر. انظر ادناه:



class Hello
$Something = Something
module Bye
Something = Something
end
end


احذر! توقف! هذه كارثة! لا يمكن وضع module داخل صف!
لا يمكن وضع module داخل صف! لا-يمكن-وضع-module-داخل-صف!
إحفظ هذا! فهو مهم. انه الصف اولاً ثم ابدأ بالـmodule.

-----------------------------------------------------
نهاية الدرس وفي الدرس القادم ان احيانا الله، سندرس معاً كيف نعمل Bitmap او رسمة في الخريطة.
والسلام عليكم ورحمة الله وبركاته.

.AJ.
08-07-2008, 07:28 PM
نايس نايس نايس

باين أنكم شغالين على الاسكربات من الخاطر :) اشكرك أخوي على تعبك في القسم وما تقدمه للار بي جي ميكر

انا بعدي ما قرات الدروس (عندي امتحانات النهائيه للفصل الصيفي الاول الاسبوع الجاي)

ان شاء الله اول ما افضى راح اقراء كل ما هو موجود :) وراح اساعدكم ان شاء الله ولو بشيء بسيط

aliasdcxz
29-05-2009, 05:42 PM
السلام عليكم

سامحوني بس مافهمت شي

Karim Ghazal
29-05-2009, 10:44 PM
على كولة سامي , يا حليلك XD ..


مُغلق لأن الموضوع قديم