الشبكة العربية لمطوري الألعاب

خبير  algeria مشاركة 1

السلام عليكم ورحمة الله تعالى وبركاته
إخواني أتمنى شرحا مختصرا ودقيقا للدوال التالي
Enum
Struct
وأيضا المؤشرات
درستها جيدا وعرفت الكثير عنها
لكن إن قلت لي أعطنا أمثلة , فسأعجز عن ذلك

أفيدونا بشرح مختصر لكن دقيق لها
مع أمثلة بسيطة
وستكون إجابتكم لي فائدة لي ولمن سيدخل
الموضوع بحثا عن نفس الشرح

وجعل الله هذا في ميزان حسناتكم

----------------------------------------------------
إخواني اليوم بإذن الله ليلة القدر , فإن لليلة القدر
علامات تدل عنها وقد لاحظت هاته العلامات (شمس مضيئة ودافئة , يوم لا بارد ولا حار , وبدون رياح , السكينة .. إلخ)
فأحسنوا في هذا اليوم وأكثروا من الدعاء بالتوفيق والهداية والاستقامة والمغفرة والعتق من النار , وفقنا الله جميعا
والله أعلم

الجزائر قلبي وغزة نبضه

محترف  انس مشاركة 2

في 04 سبتمبر 2010 05:42 م، عقد algeria حاجبيه بتفكير وقال:

إخواني أتمنى شرحا مختصرا ودقيقا للدوال التالي

h,لا ثلاثتهم ليست دوال، و انما وحدة معلومات او Data structures اي ان كل واحدة منهم طريقة لحفظ المعلومات.



وفي 04 سبتمبر 2010 05:42 م، قال algeria متحمساً:

Enum

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


enum Day { Saturday,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday};
بما اننا لم نعطي لهذه الاسماء قيم، فانها ستاخذ القيم التالي :

Saturday = 0
Sunday   = 1
Monday   = 2
Tuesday  = 3
Wednesday= 4
Thursday = 5
Friday   = 6
لكن يمكن للمبرمج تحديد اي قيم يريدها اثناء التعريف :


enum Day { Saturday = 10 ,Sunday= 925,Monday = 20,Tuesday = 13 ,Wednesday = 25,Thursday = 0,Friday = 12};
حسنا كمثال تطبيقي، افترض اننا نبرمج مشغل موسيقى ، فان المشغل سيكون لديه احدى الحالات التالية :
* تشغيل الموسيقى.
* ايقاف موضعي للوموسيقى Pause
* ايقاف كلي للقراء Stop
اثناء البرمجة يمكنك انشاء متغير حقيقي و تفرض مثلا :
- القيمة 0 : قراءة
- القيمة 1 : ايقاف موضعي
- القيمة 2 : ايقاف كلي.
و سنحصل على كود يشبه الكود التالي :



int PlayerState;
....
if ( PlayerState == 0 ) player.play(music);

if ( PlayerState == 1 ) player.pause(music);

if ( PlayerState == 2 ) player.stop(music);
الكود سيعمل لكنك بعد سنة تريد مثلا تطوير البرنامج فمن الممكن ان تكون قد نسيت ماهو دور كل قيمة لكن اذا استعملت الـ Enumeration سيسهل عليك الامر انظر :

enum PlayerState { Stop = 0, Play = 1, Pause = 2};
int main(){

PlayerState ThePlayerState;

....
if ( PlayerState == Play  ) player.play(music);

if ( PlayerState == Pause ) player.pause(music);

if ( PlayerState == Stop  ) player.stop(music);


}

الكود اصبح اكثر وضوحا.
مثال في ميدا الالعاب.
اذا اردت التعامل مع عصا التحكم. و بدون التعامل مع الـ Enumeration  ستتحصل على ما يلي :


int joy_key;

if( joy_key = 0 ) //do something 0
if( joy_key = 1 ) //do something 1
if( joy_key = 2 ) //do something 2
if( joy_key = 3 ) //do something 3
if( joy_key = 4 ) //do something 4
في هذا المثال من الصعب جدا معرفة اي زر يرمز لاي قيمة.
انظر باستعمال الـ Enumeration


enum PadKey { left=0,right=1,up=2,down=3,a=4,b=5,c=6,d=7,start=8, select=9};


int main(){

PadKey joy_key;



......

if( joy_key = left  ) //do something 0
if( joy_key = right ) //do something 1
if( joy_key = up    ) //do something 2
if( joy_key = down  ) //do something 3
if( joy_key = start ) //do something 4

اتمنى ان تكون الفكرة قد اتضحت فيما يخثص الـ Enumeration
--------------------------------------------------------------------
الان الى : Structures
هي وحدة معلومات تمكنك من انشاء نوع خاص من المتغيرات.لكي نبسط الفكرة، تخيل معي الشاشة التي تعمل عليه لعبتك.ماهي خصائصها ؟ او المعلومات التي تمكننا من انشاء هذه النافذة ؟
-طول النافذة
-عرض النافذة
-قيمة الالوان التي ممكن اظهارها على النافذة
-عنوان النافذة
-اللون الذي يملئ النافذة.
حسنا كيف سنفسر هذا برمجيا ؟ ابسط حل هو التالي :

int main ( void){

int WindowHigh;
int WindowWidth;
int WindowMaxColor;
int WindowColor;
string WindowTitle

....

}
حسنا لنضف اللاعب، ماهي خصائصه ؟
-اسم اللاعب
-عدد نقاط الحياة
-عدد نقاط القوة
-السرعة
-صورة اللاعب
-صوت اللاعب
في نفس البرنامج سنتحصل على مايلي :

int main ( void){

int WindowHigh;
int WindowWidth;
int WindowMaxColor;
int WindowColor;
string WindowTitle;

int PlayerLife;
int PlayerPower;
int PlayerVeloety;
String PalyerName;
IMAGE PlayerSprite;
SOUND PlayerSound;


....

}

تخيل اننا نملك 20 لاعبا يجب انشائهم، هل سنقوم بنسخ الكود 20 مرة ؟؟ ابدا هذا غير عملي.لهذا يوجد حل رائع وهو Structures
و هي تمكننا من جمع متغيرات عديدة في متغير واحد.مثال :


sturct Window {
int high;
int width;
int MaxColor;
int Color;
string Title

};
بهذه الطريقة كلما انشئنا متغيرا من نوع : Window فاننا نملك المعلومات الكافية لانشاء نافذة دون اللجوء الى انشاء كامل متغيراتها.
وكذالك بالنسبة للاعب.
و للتعامل مع هذا النوع نتبع الخطوات التالية :


sturct Player {
int Life;
int Power;
int Veloety;
String Name;
IMAGE Sprite;
SOUND Sound;

};

int main(void){
Player player1;
player player2;
...

// when player2 attack player1
player1.life = -10;
player1.Sound = hit_sound;

player2.power = -5;
player2.Sprite = winer_sprite;
}

iهل اتضحت الفكرة ؟
ملاحظة هذا النوع هو الذي مهد للبرمجة الغرضية.
--------------------------------
اما فيما يخص المؤشرات فساختصر فيما يلي :
عندما تقدم متغيرا الى دالة ما فانها ستنشئ نسخة و تعمل عليها، اما اذا مررت العنوان مباشرة) و المؤشر دوره حفظ العنوان) فان الدالة ستعمل على المتغير مباشرة.
هذا سيوفر وقتا اكثر، ذاكرة اكثر لانك لن الدالة لن تنشئ نسخة جديدة.
كما يمكنه كذالك تحديد مساحة حددة من المستخدم.
فمثلا اذا اردت ان احمل الصورة ذات الابعاد 640x480 فالمؤشر سيؤشر الى المساحة الفارغة من الذاكرة التي تسمح لي بانشاء صورتي، و ماذا اذا اراد شخص اخر تحميل صورة بابعاد 1024x768  ؟ هنا المؤشر سيؤشر على مساحة فارغة كافية للصورة...و بهذا تصبح لدينا مرونة عالية جدا.

هذا اكبر فائدة اراها في هذه اللحظة.


كمثال : ملف شخصية يزن 30 ميغابايت. لولا اننا نقوم بتقديم هذا الملف الى الدوال عن طريق المؤشرات اي بواسطة العنوان حتى تعمل عليه الدالة مباشرة، فان ذلك سيؤدي الى انشاء نسخة بنفس الحجم كل مرة.

اتمنى ان تكون قد استفدت، بانتظار اسئلتك ان وجدت.

سلام

خبير  algeria مشاركة 3

السلام عليكم ورحمة الله تعالى وبركاته
أخي أنس الله يحفظك ويجازيك خيرا بكل حرف أجبتني به
والله فهمتها جيدا والحمد لله

فقط أسئلة تبقى عندي
جربت المثال التالي , لكن تظهر لي أخطاء

#include
#include
using namespace std;

struct alg{int a=1,b=2,c=3,d=4,String dz='alger'};
enum dz{a='algeria',b='palestin',c='dz',d='alger'};

int main(){
	alg alg1;//استدعاء الستريكت
	cout<<alg1.a<<endl;//إظهار قيمة a
	dz dz1;//استدعاء إنيم
	cout<<dz1.d<<endl;//إظهار قيمة d
}

+
struct مثل class
لكن فيما تختلف (تنقص) عنها
-------------------------------------------------------------------------------------------------------------

في enum

enum PadKey { left=0,right=1,up=2,down=3,a=4,b=5,c=6,d=7,start=8, select=9};
1- enum مثل المصفوفات array ؟؟ أليس كذلك

2- أنت قلت أنه يتم ترقيمها عشوائيا , فلماذا رقمتها
3- إن أردت أن تعرف نوع تلك المتغيرات بـ (int/float/String..) فهل تكتبها هكذا

String enum PadKey{left="l",right="r",up='u',down='d'};

إن كان صحيحا فماذا لو كنت تريد تعريفها بنوعين مثلا (int و String

enum PadKey{left=213,right="r",up=00,down='d'};

---------------------------------------------------------------------
في المؤشرات لم أفهم هذا جيدا

وفي 04 سبتمبر 2010 11:56 م، ظهر شبح ابتسامة على وجه انس وهو يقول:

كمثال : ملف شخصية يزن 30 ميغابايت. لولا اننا نقوم بتقديم هذا الملف الى الدوال عن طريق المؤشرات اي بواسطة العنوان حتى تعمل عليه الدالة مباشرة، فان ذلك سيؤدي الى انشاء نسخة بنفس الحجم كل مرة.

جعل الله هذا في ميزان حسناتك أخي أنس ووفقك الله

الجزائر قلبي وغزة نبضه

محترف  انس مشاركة 4

أما في 05 سبتمبر 2010 04:52 ص، فقد تنهد algeria بارتياح وهو يرد:

جربت المثال التالي , لكن تظهر لي أخطاء

من الطبيعي ظهور تلك الاخطاء فانت لك تحترم طريقة تعريف المتغيرات.
انظر كيف يجب تعريف الـ structures



struct Player{

int Life;
int Power;
int Veloety;
String Name;
IMAGE Sprite;
SOUND Sound;

};
لاحظ الـ ; في نهاية كل متغير لكن انظر ماذا فعلت انت :

struct alg{int a=1,b=2,c=3,d=4,String dz='alger'};
بالاظافة الى ذلك فممنوع ان تعطي قيما للمتغيرات التي تعرفها هنا.لان القيم سيملئها المستخدم لاحقا.
لماذا ؟ لانك بهذه الطريقة انشئت متغير ثابة في كل الحالات، يعني مثلا اذا كان لديك لاعبان فسيكونان متشابهين تماما.

الاستخدام الصحيح سيكون كالاتي :


struct alg{
int a,b,c,d;
String dz;
};

int main(){

alg test;

test.a = 0;
test.b = 1;
test.c = 2;
test.d = 3;
test.dz= "Alger";

}

Enum وحجها التي يمكنك اعطاء قيم للاسماء التي تذكرها اثناء التعريف لانها وظيفته الاساسية، و هي استبدال القيم باسما، و لا اقول سلسلة حروف اخي انتبه، فرق بين Name و "Name" .



في 05 سبتمبر 2010 04:52 ص، غمغم algeria باستغراب قائلاً:

1- enum مثل المصفوفات array ؟؟ أليس كذلك
لا ليس كذلك مطلقا. لان الـ Enum  ماهي الا متغير واحدة (عادة من نوع int ) يمكنك اعطاء اسماء لقيمه.يمكنك حتى انشاء Enum دون اسم و ذلك لاستعمال الاسماء المعرفة بدل القيم مثلا :
enum {yes,no};
و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N  للاسم الاخير.
في المثال السابق :
yes = 0
no = 1
و يمكننا استخدام الاسماء الان بدل القيم 0 و 1، و هذا هو الدور الوحيد لهذا النمط من وحدات التخزين مثال :


enum {yes,no};

......
if ( playerIsDead == no ) dosomthing();
و نحصل على نفس النتيجة بـ
if ( playerIsDead == 1 ) dosomthing();
كلاهما يعمل لكن الاول اسهل للفهم و القراءة.




بتاريخ 05 سبتمبر 2010 04:52 ص، قطب algeria حاجبيه بشدة وهو يقول:

struct مثل classلكن فيما تختلف (تنقص) عنها
كي ابسط لك الفكرة الى ابعد الحدود، الكلاس يمكنها احتواء دوال كعناصر، اما الـ Structure فلا تحتوي الا على متغيرات.




وفي 05 سبتمبر 2010 04:52 ص، أعرب algeria عن رأيه بالموقف كالآتي:

- أنت قلت أنه يتم ترقيمها عشوائيا , فلماذا رقمتها
لا، يتم ترقيمها من 0 الى N عدد اذا لم يحدد المبرمج القيم.اما اذا حددها فيحددها كيفما يشاء.
رقمتها حتى تخدم مصلحة برنامجي او لتخدم ما السبب الذي انشئتها لها.
اليك مثال :
في لغة السي، لا يوجد متغيرات من نوع Boolean ذات القيم صحيح او خطأ.اذا اردنا الحصول على نتيجة مماثلة نستعمل الـ Enum بالشكل التالي :


enum bool {false,true};
-----------------------
enum bool {true = 1, false = 0};

لاحظ الان، تعريفين مختلفين لكن نتيجة و اداء واحد.
لنعمل بها اذا :


if ( continue == true ) continueTheGame();
------------------------------------------
if ( continue == 1 ) ContinueTheGame();
نفس النتيجة.


في 05 سبتمبر 2010 04:52 ص، قال algeria بهدوء وتؤدة:

- إن أردت أن تعرف نوع تلك المتغيرات بـ (int/float/String..) فهل تكتبها هكذا

خطا، Enum لا تسمح لك الا باعطاء اسماء لقيم معينة.اسماء اخي و ليس سلسلة حروف.



في 05 سبتمبر 2010 04:52 ص، عقد algeria حاجبيه بتفكير وقال:

String enum PadKey{left="l",right="r",up='u',down='d'};

هذا يمكنك القيام به بعبارات التعريف Define

#define left "l"
#define right"r"
#define up "u"
#define down"d"

لا يمكنك ان تضع نوع امام الـ Enum مثل :
string enum
فهذا خاطئ.



وفي 05 سبتمبر 2010 04:52 ص، قال algeria متحمساً:

إن كان صحيحا فماذا لو كنت تريد تعريفها بنوعين مثلا (int و String
غير ممكن ان تقوم بهذا، لان الـ Enum لا تحتفط الا بقيم عددية و لا تعترف باي من انواع المتغيرات.



وفي 05 سبتمبر 2010 04:52 ص، ظهر شبح ابتسامة على وجه algeria وهو يقول:

في المؤشرات لم أفهم هذا جيدا
الملف عند تحميله، فانه سيكون لديه عنوان يشر الى مكانه.
عندما تمرر الملف الى دالة دون ارشادها الى عنوان الملف، فكانك تقول للدالة انشئي لي ملفا جديدا بنفس مواصفات التي ارسلتها لك.فتقوم الدالة بانشاء ملف جديد تعمل عليه.هذا علما ان ملفك مازال موجود في الذاكرة، فتجد نفسك بملفين متطابقين، احدهما غير مفيد تماما.
اما اذا مررت الملف عن طريق تقديم العنوان الى الدالة، تذهب هذه الاخيرة في البحث عن الملف، و عغندما تجده تعمل عليه.و بالتالي لا يوجد ملف جديد.

خبير  algeria مشاركة 5

بالنسبة لـ Struct فهمتها جيدا
بقي لي شيء واحد فيها
لماذا أنا مخطئ هنا

#include
#include
using namespace std;

struct alger{
int a,b,c,d;
String dz;
};

int main(){
alger alg;
alger alg2;

alg.a=0;alg2.a=00;
alg.b=1;alg2.b=11;
alg.c=2;alg2.c=22;
alg.d=3;alg2.d=33;
alg.dz="Alger";alg2.dz="algeria";
cout<<alg.dz<<"\n"<<alg2.c<<endl;
}

أريد إظهار قيمة متغير معين

----------------------------------------------------------------
في Enum

ما علاقة playerIsDead  بـ no
enum {yes,no};
if ( playerIsDead == no ) dosomthing();
+
طالما لم نعطي إسم لـ enum , فيمكن استعمال (yes,no) مرات عديدةenum {yes,no};
if(a==no)x++;
if(b==yes)x--;
if(Play==yes)Do();
if(PlayerIsDead==yes)restart();
وأيضا من أين تأتي قيمة no
يعني ما الشيء الذي سيجعل enum = no

في هذا المثال
enum{yes,no};
if(playerIsDead==no)dosomthing();
متى ستكون playerIsDead تساوي no
لا يوجد شيء هنا يحدد إحدى قيم enum


في 05 سبتمبر 2010 03:43 م، غمغم انس باستغراب قائلاً:

خطا، Enum لا تسمح لك الا باعطاء اسماء لقيم معينة.اسماء اخي و ليس سلسلة حروف.
ما هي الأسماء وماهي سلسلة الحروف


-----------------------------------------------------------------------------------------
المؤشرات فهمتها جيدة , وبالنسبة للمؤشرات داخل RAM , فإني فاهمها أيضا

جزاك الله الأجر والثواب أخي أنس

الجزائر قلبي وغزة نبضه

محترف  انس مشاركة 6

بتاريخ 05 سبتمبر 2010 05:02 م، قطب algeria حاجبيه بشدة وهو يقول:

لماذا أنا مخطئ هنا
اخي انا اعطيتك المفهوم، اما عندما تتكلم عن امثلتك من فضلك بين اللغة و المترجم المستعملين.
اما عن خطئك فهو انك عرفت النوع String ب S كبيرة اما المتغير الصحيح فهو بـ s صغيرة string
جرب، فعندي البرنامج يعمل .



وفي 05 سبتمبر 2010 05:02 م، أعرب algeria عن رأيه بالموقف كالآتي:

في Enumما علاقة playerIsDead  بـ no

PlayerIsDead متغير من نوع int يقبل قيم كثيرة لكن انا احتج فقط ل 0 وواحد ، 0 لدلالة على ان اللاعب مات، و 1 للعكس.
لا علاقة بينهما في حقيقة الامر، لكنني اردت ان اتمكن من كتابة عبارة اقرب الى لغة الانسان باستعمال Yes and no
يمكنني استعمال الـ yes and no مع كل متغير يقبل قيم 0 و 1
مثلا :


if ( GameContinue == Yes) continueGame();
if ( GameContinue == No ) quitGame();



في 05 سبتمبر 2010 05:02 م، قال algeria بهدوء وتؤدة:

لا يوجد شيء هنا يحدد إحدى قيم enum
اخي افرا جيدا ما قلته لك :

في 05 سبتمبر 2010 02:43 م، عقد انس حاجبيه بتفكير وقال:

و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N  للاسم الاخير.
و كذلك

وفي 05 سبتمبر 2010 02:43 م، قال انس متحمساً:

لا، يتم ترقيمها من 0 الى N عدد اذا لم يحدد المبرمج القيم.اما اذا حددها فيحددها كيفما يشاء.رقمتها حتى تخدم مصلحة برنامجي او لتخدم ما السبب الذي انشئتها لها.اليك مثال :في لغة السي، لا يوجد متغيرات من نوع Boolean ذات القيم صحيح او خطأ.اذا اردنا الحصول على نتيجة مماثلة نستعمل الـ Enum بالشكل التالي :enum bool {false,true};-----------------------enum bool {true = 1, false = 0};لاحظ الان، تعريفين مختلفين لكن نتيجة و اداء واحد.



وفي 05 سبتمبر 2010 05:02 م، ظهر شبح ابتسامة على وجه algeria وهو يقول:

ما هي الأسماء وماهي سلسلة الحروف
الاسم، هي اسماء متغيرات فقط و ليس لها اي دور عدا تعريف المتغيرات و اعطاءها اسماء مثال :

int variable01
char charactere;
string my_string_name;
سلسة الحروف و هي معطيات عبارة عن حروف يمكن التعامل معها :


string my_string="this is a string"

الـ Enumeration لا تسمح لك بتعريف سلسلة حرف لان دورها هو اعطاء اسم لقيمة معينة.










أما في 05 سبتمبر 2010 02:43 م، فقد تنهد انس بارتياح وهو يرد:

و لم اقل ان القيم عشوائية، بل قلت انك اذا لم تحدد القيم لكل لسم، سيقوم المترجم باعطاء القيمة 0 لاول اسم الى غاية القيمة N  للاسم الاخير.في المثال السابق : yes = 0no

خبير  algeria مشاركة 7

كل شيء مفهوم الآن و Struct تعمل بقي شيئان

ماذا تقصد بـ (لسم)
+
أعطيني مثال واستعمل فيه enum
استعمل مثلا أيام الأسبوع
ما لم أفهمه هو وظيفة enum , أعرف أنها ترقم لكن فيما يفيد الترقيم

الجزائر قلبي وغزة نبضه

محترف  انس مشاركة 8

int joy_key;

if( joy_key = 0 ) //do something 0
if( joy_key = 1 ) //do something 1
if( joy_key = 2 ) //do something 2
if( joy_key = 3 ) //do something 3
if( joy_key = 4 ) //do something 4
Write Code Here
هل تفهم هذا الكود ؟

خبير  algeria مشاركة 9

أظنك لم تفهم طلبي بالتحديد

بالطبع أفهم الشرط جيدا
وإذا كانت (joy_key) تساوي قيمة , يتم تنفيذ شيء معين
لكن ما لم أفهمه , هو المتغير joy_key
من أين له أن يساوي إحدى قيم enum

enum dz{a,b,c}
if(dz==a)
if(dz==b)
if(dz==c)

مالشيء الذي سيحدد لنا إحدى قيم dz

الجزائر قلبي وغزة نبضه

محترف  انس مشاركة 10

وفي 06 سبتمبر 2010 02:31 م، ظهر شبح ابتسامة على وجه algeria وهو يقول:

من أين له أن يساوي إحدى قيم enum

اخبرتك سابقا، ان الـ Enum تعطي اسما لقيمة ما، فاذا اردت ان اسمي القيمة 0 Key_a فساستعمل الـ Enum
فمثلا، عصا التحكم في الالعاب بها عدة ازرار، كلما ظغطنا على زر joy_key سياخذ قيمة معينة. و اذا كانت العصا بها 4 ازرار للاتجاه و 6 ازرار اخرى، فالمجموع لدينا 10 ازرار، و عندما نظغط على زر معين فاننا نحصل على قيمة معينة، و لكي نستطيع فهم الكود بسرعة نسمي تلك القيمة باسم الزر المظغوط.مثال :

الزر a  يعطي القيمة 15471.
عندما نريد ان نقوم يشيئ ما في الكود عندما يضغط اللاعب على هذا الزر فاننا نقوم بالتالي

if( joy_key = 15471 ) //do something 0
هذا يعني اننا ضغطنا على الزر a
لكن هذا متعب، و غير فعال تخيل انك مضطر الى التعامل مع 4 عصي للتحكم، فنقوم بانشاء Enumeration تقوم باعطاء اسم للقيم التي ممكن ان تاخذها ازرار العصا.مثال :


enum {left,right,up,down,a=15471,b=201135,c=87965}
وبهذه الطريقة فان هذا الكود :


if( joy_key == a ) //do something 0
if( joy_key == b ) //do something 1
if( joy_key == c ) //do something 2
if( joy_key == up ) //do something 3
if( joy_key == down ) //do something 4

اكثر وضوحا من هذا الكود :


if( joy_key == 15471 ) //do something 0
if( joy_key == 201135 ) //do something 1
if( joy_key == 87965 ) //do something 2
if( joy_key == 2 ) //do something 3
if( joy_key == 3 ) //do something 4
اليس كذلك ؟