الأربعاء، 15 مايو 2013

g4c: Common problems and frequently asked questions

Can I use normal C++ libraries in my g4c application?

Yes, you can use code from C++ libraries, like files, rand( ), strings,... except any code related to the console (cin, cout, getch( ),.....

My program behaves erroneously if I call wait( ) with a large number, like wait(2000) or wait(5000)

There is a problem with the wait function; to wait for a long time you can wait for a short time many times; for example instead of calling wait(2000) you can call wait(50) forty times. Tip: you can create a function to do that for you.

س: ازاي اتغلب على مشكلة الحد الأقصى بتاع 30 sprite؟

ج1: استخدم ذكاءك؛ كل الألعاب القديمة (غزاة الفضاء، باكمان، ماريو...) احتاجت لعدد قليل من الsprites. لاحظ ان رقم 30 هو حد أقصى للأشكال الظاهرة على الشاشة في لحظة معينة
ج2: لو عايز ترسم صورة من غير ما تحركها، ممكن تستخدم copy_sprite_image بدلاً من put_sprite، ودي مالهاش حد أقصى (لكن ما تسمحش بتحريك الصورة اللي رسمتها أو التصادم)

How to clear the screen?

  • Use fill_rect to draw over normal graphics
  • To hide sprites, use hide_sprite (give any numbers as the x, y parameters; they're not important)


 س: (سؤال متقدم) اللعبة بتاعتي بتهنج لو شغلتها من mouse_proc

ج: شغلها من main، لأنه لو الmouse_proc قعدت تشتغل بلا توقف حتعطل الـmessage loop بتاع البرنامج والمستخدم مش حيقدر يعمل فيه أي حاجة ثانية س: بس أنا عايز اشغل اللعبة لما المستخدم يدوس بالماوس على مكان معين ج: لو عايز main تفضل منتظرة حدث معين اعمل متغير بـfalse، خلي الmain شغالة في loop مادام المتغير ده لسة خطأ، وخليه true في الmouse_proc لما تحب اللعبة تشتغل.

ملاحظة: لو ما مريتش بالموقف اللي السؤال ده بيتكلم عنه، تجاهل السؤال والإجابة.

How can I convert a string to a char* in order to use it with text_out?

Learn from this example:

string s = "Hello";
char *c = (char *) s.c_str();
text_out(c, 20, 20);

How can I convert a char * (that I got by using the input( ) function) to a string?

Learn from this example:

char *c = input("Enter your name:", 30, 30);
string s = c;

ملاحظة: لو عايز تقرأ أكثر من قيمة نصية باستخدام دالة input وتحافظ عليهم، لازم تعمل نسخة من كل حاجة تقرأها قبل ما تقرأ اللي بعدها، لأن دالة input دايماً بتقرأ في نفس المكان في الذاكرة، وبالتالي لو ما عملتش نسخ حتلاقي ان كل حاجة قرأتها بقى لها نفس القيمة.

لو قرأت القيمة وحولتها لرقم فكدة تبقى حافظت عليها، لأن الرقم سوف يخزن في مكان مختلف في الذاكرة
لو قرأت القيمة في صورة char * وحولتها لـstring، تبقى حافظت عليها لأن الـstring حيعمل لنفسه نسخة
لو قرأتها char * ومش عايز تحولها لـstring، استخدم strcpy كما في المثال الآتي:

char *c = input("Enter your name:", 30, 30);
char s2[100]; // make sure it's of sufficient size
strcpy(s2, c);
// now use s2

للأسف طريقة انك تعمل array of char بحجم ثابت كبير عشان تشيل فيه نص غير معروف حجمه هي طريقة سيئة، كان ممكن الـg4c تخبرك بعدد الchar التي قد تم قراءتها وتعمل انت dynamic allocation بالحجم ده. يمكن أحل المشكلة دي في إصدارة قادمة.

هناك 3 تعليقات:

غير معرف يقول...

السلام عليكم ورحمة الله وبركاته
تحية طيبة وبعد ,,,,

يسعدنا بداية أن نهديكم أصالة عن أنفسنا، ونيابة عن جامعة المدينة العالمية [MEDIU] أرق التحية وأطيب الأمنيات لكم بدوام التقدم والإزدهار، مقرونة بصادق الدعوات لكم بالمزيد من التوفيق والتطور والنماء.

جامعة المدينة العالمية [MEDIU] ماليزيا:

"جامعة المدينة العالمية [MEDIU] ماليزيا" هي إحدى الجامعات الرائدة في دولة ماليزيا، والتي امتازت بالتفوق والتميز في مجالات التقنية والتعليم العالي، و "جامعة المدينة العالمية [MEDIU]" هي جامعة متعددة الثقافات والمجالات الدراسية ويقع مقرها الإداري الرئيسى في مدينة شاه علم بماليزيا ، وإليكم تاريخ موجز:
1. تأسست "جامعة المدينة العالمية [MEDIU]" مطلع عام 2004م بالمدينة المنورة.

سادسًا: رسوم دراسية معقولة:
تقدم جامعة المدينة العالمية [MEDIU] تعليماً راقياً برسوم دراسية معقولة، حيث تبلغ الرسوم الدراسية لبرامج الدبلوم في العلوم المالية والإدارية والحاسب الآلي (المعادل لدرجة الليسانس) حوالي [4000] دولار أمريكي لطول مدة الدراسة والتي تترواح ما بين سنتين ونصف إلى ثلاثة سنوات، بينما تبلغ إجمالي قيمة الرسوم الدراسية في برامج البكالوريوس في العلوم الإسلامية واللغة العربية لكامل مدة الدراسة والتي تبلغ أربعة سنوات في حوالي [6000] إلى [7000] دولارأمريكي، ويبلغ متوسط الرسوم الدراسية لمرحلة الماجستير في العلوم الإسلامية واللغة العربية والممتدة لمدة سنيتن حوالي [6000] دولار أمريكي.

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

تحياتنا لكم
فريق التسويق بجامعة المدينة العالمية بماليزيا

غير معرف يقول...

السلام عليكم ورحمة الله وبركاته
تحية طيبة وبعد ,,,,

يسعدنا بداية أن نهديكم أصالة عن أنفسنا، ونيابة عن جامعة المدينة العالمية [MEDIU] أرق التحية وأطيب الأمنيات لكم بدوام التقدم والإزدهار، مقرونة بصادق الدعوات لكم بالمزيد من التوفيق والتطور والنماء.

جامعة المدينة العالمية [MEDIU] ماليزيا:

"جامعة المدينة العالمية [MEDIU] ماليزيا" هي إحدى الجامعات الرائدة في دولة ماليزيا، والتي امتازت بالتفوق والتميز في مجالات التقنية والتعليم العالي، و "جامعة المدينة العالمية [MEDIU]" هي جامعة متعددة الثقافات والمجالات الدراسية ويقع مقرها الإداري الرئيسى في مدينة شاه علم بماليزيا ، وإليكم تاريخ موجز:
1. تأسست "جامعة المدينة العالمية [MEDIU]" مطلع عام 2004م بالمدينة المنورة.

سادسًا: رسوم دراسية معقولة:
تقدم جامعة المدينة العالمية [MEDIU] تعليماً راقياً برسوم دراسية معقولة، حيث تبلغ الرسوم الدراسية لبرامج الدبلوم في العلوم المالية والإدارية والحاسب الآلي (المعادل لدرجة الليسانس) حوالي [4000] دولار أمريكي لطول مدة الدراسة والتي تترواح ما بين سنتين ونصف إلى ثلاثة سنوات، بينما تبلغ إجمالي قيمة الرسوم الدراسية في برامج البكالوريوس في العلوم الإسلامية واللغة العربية لكامل مدة الدراسة والتي تبلغ أربعة سنوات في حوالي [6000] إلى [7000] دولارأمريكي، ويبلغ متوسط الرسوم الدراسية لمرحلة الماجستير في العلوم الإسلامية واللغة العربية والممتدة لمدة سنيتن حوالي [6000] دولار أمريكي.

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

تحياتنا لكم
فريق التسويق بجامعة المدينة العالمية بماليزيا

غير معرف يقول...

السلام عليكم ورحمة الله وبركاته
تحية طيبة وبعد ,,,,

يسعدنا بداية أن نهديكم أصالة عن أنفسنا، ونيابة عن جامعة المدينة العالمية [MEDIU] أرق التحية وأطيب الأمنيات لكم بدوام التقدم والإزدهار، مقرونة بصادق الدعوات لكم بالمزيد من التوفيق والتطور والنماء.

جامعة المدينة العالمية [MEDIU] ماليزيا:

"جامعة المدينة العالمية [MEDIU] ماليزيا" هي إحدى الجامعات الرائدة في دولة ماليزيا، والتي امتازت بالتفوق والتميز في مجالات التقنية والتعليم العالي، و "جامعة المدينة العالمية [MEDIU]" هي جامعة متعددة الثقافات والمجالات الدراسية ويقع مقرها الإداري الرئيسى في مدينة شاه علم بماليزيا ، وإليكم تاريخ موجز:
1. تأسست "جامعة المدينة العالمية [MEDIU]" مطلع عام 2004م بالمدينة المنورة.

سادسًا: رسوم دراسية معقولة:
تقدم جامعة المدينة العالمية [MEDIU] تعليماً راقياً برسوم دراسية معقولة، حيث تبلغ الرسوم الدراسية لبرامج الدبلوم في العلوم المالية والإدارية والحاسب الآلي (المعادل لدرجة الليسانس) حوالي [4000] دولار أمريكي لطول مدة الدراسة والتي تترواح ما بين سنتين ونصف إلى ثلاثة سنوات، بينما تبلغ إجمالي قيمة الرسوم الدراسية في برامج البكالوريوس في العلوم الإسلامية واللغة العربية لكامل مدة الدراسة والتي تبلغ أربعة سنوات في حوالي [6000] إلى [7000] دولارأمريكي، ويبلغ متوسط الرسوم الدراسية لمرحلة الماجستير في العلوم الإسلامية واللغة العربية والممتدة لمدة سنيتن حوالي [6000] دولار أمريكي.

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

تحياتنا لكم
فريق التسويق بجامعة المدينة العالمية بماليزيا