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

خبير  Mohammad Khashashneh مشاركة 11

أهلا بك أنت أيضا أخ أنس😄



في 25 نوفمبر 2009 06:18 م، قال انس بهدوء وتؤدة:

انا حاليا لا املك نظام لينكس لهذا ما النظام الذي تنصحونني بتحميله...ليس من ناحية "افضل نظام"  و انما لتجريب الكود في عدة  اصدارات.كيف سيكون العمل ؟ هل نستعمل منصات الـ Sourceforge or GoogleCode  ؟

بما أنني أعمل على فيدورا حاليا, لما لا تختار إحدى الإصدارات الدارجة الأخرى. أهمها برأيي أوبونتو www.ubuntu.com.
بما أن إدارة المنتدى وافقت مشكورة على طلبي بالنسبة للرخصة, فيمكننا استخدام googlecode أو soourceforge كما نشاء. أنا حاليا أستخدم sourceforge و هو ممتاز فعلا, لكنني أو د أن أجرب googlecode هذه المرة, فهم يدعمون svn أيضا.
سأقوم بعمل مشروع للعبة ووضع الكود هناك. لكن قبل ذلك علينا تعديل جميع الملفات لتعكس الملكية و الرخصة.



في 25 نوفمبر 2009 06:18 م، عقد انس حاجبيه بتفكير وقال:

ساحاول العمل و ساعطيكم النتيجة يوم الجمعة ان شاء الله...سيكون العمل على ويندوز  و لا اظنها مشكلة بفضل الـ  SDL
سأكون من الشاكرين, فحاليا لايوجد vc++ solution file. إذا كان لديك visual studio لما لا تعمل  solution ؟ وإذا مازلت تفضل استخدام code::blocks أرجو عمل project file أيضا. المهم هو التأكد من إمكانية بناء و تشغيل المشروع بدون مشاكل على وويندوز.



وفي 25 نوفمبر 2009 06:18 م، قال انس متحمساً:

ادا كنا سنعمل بلغة الـ C++  فساواجه صعوبات يرجى التغاضي عنها ... اه و لما لا استعمال SFML  الاسرع و الانسب لهذه اللغة.

لا يوجد مشكلة, فكلنا هنا للتعلم. أما بالنسبة ل SFML, فلقد قمت ببناء آخر اصدار منها و أنا الآن أضطلع على كيفية الإستفادة منها.
لقد قمت لحد الآن مراعات أن يكون الكود سهل التطوير و التعديل كإضافة low level implementation مختلف عن SDL. مثلا الRenderer class هي عبارة عن class مجردة, والتنفيذ الفعلي يكمن في الSDLRenderer class ، كل ما يجب فعله هنا عمل class  جديدة تدعى SFMLRenderer و كتابة الكود في الدوال المطلوبة و من ثم وصل الكود الجديد في عملية البناء بدلا من الSDL implementation.



وفي 25 نوفمبر 2009 06:18 م، ظهر شبح ابتسامة على وجه انس وهو يقول:

ا محرر تستعمل ؟ انا استعمل Code::Blocks

لا أستخدم IDE حاليا, لكني أستخدم Kate من مكتبة KDE لكتابة الكود و من ثم أقوم ببناء الكود باستخدام ال Makefiel و make.
ما الcompiler الذي تستخدمه مع  Cod::Blocks على ويندوز؟ إذا كان MingW gcc فيمكنك أيضا استخدام الMakefile مع بعض التعديلات (لكن ليس ضروريا) . أما إذا كان الVC++ compiler, فعليك استخدام الproject file.

للجميع, يمكن استخدام أي محررات أو IDEs أخرى تفضلونها مثل NetBeans, Eclipse, .... فجميعها تتعامل مع الMakefiles بسلاسة.

حسنا, أعتقد بأن الخطوة الأولى بناء الكود على وويندوز, ومن ثم الاطلاع عليه. لا تتردد في أي أسئلة مهما كانت. OK؟

محمد خشاشنة

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

خبير  Mohammad Khashashneh مشاركة 12

في 25 نوفمبر 2009 02:01 ص، عقد وسام البهنسي حاجبيه بتفكير وقال:

لا مشاكل إطلاقاً. كما سبق وقد نوهت، الكود مفتوح للجميع. فقط نرجو الحفاظ على ذكر مصدر الكود (الشبكة العربية لمطوري الألعاب) احتراماً لعمل كل من شارك بالمشروع.

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


وفي 25 نوفمبر 2009 02:01 ص، قال وسام البهنسي متحمساً:

نتمنى لكم التوفيق والنجاح في هذا الإنجاز، وإدارة الشبكة تقدم دعمها الكامل له. فإن احتجتم لموارد أو لمعرفة تفاصيل عن عمل اللعبة الأصلية فلا تترددوا بطلبها.

هناك الrecources من ملفات الصور و الأصوات... سنحتاجها لاحقا. أما الباقي, فقد أحتاج بعض المعلومات العامة عن كيفية عمل الDSK لمحاكاة الrendering، لكن لا يوجد مشاكل حاليا.
 
انشاء الله هذه المرة سنقوم بالعمل بسرعة أيضا.

محمد خشاشنة

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

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

حسنا انا املك عضوية في مل Google  code and SourceForge  ايهما الافضل ؟ لا ادري فلم تتح لي الفرصة للعمل بهما من قبل.

اما فيما يخص Visual Studio فاتا املك الاصدار 2008 لكني لست من المتحكمين في هذا المحرر لكنيني ساحاول.

نقطة اخرى : يجب ان نحدد كيفية كتابة الكود : مثال



int Var ,Var1 ;or :
int var ,var1 ;

--------
void DoNothing();
or :
void Do_Nothing();

هل فهمت قصدي ؟


نقاط اخرى :
* مادخل المكتبة Boost  ؟ هل يجب ربطها هي الاخرى ؟
*هل سنقوم بمعالجة كود المكتبة و كود اللعبة بشكل منفصل او اننا سندمج الكل ؟
*يجب تحديد خطة عمل للمشروع و ارجو من الادارة مساعدتنا بخرتها 😄 .

مجرد تدخل بسيط في الكود الخاص بالـ SDLRender Class
 
//load an optimized img : same as main screen; to a fast blit /
SDL_Surface* SDLRenderer::load_imgEx(const char* img_fp){


    SDL_Surface* old_img = IMG_Load( img_fp );
    SDL_Surface* new_img = NULL ;

    if ( old_img == NULL) {

        std::cerr << "ERROR: Could not load image " << img_fp
		<< " :" << IMG_GetError() << std::endl;
		return false;

        }

    else {

         cout<< "try to convert image : "<< img_fp <<"...";
         new_img = SDL_DisplayFormat( old_img );
         cout<< "ok"<< endl;
         SDL_freeSurface( old_img);
	}



        return new_img ;
    }


bool SDLRenderer::drawImage(const char *filePath, int x, int y)
{
	if(!m_Screen || !filePath )
		return false;
	SDL_Surface *image = load_imgEx(filePath);


	/* No more needed
	if(image == NULL)
	{
		std::cerr << "ERROR: Could not load image " << filePath
		<< " :" << IMG_GetError() << std::endl;
		return false;
	}*/

	if(SDL_BlitSurface(image, NULL, m_Screen, NULL) < 0)
	{
		std::cerr << "ERROR: Could not display image: " << SDL_GetError()
		<< std::endl;
		return false;
	}
	SDL_UpdateRect(m_Screen, x, y, image->w, image->h);
	SDL_FreeSurface(image);
	return true;
}

في انتظار خطة العمل ساعمل على بعض الاكواد و يساضيف  اكواد اخرى و ساعلمكم بما تحصلت عليه.
بالنسبة للرخصة فاي رخصة سنعمل بها ؟

ملاحظة : لحد الان لا استطيع بناء الكود...و اظن ان سبب ذلك هو .Core2

سلام

خبير  Mohammad Khashashneh مشاركة 14

في البداية كل عام و أنتم بخير

في 26 نوفمبر 2009 02:01 ص، قال انس بهدوء وتؤدة:

حسنا انا املك عضوية في مل Google  code and SourceForge  ايهما الافضل ؟ لا ادري فلم تتح لي الفرصة للعمل بهما من قبل.اما فيما يخص Visual Studio فاتا املك الاصدار 2008 لكني لست من المتحكمين في هذا المحرر لكنيني ساحاول.
حسنا لا بأس، فلنترك هذا الموضوع لأحد الأخوة الآخرين كي نزيد عدد المشاركة في
المشروع.

في 26 نوفمبر 2009 02:01 ص، عقد انس حاجبيه بتفكير وقال:

قطة اخرى : يجب ان نحدد كيفية كتابة الكود : مثالint Var ,Var1 ;or :int var ,var1 ;--------void DoNothing();or :void Do_Nothing();هل فهمت قصدي ؟
همم. أنت على حق. حسنا فليكن كما يلي:

class ClassName
{
	private:
		int memberNumberOne;
		bool memberNumberTwo;
		int *data;
	public:
		void doSomething(int a);
		bool doSomethingElse();
};

void ClassName::doSomething(int a)
{
	memberNumberOne = a;
}
...




وفي 26 نوفمبر 2009 02:01 ص، قال انس متحمساً:

مادخل المكتبة Boost  ؟ هل يجب ربطها هي الاخرى ؟
أود أن أتعلم استخدام هذه المكتبة منذ فترة طويلة, فقررت أن أجربها هنا للتعرف على بعض قدراتها.
فهناك include للملفات scoped_ptr.hpp و cstdint.hpp في الcore2.h header file، و
حاليا أستخدمها لغرضين، الsmart pointers و الstandard integer types مثل uint32_t
 


وفي 26 نوفمبر 2009 02:01 ص، ظهر شبح ابتسامة على وجه انس وهو يقول:

*هل سنقوم بمعالجة كود المكتبة و كود اللعبة بشكل منفصل او اننا سندمج الكل ؟

حاليا هما منفصلتان, قد نقوم ببناء المكتبة dynamically أو statically و ضمها للعبة في مرحلة الlinlking.



أما في 26 نوفمبر 2009 02:01 ص، فقد تنهد انس بارتياح وهو يرد:

*يجب تحديد خطة عمل للمشروع و ارجو من الادارة مساعدتنا بخرتها  .


أنت على حق مرة أخرى، فكنت قد بدأت بوضع بعض الملاحظات بشكل عام عندما بدأنا بالمشروع السنة الماضية، سأقوم بإرفاقها للمشاركة التالية لعلنا قمنا بتعديلها لتكون بمثابة To do list توضح ما علينا انجازه.


في 26 نوفمبر 2009 02:01 ص، غمغم انس باستغراب قائلاً:

مجرد تدخل بسيط في الكود الخاص بالـ

ممتاز سأضيفها للكود قريبا، و سأرفق آخر اصدار في المشاركة التالية.



بتاريخ 26 نوفمبر 2009 02:01 ص، قطب انس حاجبيه بشدة وهو يقول:

في انتظار خطة العمل ساعمل على بعض الاكواد و يساضيف  اكواد اخرى و ساعلمكم بما تحصلت عليه.بالنسبة للرخصة فاي رخصة سنعمل بها ؟
أعتقد GPL3 ستفي بالغرض, كي نضمن بقاء جميع التعديلات اللاحقة و المشتقات متوفرة كما هو الحال في الكود السابق

محمد خشاشنة

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

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

السلام عليكم.



وفي 30 نوفمبر 2009 12:31 م، قال Mohammad Khashashneh متحمساً:

همم. أنت على حق. حسنا فليكن كما يلي:

بما انني كسول نوعا في الكتابة ☺ فساقترح مايلي :

class ClassName
{
	private:

//Separate int+bool+float  and char and pointer by a new line

		int    m_NumberOne;  // int memberNumberOne; smaller no !?
		bool   m_NumberTwo;

                char   m_Name ;
                char   m_Info ;


		int   *m_data; // All member should start with m_ for a clear code
	        char  *m_data2


        public:
		void doSomething( int a ); // let make a clear area betwen the parametres (double space )
		bool doSomethingElse( );
};

void ClassName::doSomething( int a ) { // what do you think if we put it like this ?
	m_NumberOne = a ; 
}
...



وفي 30 نوفمبر 2009 12:31 م، ظهر شبح ابتسامة على وجه Mohammad Khashashneh وهو يقول:

أود أن أتعلم استخدام هذه المكتبة منذ فترة طويلة, فقررت أن أجربها هنا للتعرف على بعض قدراتها.
و انا كذلك اريد تعلمها.
اما فيما يخص الـ uint32_t فانا احبذ استعمال التعريفات الخاصة بالـ SDL مثل : uint16




أما في 30 نوفمبر 2009 12:31 م، فقد تنهد Mohammad Khashashneh بارتياح وهو يرد:

حاليا هما منفصلتان, قد نقوم ببناء المكتبة dynamically أو statically و ضمها للعبة في مرحلة الlinlking.
اذا ابني المكتبة ثم استعملها في اللعبة ؟
اذا كان الامر كذلك فانا افضل العمل على المكتبة ثم عند جاهزيتها نبدا اللعبة...ما رايك ؟



في 30 نوفمبر 2009 12:31 م، غمغم Mohammad Khashashneh باستغراب قائلاً:

أنت على حق مرة أخرى، فكنت قد بدأت بوضع بعض الملاحظات بشكل عام عندما بدأنا بالمشروع السنة الماضية، سأقوم بإرفاقها للمشاركة التالية لعلنا قمنا بتعديلها لتكون بمثابة To do list توضح ما علينا انجازه.

لا اتكلم عن الـ ToDo List فقط بل عن كيفية البرمجة و ماهي التقنيات التي سنستعملها. مثال بسيط :

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

هذا سيوفر لنا الوقت و الجهد و يمكننا من تعلم تقنيات جديدة ( اتمنى ان تساعدنا الادارة في هذه النقطة الحساسة ).



بتاريخ 30 نوفمبر 2009 12:31 م، قطب Mohammad Khashashneh حاجبيه بشدة وهو يقول:

أعتقد GPL3 ستفي بالغرض, كي نضمن بقاء جميع التعديلات اللاحقة و المشتقات متوفرة كما هو الحال في الكود السابق
حسنا لا مشكلة ساعدل ماهو عندي.

سلام.

خبير  Mohammad Khashashneh مشاركة 16

في 02 ديسمبر 2009 02:54 ص، عقد انس حاجبيه بتفكير وقال:

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

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

لإعطاء بعض الأسباب الأخرى:
- أنا لم اقصد ب memberNumberOne استخدام كلمة member في مقدمة كل عضو في الclass، ما كان قصدي هو استخدام اسم كامل وواضح يعبر عن هذا العضو. مثلا anas او renderer و ليس memberAnas او memberRendere أو حتى m_Anas
-باقي الأشياء: بعد التجربة، مهم جدا ان يتمتع المبرمج بمرونة و يتأقلم مع الأوضاع مهما كانت. فسيكون هناك اختبارات عديدة في الحياة العملية تحتم عليك اتباع اساليب لا تحبها أو لم يسبق لك أن تعاملت معها, لكن ليس بيدك حيلة و عليك العمل بها لسبب أو لآخر.

وفي 02 ديسمبر 2009 02:54 ص، قال انس متحمساً:

اما فيما يخص الـ uint32_t فانا احبذ استعمال التعريفات الخاصة بالـ SDL مثل : uint16
نحن نريد أكثر الأمور ال standard و portable و المتوفرة على معظم المنصات. أما SDL، فقد نقرر التخلي عنها قي يوم من الأيام و لا نريد أن يكون اعتمادنا عليها أو غيرها أساسيا في جميع أجزاء الكود ليعطنا مرونة و حرية أكثر، و إلا فنحن نعيد ما هو الحال في الكود الأصلي.


وفي 02 ديسمبر 2009 02:54 ص، ظهر شبح ابتسامة على وجه انس وهو يقول:

اذا ابني المكتبة ثم استعملها في اللعبة ؟
نعم


أما في 02 ديسمبر 2009 02:54 ص، فقد تنهد انس بارتياح وهو يرد:

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



في 02 ديسمبر 2009 02:54 ص، غمغم انس باستغراب قائلاً:

لا اتكلم عن الـ ToDo List فقط بل عن كيفية البرمجة و ماهي التقنيات التي سنستعملها. مثال بسيط :
هذا أيضا مهم, لكننا الآن نعاني من نقص في الموارد البشرية, قأعتقدبأن Todo list بسيطة, ستسهل علينا التركيز في العمل بداية.
لكن أرجو إن كان لديك اقتراحات مناسبة ان تتطرحها للمناقشة. سأحاول أنا أيضا العمل بنفس الأسلوب.


حسنا, أرفقت بعض التعديلات اللتي قمت بها مؤخرا, معظمها في الInputManager class.
ولقد قمت أيضا بدمج تعديل أنس على الDrawImage function, و بعض الأشياء الطفيفة هنا و هناك.

في التالي سأقوم بتعديل الرخصة و حقوق الملكية لجميع الملفات, كي يتسنى لنا امكانية وضع الكود على GoogleCode  و استخدام الSVN في عمليات تعديل و حفظ  الكود واصداراته.


محمد خشاشنة

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع

خبير  Mohammad Khashashneh مشاركة 17

السلام عليكم

قمت بتعديل الرخصة و ملكية الكود للمشروع, و هو مستضاف على خدمة ال googlecode.com.
فيمكنكم الآن الحصول على أحدث اصدار للكود و متابعة آخر التعديلات من خلال صفحة المشروع http://code.google.com/p/kvalleyx

للحصول على الكود, يمكنكم استخدام أي من الsubversion clients المتوفرة (مثل tortoisesvn) أو يمكنكم استخدام svn من الcommandline مباشرة. التعليمات موجودة على http://code.google.com/p/kvalleyx/source/checkout

يمكنكم تصفح الكود باستخدام المتصفح على http://code.google.com/p/kvalleyx/source/browse/
يمكنك إيضا متابعة آخر الcommitts على http://code.google.com/p/kvalleyx/source/list

للحفاظ على سهولة إدارة المشروع, سيكون هناك بداية عضوين (غيري) هما  أنس  ووسام, فأرجو منكم ارسال رسالة شخصية لي من بريدكم الإلكتروني لدى gmail ﻹضافتكم لقائمة الأعضاء. سأضيف أعضاء حسب الطلب لاحقا.
 
لبقية الأخوان ممن يريدون الإنضمام لنا، فسأقوم بشرح مبسط للآلية اللازمة اتباعها لإضافة كود للمشروع بواسطة svn, و من ثم مشاركتنا, لكن
نظريا أي شخص يمكنه وضع التعديلات هنا في هذا الموضوع للمناقشة، فالجميع مدعوون لفعل ذلك.

محمد خشاشنة

من سار على الدرب وصل, من جد وجد...
بس عتبك على اللي بيسمع