الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

( المشروع مكتمل ) ورشة عمل للعبة السفينة

مثبّترائج
بدأه sayedf1 في 31 يوليو 2008 · 376 رد · 58,146 مشاهدة · في ورش العمل والتطوير , والمشاريع والألعاب
مشاركة: واتساب X فيسبوك تيليجرام
#51

ينفع ...

المهم أن تكون هذه ملفات الرأسية موجودة

gl.h و glu.h و glut.h ...

#52

انا نزلت الانت قولت عليه وجاري العمل الان ان شاءالله بخلص وارفقه مره ثانيه هنا

#53

ينفع تشتغل بفيجول استيديو مش لازم dev cpp هو هو نفس الكود هيتكتب و نفس المكتب مع فروق بسيطه جدا و بالتوفيق ! و اي مساعدة في الخدمة

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#54
احمد صالح كتب:
ينفع تشتغل بفيجول استيديو مش لازم dev cpp هو هو نفس الكود هيتكتب و نفس المكتب مع فروق بسيطه جدا و بالتوفيق ! و اي مساعدة في الخدمة

أنا فضلت dev-cpp لأنني أعمل على لينوكس على gcc

حتى تكون المترجمات متوافقة

لكن لا مشكلة في إستعمال أي مترجم آخر

#55

السلام عليكم

ما رأيكم فى هذه السفينه ان أعجبتكم اكملها

post-45582-1217873567_thumb.jpg

163374357.gif

#56
sayedf1 كتب:
السلام عليكم

ما رأيكم فى هذه السفينه ان أعجبتكم اكملها

لكن هل نريد أن تكون الصورة من فوق من الجانب ؟؟؟

#57

من فوق لكن حبيت ان اريكم شكل السفينه

163374357.gif

#58

من فوق

post-45582-1217877561_thumb.jpg

163374357.gif

#59

و لكن هل سنترك الصور الآخرى أم سنضع السفينتان في اللعبة ؟؟؟

#60

لكم الأختيار

163374357.gif

#61

أين فريق البرمجة ؟؟؟؟

إلى أين توصلتم في class السفينة و class الصخور ؟؟

اليوم إن شاء الله سأضع دالة التصادم مع الصخور ...

#62

ارى ان حماس بعض الأعضاء قل

163374357.gif

#63

أنتهيت من دالة التصادم

و عذراً على التأخير ... كان عندي بعض الكورسات و الإمتحانات و إن شاء الله أنتهي منها الإسبوع القادم

typedef struct {float X1,X2,Y1,Y2;} line;
int Takato3(float X1,float X2, float X3, float X4, float Y1, float Y2, float Y3, float Y4)
{
	float M,M2,B,B2,NX,NY;
	if (X1 == X2) X1 += 0.00001;
	if (X3 == X4) X3 += 0.00001;
	M = (float)(Y2-Y1)/(X2-X1);
	M2 = (float)(Y4-Y3)/(X4-X3);
	B = Y2 - X2*M;
	B2 = Y4 - X4*M2;
	NX = (float)(B2-B)/(M-M2);
	NY = M2*NX+B2;
	if ((float)(sqrt((Y2-NY)*(Y2-NY)+(X2-NX)*(X2-NX))+sqrt((NY-Y1)*(NY-Y1)+(NX-X1)*(NX-X1))) == (float)sqrt((Y2-Y1)*(Y2-Y1)+(X2-X1)*(X2-X1)) && 
		(float)(sqrt((Y4-NY)*(Y4-NY)+(X4-NX)*(X4-NX))+sqrt((NY-Y3)*(NY-Y3)+(NX-X3)*(NX-X3))) == (float)sqrt((Y4-Y3)*(Y4-Y3)+(X4-X3)*(X4-X3))	)
		return 1; else return 0;
}
float Modala3(line A[], line B[], int As, int Bs)
{
	for (int i = 0; i < As; i++)
	for (int j = 0; j < Bs; j++)
		if (Takato3(A.X1,A.X2,B[j].X1,B[j].X4,A.Y1,A.Y2,B[j].Y1,B[j].Y2))
			return 1;
	return 0;
}

قمت بعمل دالتان

الدالة الأولى أمرر لها خطان و تكشف هل الخطان متقاطعان أم لا

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

و هناك دالة ثالثة و هي دالة التصادم الحقيقية و هي التي أمرر لها كائنان لتكشف هل هما متصادمان أم لا

مثلاً إنظروا إلى هذه السفينة

post-112912-1218053626_thumb.png

قمت بتحديدها بمجوعة من الخطوط

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

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

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

لكن لن أضع الدالة الثالثة هنا حتى أرى classes السفينة و الصخور لأعرف كيف أتعامل معهم

إلى الآن وضعت أسماء لمتغيرات على أنني أفترض أن الclass سيكون بهذا الشكل و عندما أرى الclass أقوم بالتعديلات اللازمة

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

#64

رائع أخ عمر .. الله يبارك فيك :)

لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا

ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا

والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا

#65

هاكذا يكون العمل بارك الله فيك اخى عمر

163374357.gif

#66

سؤال ...

عندما تصطدم السفينة بالصخرة ...

هل سترجع إلى الوراء ؟؟ أم تتوقف ؟؟

#67

منطقياً تتوقف

163374357.gif

#69

اذا اصتدمت بسفينه هناك احتمالان

1- ان تكون السفينه سفينة قراصنه وفى هذه الحاله تتغير طريقة اللعب وتصبح على سفينه القراصنه يقاتل عليها كى يحصل على الكود

2- ان تكون سفينه صديقة وتمده ببعض المعلومات او سلاح جديد حسب ما نريد

163374357.gif

#70

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

تاني سؤال اللعبه هتبقي ثري دي طبعا هنستخدم في تصميم الصور والشخصيات هنستخدم ايه في التصميم انا برشح ثردي ماكس او المايا والبوسر ولا ايه؟

ثالت حاجه هما فين فريق البرمجه وفريق التصميم وفريق الذكاء الصناعي ياريت نكتب في الموضوع اسامي المشاركين

رابع حاجه ممكن اشترك معاكم ولا باب الحجز مقفول

#71

اهلا بيك معنا seikoo باب الحجز مفتوح

163374357.gif

#72

معلش ياجماعه انا سافرت فجأة عشان ظروف

هارجع بكره بليل ان شاء الله

وهاطرح الكود بعدها بيوم ان شاء الله

اسف للغياب المفاجا

#73

اسمعوني منيح يا جماعه صح انا مبتدأ في برمجة الالعاب لكن ما بسمح لهذا يحصل.......عاهدتم انفسكم منذ البدايه ببرمجة لعبه تحمل اسم

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

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

الموضوع امام الاعضاء........خلاصة الموضوع نريد ان نرى لعبه تحمل اسم الفريق العربي للبرمجه

...تخيلوا كم سوف تكون مرارة الفشل بعد قطع منتصف الطريق...........تخيلوا

تم تعديل هذه المشاركة بواسطة ame5r في 9 أغسطس 2008 في 01:04

If Games Are Fun.....So Making Games Making Fun

#74
seikoo كتب:
هيا اللعبه هتبقي بسي بلس بلس وفهمنها بس علي اي منصة اوبن جي ال ولا ديركت اكس

تاني سؤال اللعبه هتبقي ثري دي طبعا هنستخدم في تصميم الصور والشخصيات هنستخدم ايه في التصميم انا برشح ثردي ماكس او المايا والبوسر ولا ايه؟

ثالت حاجه هما فين فريق البرمجه وفريق التصميم وفريق الذكاء الصناعي ياريت نكتب في الموضوع اسامي المشاركين

رابع حاجه ممكن اشترك معاكم ولا باب الحجز مقفول

سنستعمل opengl

و لغة سي++

و ستكون ثنائية الأبعاد من فوق

و لن نستعمل أي محركات أو أي شئ مساعد أو برامج تصميم ثري دي

أنا أقوم بدوال الفيزياء

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

#75

هذا ما قمت به إلى الآن

هذا class السفينة

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

class Ship
{	public:	float theta, omega, alfa, acceleration, speed, x, z;
			int type, health;
			Ship(int ty, float X, float Z);
			void DrawShip();
			void MoveShip();			};
Ship::Ship(int ty, float X, float Z)
{	x = X;
	z = Z;
	ty = type;
	theta = omega = alfa = acceleration = speed = 0;
	health = 100;	}
void Ship::DrawShip()
{	float Xs[5],Ys[5];
	Xs[0] = 0.10*cos(0.785398163+theta) + x;
	Ys[0] = 0.10*sin(0.785398163+theta) + z;
	Xs[1] = 0.15*cos(1.570796325+theta) + x;	
	Ys[1] = 0.15*sin(1.570796325+theta) + z;
	Xs[2] = 0.10*cos(2.356194487+theta) + x;
	Ys[2] = 0.10*sin(2.356194487+theta) + z;
	Xs[3] = 0.10*cos(3.926990813+theta) + x;
	Ys[3] = 0.10*sin(3.926990813+theta) + z;
	Xs[4] = 0.10*cos(-0.785398163+theta) + x;
	Ys[4] = 0.10*sin(-0.785398163+theta) + z;
	glColor3f(0,0,0);
	glBegin(GL_POLYGON);
		for (int i = 0 ; i < 5 ; i++)
			glVertex2f(Xs,Ys);
	glEnd();								}
void Ship::MoveShip()
{	z += speed*sin(theta+1.570796325);
	x += speed*cos(theta+1.570796325);
	speed += acceleration;
	if (speed > 0.04)
		speed = 0.04;
	else if (speed < -0.04)
		speed = -0.04;				}

ثم قمت بتعريف بعض السفن كي أضعها على الشاشة

Ship S(0,0,0);
Ship A[5] = {Ship(0,1,1),Ship(0,-1,0.7),Ship(0,2,-1),Ship(0,0.4,-1.5),Ship(0,0.3,3)};

و دالة العرض

void display()
{	glClearColor(1.0,1.0,1.0,1.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	S.MoveShip();
	glLoadIdentity();
	glTranslated(-S.x,-S.z,0);
	S.DrawShip();
	for (int i = 0 ; i < 5 ; i++)
		A.DrawShip();
	glFlush();
	glutSwapBuffers();				}

دالة إستقبال مدخلات لوحة المفاتيح

void keyboard(unsigned char k, int x , int y)
{	if (k == 'w' || k == 'W')
		S.acceleration = 0.0005;
	else if (k == 's' || k == 'S')	
		S.acceleration = -0.0005;
	else if (k == 'a' || k == 'A')
		S.theta += 0.1;
	else if (k == 'd' || k == 'D')
		S.theta -= 0.1;
	else if (k == 'q' || k == 'Q')
	{	S.acceleration = 0; 
		if (S.speed > 0.01)
			S.speed -= 0.01;
		else if (S.speed < -0.01)
			S.speed += 0.01;
		else 	S.speed = 0;
				}
	}

و هذه الدالة لمؤقت يقوم بإستدعاء دالة العرض كل 50 ميلي ثانية

void Timer(int Value)
{	display();	
	glutTimerFunc(50,Timer,0);	}

الدالة main

int main(int argc, char** argv)
{	glutInit( &argc, argv );
	glutInitDisplayMode( GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH );
	glutInitWindowPosition(0,0);
	glutInitWindowSize(320,240);
	glutCreateWindow("Safina Test ...");
	glutDisplayFunc(display);
	glutKeyboardFunc(keyboard);
	glutTimerFunc(50,Timer,0);
	glutMainLoop();
	return 0;		}

الكود كاملاً في المرفقات

Takato3.zip

تم تعديل هذه المشاركة بواسطة omar_cplusplus في 9 أغسطس 2008 في 16:06

مواضيع مشابهة