( المشروع مكتمل ) ورشة عمل للعبة السفينة
انا نزلت الانت قولت عليه وجاري العمل الان ان شاءالله بخلص وارفقه مره ثانيه هنا
ينفع تشتغل بفيجول استيديو مش لازم dev cpp هو هو نفس الكود هيتكتب و نفس المكتب مع فروق بسيطه جدا و بالتوفيق ! و اي مساعدة في الخدمة
BEng , Electronics and communications.
Embedded systems engineer.
Graphics Programmer
عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح
احمد صالح كتب:ينفع تشتغل بفيجول استيديو مش لازم dev cpp هو هو نفس الكود هيتكتب و نفس المكتب مع فروق بسيطه جدا و بالتوفيق ! و اي مساعدة في الخدمة
أنا فضلت dev-cpp لأنني أعمل على لينوكس على gcc
حتى تكون المترجمات متوافقة
لكن لا مشكلة في إستعمال أي مترجم آخر
sayedf1 كتب:السلام عليكمما رأيكم فى هذه السفينه ان أعجبتكم اكملها
لكن هل نريد أن تكون الصورة من فوق من الجانب ؟؟؟
أين فريق البرمجة ؟؟؟؟
إلى أين توصلتم في class السفينة و class الصخور ؟؟
اليوم إن شاء الله سأضع دالة التصادم مع الصخور ...
أنتهيت من دالة التصادم
و عذراً على التأخير ... كان عندي بعض الكورسات و الإمتحانات و إن شاء الله أنتهي منها الإسبوع القادم
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;
}قمت بعمل دالتان
الدالة الأولى أمرر لها خطان و تكشف هل الخطان متقاطعان أم لا
و هذه الدالة سنستخدمها في الدالة الثانية حيث سنمرر للدالة الثانية مجموعتان من الخطوط على أنهما مضلعان و تكشف هل هذان المضلعان متقاطعان أم لا
و هناك دالة ثالثة و هي دالة التصادم الحقيقية و هي التي أمرر لها كائنان لتكشف هل هما متصادمان أم لا
مثلاً إنظروا إلى هذه السفينة
قمت بتحديدها بمجوعة من الخطوط
و الدالة الثالثة ستقوم بوضع تلك الخطوط في أماكنها و تمررها كمضلع لدالة تصادم المضلعات
و نفس الأمر متعلق بالصخور ... سأقوم بتحديدها بمجموعة خطوط ثم أكتب أماكن تلك الخطوط و أقوم بعمل المضلع في الكود بنفس أماكن الخطوط و أمررها للدالة المذكورة
أما زاوية التصادم فقمت بكتابة دالة تكشف عن الزاوية التي تجب أن تسير فيها السفينة بعد الإصطدام طبعاً تكون حسب الفرق ما بين موضع الصخرة و موضع السفينة أو موضع السفينة الأولى و الثانية و حساب الزاوية التي بينهم
لكن لن أضع الدالة الثالثة هنا حتى أرى classes السفينة و الصخور لأعرف كيف أتعامل معهم
إلى الآن وضعت أسماء لمتغيرات على أنني أفترض أن الclass سيكون بهذا الشكل و عندما أرى الclass أقوم بالتعديلات اللازمة
بقي عندي دالة سير السفينة و التي سأعتمد فيها على سرعة و عجلة السفينة و سرعة و عجلة دورانها و زاوية السير و زاوية النظر
رائع أخ عمر .. الله يبارك فيك :)
لله في الآفاق آيات لعـــل = أقلهـــا هو ما إليه هداكا
ولعل ما في النفس من آياته = عجبٌ عجابٌ لو ترى عيناكا
والكون مشحون بأسرار إذا = حاولت تفسيراً لهــا أعياكا
اذا اصتدمت بسفينه هناك احتمالان
1- ان تكون السفينه سفينة قراصنه وفى هذه الحاله تتغير طريقة اللعب وتصبح على سفينه القراصنه يقاتل عليها كى يحصل على الكود
2- ان تكون سفينه صديقة وتمده ببعض المعلومات او سلاح جديد حسب ما نريد

هيا اللعبه هتبقي بسي بلس بلس وفهمنها بس علي اي منصة اوبن جي ال ولا ديركت اكس
تاني سؤال اللعبه هتبقي ثري دي طبعا هنستخدم في تصميم الصور والشخصيات هنستخدم ايه في التصميم انا برشح ثردي ماكس او المايا والبوسر ولا ايه؟
ثالت حاجه هما فين فريق البرمجه وفريق التصميم وفريق الذكاء الصناعي ياريت نكتب في الموضوع اسامي المشاركين
رابع حاجه ممكن اشترك معاكم ولا باب الحجز مقفول
معلش ياجماعه انا سافرت فجأة عشان ظروف
هارجع بكره بليل ان شاء الله
وهاطرح الكود بعدها بيوم ان شاء الله
اسف للغياب المفاجا
اسمعوني منيح يا جماعه صح انا مبتدأ في برمجة الالعاب لكن ما بسمح لهذا يحصل.......عاهدتم انفسكم منذ البدايه ببرمجة لعبه تحمل اسم
الفريق العربي للبرمجه وراح تنفذوا اللي تعاهدتم له ...لهذا لا اريد ان ارى عزائم قد هبطت لم يبقى شيء تستطيعون تقسيم المهام على كل
واحد ترونه مناسب لهذه المهمه ويكون من السهل عليكم مشاركة الافكار عن طريق برامج المحادثه واخر ما توصلتم اليه تضعونه في هذا
الموضوع امام الاعضاء........خلاصة الموضوع نريد ان نرى لعبه تحمل اسم الفريق العربي للبرمجه
...تخيلوا كم سوف تكون مرارة الفشل بعد قطع منتصف الطريق...........تخيلوا
تم تعديل هذه المشاركة بواسطة ame5r في 9 أغسطس 2008 في 01:04
If Games Are Fun.....So Making Games Making Fun
seikoo كتب:هيا اللعبه هتبقي بسي بلس بلس وفهمنها بس علي اي منصة اوبن جي ال ولا ديركت اكستاني سؤال اللعبه هتبقي ثري دي طبعا هنستخدم في تصميم الصور والشخصيات هنستخدم ايه في التصميم انا برشح ثردي ماكس او المايا والبوسر ولا ايه؟
ثالت حاجه هما فين فريق البرمجه وفريق التصميم وفريق الذكاء الصناعي ياريت نكتب في الموضوع اسامي المشاركين
رابع حاجه ممكن اشترك معاكم ولا باب الحجز مقفول
سنستعمل opengl
و لغة سي++
و ستكون ثنائية الأبعاد من فوق
و لن نستعمل أي محركات أو أي شئ مساعد أو برامج تصميم ثري دي
أنا أقوم بدوال الفيزياء
و قد عملت class السفن مع دالة تجريبية لرسم السفينة فقط ترسم شكل مضلع من خمس أضلاع كي أختبر به حركة السفينة و تصادمها
هذا ما قمت به إلى الآن
هذا 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; }الكود كاملاً في المرفقات
تم تعديل هذه المشاركة بواسطة omar_cplusplus في 9 أغسطس 2008 في 16:06