CalmKiller
11-07-2010, 01:10 PM
بسم الله الرحمن الرحيم
حقيقة قبل بداية اي درس اقوم بعمل مسودات لما ساوضحه.
ولكن درس اليوم عملي.
اذن كيف ؟
الجواب : سأقوم بوضع مجموعة من الأكواد و اريكم الفرق بين الكود و الأخر و ما الأفضل و لماذا.
________________________________________________________
________________________ المنهاج الأول________________________
________________________________________________________
ماذا حدث ؟
صممت لعبة و عرفت فيها منشأ الشخصيات كالأتي
Structure Character_ingame
Dim name As String
Dim X_loc As Integer
Dim Y_loc As Integer
Dim Z_loc As Integer
Dim Level As Integer
Dim Str As Integer
Dim Acc As Integer
Dim Mag As Integer
Dim Def As Integer
End Structure
هل فهمت اي شيء ؟
دعني اوضح
الأن نحن نستخدم لغة تقريبا مثل البيسيك المرئي Visual Basic ~لماذا : لأنه اسهل و اكثر انتشارا بين الناس~
ولكن ما سنطبقه هنا
يمكنك استخدامه لأي لغة .
الأن لقد عرفنا ~منشأ ~Structure~ للشخصيات, بمعنى ؟
انه في كل مرة سوف يستدعى هذا المنشاء سوف تقوم بتعبئة البيانات التي فيه
و ما هي تلك البيانات ؟
name, X_loc,Y_loc,Z_loc,Level,Str,Acc,Mag,Def
كما هو واضح
name = اسم الشخصية
X_loc = موقع الشخصية بالاحداثي السيني X
Y_loc = موقع الشخصية بالاحداثي الصادي Y
Z_loc = موقع الشخصية بالاحداثي العيني Z
Level = مستوى الشخصية
Str = القوة >> ملحوظة Str اختصار لكلمة Strength
Acc = الدقة >> ملحوظة Acc اختصار لكلمة Accuracy
Mag = القوة السحرية >> ملحوظة Mag اختصار لكلمة Magic
Def = الدفاع >> ملحوظة Def اختصار لكلمة Defense
وفي تلك اللعبة اضفت ميزة ان اللاعب بأمكانه استدعاء وحش ما للمقاتلة في صالحه
ولكن اللاعب لا يستطيع استدعاء وحش اقوى منه في المستوى
و اضفت نظامين :
الأول لتحديد الفرق بين اللاعب و الوحش في المستوى
و الثاني لتحديد مكان اللاعب حتى يقوم باستدعاء الوحش بالقرب منه
و كان كود النظامين كالأتي :
الأول:
Function Diffrence( The_Player,The_Monster)
If The_Player.Level > TheMonster.Level
Then
return true
Else
return false
End If
End Function
شرح النظام
عند استدعاء هذا النظام يجب عليك ادراج اللاعب The_Player واللذي هو في الأساس منشأ من نوع Character_ingame الذي شرحناه في السابق
و ادراج الوحش The_Monster و هو في الغالب منشأ ايضا و لكن يختلف عن منشأ اللاعب
مع انه يحتوي على (مستوى و قوة و أشياء اخرى )
اذن ماذا يفعل النظام ؟
يقوم هذا النظام بالمقارنة بين مستوى اللاعب و مستوى الوحش
اذا وجد ان مستوى اللاعب اعلى يقوم بأعادة القيمة True
اذا وجد ان مستوى اللاعب اقل او في نفس مستوى الوحش او غير ذلك يقوم بأعادة القيمة False
و ذلك بأستخدام الدالة If
و الأن مع شرح النظام الثاني :
Function Get_player_loc( The_player)
Dim XYZ As Location_Set
XYZ.x = The_player.X_loc
XYZ.y = The_player.Y_loc
XYZ.z = The_player.Z_loc
return XYZ
End Function
اذن ماذا يفعل هذا النظام ؟
لايجاد احداثيات اللاعب عند استدعاء هذا النظام تقوم بادخال The_player والذي هوة عبارة عن منشأ اللاعب الذي صممته و تعرف XYZ على انه منشأ آخر من نوع Location_set
هذا المنشأ مهمتة حمل احداثيات معينة.
يقوم النظام باعادة هذا المنشأ الحامل للاحداثيات بعد استدعاءه.
الأن ندخل في المهم
ميزة استدعاء الوحش :
ايضا ما هي الا عبارة عن نظام آخر
وهو كالتالي
Function Summon_MonsterForPlayer( The_player, The_monster)
If Diffrence( The_player, The_Monster) = true
Then
Dim Loc As Location_set = Get_player_loc( The_player)
Create_UNHARM_Monster(The_player,The_Monster,Loc)
Else
Nothing
End If
End Function
اذن هذا النظام عند استدعاءه تقوم بأدخال منشأ اللاعب و الوحش
و النظام بحد ذاته يستدعى نظام المقارنة و الاحداثيات
اذا كان كل شيء سليم
سوف يستدعى النظام نظاما آخر لانزال الوحش بجانب اللاعب و هو Create_UNHARM_Monster
اذن
هل فهمت
هذه الأكواد ليست تنسخ و تلصق
وقد قصدت صنعها هكذا
انها تفهم فقط
هل ترى المنطق ؟
اذن
دعني اقل لك
هناك منطق افضل
لماذا صنعنا كل هذه الأنظمة ؟
الا يمكن اختصارها ؟
انظر لهذا المنطق الأخر و قل لي رأيك بين المنطقين
أولاً
نغير منشأ الشخصية للأتي
Structure Character_ingame
Dim name As String
Dim Location As Location_set
Dim Level As Integer
Dim Str As Integer
Dim Acc As Integer
Dim Mag As Integer
Dim Def As Integer
End Structure
و نلغي نظام ايجاد الاحداثيات و نظام المقارنة بين المستوى
و نجدد في كود الاستدعاء ليصبح كالأتي :
Function Summon_MonsterForPlayer( The_player, The_monster)
If The_player.Level > The_monster.Level
Then
Create_UNHARM_Monster(The_player,The_Monster,The_player.Location)
Else
Nothing
End If
End Function
هل تسأل نفسك الأن ~ ماذا فعلنا ؟ و ماذا استفدنا ؟~
ان كنت تسأل نفسك هذين السؤالين
فأنت في الطريق الصحيح للتعلم
أهنئك من كل قلبي
و الأن سوف اشرح
حتى نختصر الوقت ...
و الأكواد ...
قمت بتجديد منشأ الشخصية
و قمت بمسح انظمة تحديد الأماكن و الفرق في المستوى
و قمت بدمج الجميع في نظام الاستدعاء
فأصبح نظام الاستدعاء يفعل الأتي
يرى الفرق بين مستوى الشخصية و الوحش
و يستدعي الوحش بجانب الشخصية
ولا حاجة لنظام يحدد مكان الشخصية
لأن المكان موجود في الشخصية من الأساس
هل تصدق ان قلت لك
ان مجموعة الأكواد السابقة
يمكن اختصارها اكثر و اكثر ؟
نعم!
يمكن ذلك
كله يعتمد عليك
على منطقك
على طريقة تفكيرك
انت من تحدد مستواك
و ليس انا
و ليس غيري
لا حدود لك الا حدود عمرك
لتتعلم و تعلم
فأنت ~ صانع الألعاب ~
حقيقة قبل بداية اي درس اقوم بعمل مسودات لما ساوضحه.
ولكن درس اليوم عملي.
اذن كيف ؟
الجواب : سأقوم بوضع مجموعة من الأكواد و اريكم الفرق بين الكود و الأخر و ما الأفضل و لماذا.
________________________________________________________
________________________ المنهاج الأول________________________
________________________________________________________
ماذا حدث ؟
صممت لعبة و عرفت فيها منشأ الشخصيات كالأتي
Structure Character_ingame
Dim name As String
Dim X_loc As Integer
Dim Y_loc As Integer
Dim Z_loc As Integer
Dim Level As Integer
Dim Str As Integer
Dim Acc As Integer
Dim Mag As Integer
Dim Def As Integer
End Structure
هل فهمت اي شيء ؟
دعني اوضح
الأن نحن نستخدم لغة تقريبا مثل البيسيك المرئي Visual Basic ~لماذا : لأنه اسهل و اكثر انتشارا بين الناس~
ولكن ما سنطبقه هنا
يمكنك استخدامه لأي لغة .
الأن لقد عرفنا ~منشأ ~Structure~ للشخصيات, بمعنى ؟
انه في كل مرة سوف يستدعى هذا المنشاء سوف تقوم بتعبئة البيانات التي فيه
و ما هي تلك البيانات ؟
name, X_loc,Y_loc,Z_loc,Level,Str,Acc,Mag,Def
كما هو واضح
name = اسم الشخصية
X_loc = موقع الشخصية بالاحداثي السيني X
Y_loc = موقع الشخصية بالاحداثي الصادي Y
Z_loc = موقع الشخصية بالاحداثي العيني Z
Level = مستوى الشخصية
Str = القوة >> ملحوظة Str اختصار لكلمة Strength
Acc = الدقة >> ملحوظة Acc اختصار لكلمة Accuracy
Mag = القوة السحرية >> ملحوظة Mag اختصار لكلمة Magic
Def = الدفاع >> ملحوظة Def اختصار لكلمة Defense
وفي تلك اللعبة اضفت ميزة ان اللاعب بأمكانه استدعاء وحش ما للمقاتلة في صالحه
ولكن اللاعب لا يستطيع استدعاء وحش اقوى منه في المستوى
و اضفت نظامين :
الأول لتحديد الفرق بين اللاعب و الوحش في المستوى
و الثاني لتحديد مكان اللاعب حتى يقوم باستدعاء الوحش بالقرب منه
و كان كود النظامين كالأتي :
الأول:
Function Diffrence( The_Player,The_Monster)
If The_Player.Level > TheMonster.Level
Then
return true
Else
return false
End If
End Function
شرح النظام
عند استدعاء هذا النظام يجب عليك ادراج اللاعب The_Player واللذي هو في الأساس منشأ من نوع Character_ingame الذي شرحناه في السابق
و ادراج الوحش The_Monster و هو في الغالب منشأ ايضا و لكن يختلف عن منشأ اللاعب
مع انه يحتوي على (مستوى و قوة و أشياء اخرى )
اذن ماذا يفعل النظام ؟
يقوم هذا النظام بالمقارنة بين مستوى اللاعب و مستوى الوحش
اذا وجد ان مستوى اللاعب اعلى يقوم بأعادة القيمة True
اذا وجد ان مستوى اللاعب اقل او في نفس مستوى الوحش او غير ذلك يقوم بأعادة القيمة False
و ذلك بأستخدام الدالة If
و الأن مع شرح النظام الثاني :
Function Get_player_loc( The_player)
Dim XYZ As Location_Set
XYZ.x = The_player.X_loc
XYZ.y = The_player.Y_loc
XYZ.z = The_player.Z_loc
return XYZ
End Function
اذن ماذا يفعل هذا النظام ؟
لايجاد احداثيات اللاعب عند استدعاء هذا النظام تقوم بادخال The_player والذي هوة عبارة عن منشأ اللاعب الذي صممته و تعرف XYZ على انه منشأ آخر من نوع Location_set
هذا المنشأ مهمتة حمل احداثيات معينة.
يقوم النظام باعادة هذا المنشأ الحامل للاحداثيات بعد استدعاءه.
الأن ندخل في المهم
ميزة استدعاء الوحش :
ايضا ما هي الا عبارة عن نظام آخر
وهو كالتالي
Function Summon_MonsterForPlayer( The_player, The_monster)
If Diffrence( The_player, The_Monster) = true
Then
Dim Loc As Location_set = Get_player_loc( The_player)
Create_UNHARM_Monster(The_player,The_Monster,Loc)
Else
Nothing
End If
End Function
اذن هذا النظام عند استدعاءه تقوم بأدخال منشأ اللاعب و الوحش
و النظام بحد ذاته يستدعى نظام المقارنة و الاحداثيات
اذا كان كل شيء سليم
سوف يستدعى النظام نظاما آخر لانزال الوحش بجانب اللاعب و هو Create_UNHARM_Monster
اذن
هل فهمت
هذه الأكواد ليست تنسخ و تلصق
وقد قصدت صنعها هكذا
انها تفهم فقط
هل ترى المنطق ؟
اذن
دعني اقل لك
هناك منطق افضل
لماذا صنعنا كل هذه الأنظمة ؟
الا يمكن اختصارها ؟
انظر لهذا المنطق الأخر و قل لي رأيك بين المنطقين
أولاً
نغير منشأ الشخصية للأتي
Structure Character_ingame
Dim name As String
Dim Location As Location_set
Dim Level As Integer
Dim Str As Integer
Dim Acc As Integer
Dim Mag As Integer
Dim Def As Integer
End Structure
و نلغي نظام ايجاد الاحداثيات و نظام المقارنة بين المستوى
و نجدد في كود الاستدعاء ليصبح كالأتي :
Function Summon_MonsterForPlayer( The_player, The_monster)
If The_player.Level > The_monster.Level
Then
Create_UNHARM_Monster(The_player,The_Monster,The_player.Location)
Else
Nothing
End If
End Function
هل تسأل نفسك الأن ~ ماذا فعلنا ؟ و ماذا استفدنا ؟~
ان كنت تسأل نفسك هذين السؤالين
فأنت في الطريق الصحيح للتعلم
أهنئك من كل قلبي
و الأن سوف اشرح
حتى نختصر الوقت ...
و الأكواد ...
قمت بتجديد منشأ الشخصية
و قمت بمسح انظمة تحديد الأماكن و الفرق في المستوى
و قمت بدمج الجميع في نظام الاستدعاء
فأصبح نظام الاستدعاء يفعل الأتي
يرى الفرق بين مستوى الشخصية و الوحش
و يستدعي الوحش بجانب الشخصية
ولا حاجة لنظام يحدد مكان الشخصية
لأن المكان موجود في الشخصية من الأساس
هل تصدق ان قلت لك
ان مجموعة الأكواد السابقة
يمكن اختصارها اكثر و اكثر ؟
نعم!
يمكن ذلك
كله يعتمد عليك
على منطقك
على طريقة تفكيرك
انت من تحدد مستواك
و ليس انا
و ليس غيري
لا حدود لك الا حدود عمرك
لتتعلم و تعلم
فأنت ~ صانع الألعاب ~