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

الذكاء الإصطناعي

مغلق
بدأه hunterxhunter في 11 أكتوبر 2006 · 26 رد · 6,070 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

لاأريد الإطالة عليكم فقط سوضح ماذا اريد من الموضوع

1_ هذا الموضوع يتكلم عن شرح الذكاء الإصطناعي

2_لن أشرح الخوارزميات العالمية ولكن أقد أضع لها روابط

3_قد نعمل بعض الخوارزميات الخاصة بنا إذا تطلب الأمر مثل : خوارزميات المسارت وغيرها

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

5_إذا أرت عمل شيء ولم تعرف كيف فقم بوضعه هنا وأنا سأشرحه إن شاء الله

فإنتضار الأسئلة

والسلام عليكم

#2

موفق إن شاء الله ,

و إتمني أن أدعم موضوعك إن شاء الله إن إستطعت وانا تحت أمرك في أي مساعدة ,

و قد أستطيع ان أشرح مقدمة فقط لكن ليس شئ متقدم عن الخوارزميات إن شاء الله .

أخيكم في الله;

NubiaPrince

أحمد أسامة

' و على الله فليتوكل المؤمنون '

* فريق الجرافيك الحاسوبي العربي الإسلامي * the Arabic-Islamic Computer Graphics - A I C G

イスラム教は平和を意味する

이슬람교는 평화를 의미한다

Ислам означает мир

#3

نحن بانتظارك ...

#4

السلام عليكم

أخواني الكرام أحمد و محمد

مشكورين على ردكم

ولكن شباب ألا يوجد أي سؤال لأن ليس لدي إلا إسبوعين ومن ثم سأغيب لضروف دراسية

فأرجوا الإسراع بوضع الأسئلة

#5

أقترح " خوارزميات المسارت " .. اذا كنت تقصد السير على مسارات محددة ..

فهذا الموضوع يهمني كثيرا هذه الفترة .

تم تعديل هذه المشاركة بواسطة الشمري في 13 أكتوبر 2006 في 12:50

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

فكره جميله جداً

لكن نريد أفضل الخوارزميات في لعبه معينه مثل 8-puzzle

او الشطرنج ، ونبدى فيها

#7

اخي العزيز لدي مشكلة ربما انها تتعلق بالذكاء الصناعي

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

احداثيات منطقة الحل المثلى

فاخي العزيز ان امكن المساعة اكون ممنون جدا :rolleyes:

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

أستضافة مواقع (Website Hosting) ابتداء من 35دينار اردني (50$) سنوي 962799247524+ أضغط هنا

logo.png

#8

Super_Pro

هذا الموضوع ( من وجهة نظري على الأقل ) ليس له علاقه بايجاد منطقة الحل المثلى

ماتريده هو حل معادلات رياضيه وطريقة رسمها

www.google.com يفي بالغرض

#9

السلام عليكم

أخي العزيز الشمري

نعم هذا ماقصته

سأكتب شرح بسيط عن المسارات في خطوط مستقيمة ثم سنحاول التطرق إلى المسارات المنحنية

أخي العزيز عيسى

سنأخد مثال الشطرنج ولكن بعد أن ننتهي من المسارات

أخي العزيز Super_Pro

الموضوع ليس له علاقة بمنطقة الحل المثلى

ولكن إذا كانت لديك معادلتين معينتين كل إلي عليك إنك تعوض في المعادلتين وتوجد نقطة التقاطع

ومن ثم تأخد إحدا المعادلتين وتعوض مع معادلت المحور السيني اللي معادلته ص=0 وهكذا

يعني السالفة كلها تعويض

وبعد ماتوجد النقاط تكون وجت منطقة الحل المثلى

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

ولكن إذا أرت أي مساعده راسلني على الخاص

سأضع الشرح في ردي القادم

#10

مكرر

تم تعديل هذه المشاركة بواسطة hunterxhunter في 14 أكتوبر 2006 في 15:29

#11

السلام عليكم

المسارات

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

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

المطلوب كيف عمل مثل هذه المسارات

لنفرض أنك تريد أن تجعل العدو يسير في مسار مثل اللي في الصورة (الصورة في المرفق)

كل اللي عليك أن تحدد نقاط المسار بالترتيب

النقطة الأولى (8 و0) وهي موقع العدو الأول

النقطة الثانية (0و0)

النقطة الثالثة (0و5)

النقطة الرابعة (8و5)

النقطة الخامسة (8و10)

النقطة السادسة (0و10)

الآن إ ذا أردنا الإنتقال من النقطة الأولى إلى الثانية يجب علينا أن نوجد معادلة المستقيمة

ص=م س+د

ص:فرق الصادات =0-0 =0

س:فرق السينات =0-8=-8

م=ص/س=0/-8=0

د=0

ثم نحرك العدو على محور السينات بمقدار معين كل مرة وليكن 1 أو -1

1 إذا كان إحداثي السيني للنقطة الأولى أصغر من إحداثي السيني للنقطة الثانية

-1 إذا كان الإحداثي السيني للنقطة الأولى أكبر من إحداثي السيني للنقطة الثانية

أي في مثالنا ستكون القيمة -1

X+=-1

ثم نعوض في معادلة المستقيم لتعرف قيمة الإحداثي الصادي

ص=0*-1+0=0

ولكن ستواجهنا مشكلة وهي أننا نتعامل مع قطعة مستقيمة وليس مستقيم

أي أننا سنضع شرط للتوقف إذا كانت قيمة الإحداثي السيني للعدو =قيمة الإحداثي السيني للنقطة الثانية

لكي لا يتعدا المسار المحدد

ثم ننتقل إلى القطعة المستقيمة المكون من النقطة الثانية والثالثة وهكذا

ولكن نستثني من الطريقة السابقة حالة واحدة وهي عندما يكون فرق السينات =0

في هذه الحالة يكون المسار هكذا

إذا كان إحداثي الصادي للنقطة الأولى أصغر من إحداثي الصادي للنقطة الثانية Y+=1

أو

إذا كان إحداثي الصادي للنقطة الأولى أكبر من إحداثي الصادي للنقطة الثانية Y+=-1

بما أننا عرفنا كيف عمل مسار من نقطتين إذا نستطيع عمل المسار مثل اللي في الصورة

بحفظ النقاط في مصفوفة (ولكن إنتبه إلى ترتيب النقاط) وعندما يصل إلى آخر نقطة في المسار

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

طبعا هذه الطريقة الأكثر إستخذاما في الألعاب

سأضع تطبيق عليه ولكن لاحقا

untitled.bmp

تم تعديل هذه المشاركة بواسطة hunterxhunter في 14 أكتوبر 2006 في 15:32

#12

انا من الناس اللي يفهم بمجرد ان يرى تطبيق :D >> يعني مش بالسهولة أفهم ..

لكن ما رأيك اخي بخوارزمية Bresenham انا قرأت انها مفيدة في هذا الشأن ؟؟

انا الان لا املك جهازي .. فلا استطيع التطبيق .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#13

اخي عيسى شكر على وجهة نظرك

اخي hunterxhunter شكر لك وفي الانتظار عن طريق الخاص

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

أستضافة مواقع (Website Hosting) ابتداء من 35دينار اردني (50$) سنوي 962799247524+ أضغط هنا

logo.png

#14

السلام عليكم

أهلا أخي الشمري

سأرفق التطبيق بعد قليل

بالنسبة إلى الخوارزمية فهي مفيدة ولها دروس كثيرة على النت وأيضا ستفيدك في رسم الدائرة والمسارات

#15

السلام عليكم

آسف على التأخر

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

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

أولا أعلن عن المتغيرات العامة

static bool go=true;
static int d;
static int x2x=1000,y2y=0;

المتغير الأول لمعرفة ما إذا كان العدو رايح أو جاي

المتغير الثالث موقع العدو ويجب أن يكون موقعه على النقطة الأولة

الدالة الأولى

تعطيه أي نقطتين وتعملك مسار منهم

void ray(int x,int y,int x2,int y2)
{

float m;
if ((x2-x)!=0)
{
m=(y2-y)/(x2-x);

if((x<x2)&&(x2x<x2))
{
x2x+=1;
}
if((x>x2)&&(x2x>x2))
{
x2x+=-1;
}
if((y2-y)!=0)
y2y=x2x*m;


}
if ((x2-x)==0)
{


if ((y<y2)&&(y2y<y2))
{
y2y+=1;

}
if ((y>y2)&&(y2y>y2))
{
y2y+=-1;

}

}



}

الدالة الثانية

فقط تضع النقط بالترتيب لعمل مسارات متعددة

void raya(point poin[])
{

	for(int i=0;i<6;i++)
	{

		if((poin.x==x2x)&&(poin.y ==y2y))
		{
			d=i;

		}
	}
	if (d==0)
		go=true;


	if(d==5)
go=false;
if (d!=5&&go==true)
{

ray(poin[d].x,poin[d].y ,poin[d+1].x ,poin[d+1].y);
}
}

ثم في دالة render

تعلن عن النقاط

point poi[6];
poi[0].x=1000;
poi[0].y=0;

poi[1].x=0;
poi[1].y=0;

poi[2].x=0;
poi[2].y=-500;

poi[3].x =1000;
poi[3].y =-500;

poi[4].x =1000;
poi[4].y =-1000;

poi[5].x =0;
poi[5].y =-1000;
raya(poi);

ملاحضة :لاتكتب أكثر من نقطة متساوية في الإحداثيات

#16

السلام عليكم

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

فلما أضغط أرفق هذا الملف إتعلق الصفحة

فهل من حل

ولكن إذا أرتم تطبيق المثال أنقلوا الدوال السابقة

ولاتنسوا تعملوا

struct point

{

int x,y;

};

تم تعديل هذه المشاركة بواسطة hunterxhunter في 16 أكتوبر 2006 في 14:15

#17

المنتدى احيانا يتنّح معك ,, حاول ترفقه في وقت مافيه زحمة .. بعد السحور مثلا ..

شاهدت الدالة .. سأختبرها. يوم الخميس القادم ان شاء الله .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#18

السلام عليكم

أهلا أخي الشمري

أشكر لك متابعتك

ولكن هل هناك شيء معين تريده في المسارات فقد أصططيع المساعده فيه

لو أرت أن تعمل لعبه جاسوسية وعندك أداة للإختفاء

فكيف تجعل الأعداء لايعلموا بوجودك

الفكرة بسيطة جدا

أولا كيف تجعل العدو يكتشف الشخصية في الحالة العادية (بدون الإختفاء)

بكشف التصادم بين أشكال هندسية (مكعب ومثلث)

طيب كل إللي عليك عمل متغير واحد من نوع bool

وسميه أي إسم وهوللإختفاء

مثلا

bool a;

فإذا كان

True:الشخصية مختفية

False:الشخصية ضاهرة

وضع في شرط كشف التصادم(كشف الشخصية)

if((.....)&&(a==false))

أي لن يكتشف الشخصية إذا كانت true

يمكن المثال كلكم تعرفوه

أنروح إلى المسارات

بالنسبة الدالة الأولى فهي اللي فيها الأخطاء

إكتشفت خطأين

الخطأ الأول

m=(y2-y)/(x2-x);

تصحيحه

m=(float)(y2-y)/(float)(x2-x);

الخطأ الثاني

في الإحداثي الصادي

لو أخدنا نقطتين

الأولى ( 1000 و 0 )

والثانية (0 و-100)

الميل =0.1

راح يصير الخطئ عند تطبيق الآتي

y2y=x2x*m;

حيث

X2x=1000

لأنها أول نقطة في المسار

الخطئ

y2y=100

حيث y2y يجب أن تكون

y2y=0

سأصلح الأخطاء ولكن لاحقا إن شاء الله لأني لا أجلس على الجهاز واجد

ملاحضة إذا كنت تريد تطبيق مسارات أخرى فقط ستغير في الدالة الأولة لأنها تعمل مسارات مستقيمة

لأن المسارات هي الإنتقال من نقطة إلى نقطة بطريقة معينه

فكل اللي عليك إنك توجد مسار منحنا وتوضعه في الدالة الثانية وراح تزبط معاك

هل هنالك أفكار أخرا تريدوا أن نشرحها

ولكن إذا كانت مثل ألعاب الورق أو الشطرنج يجب معرفة قواعد اللعبة أولاً

تم تعديل هذه المشاركة بواسطة hunterxhunter في 17 أكتوبر 2006 في 12:18

#19

حاولت تطبيق طريقتك لكن كيف أجعل اللاعب يسير على النقاط اللي خزناها ؟؟ .

أبغى مثال exe : ) ,,

عموما حاولت ابحث عن خوارزميات ووجدت خوارزمية صغيرة لرسم الخط ... ونجحت معي .. لكن مشكلتي الان مع الTimer .. ..

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#20

هذا كود خوارزمية رسم خط ... ولكن مش مظبوطة 100% .. المشكلة ان النقاط تكون متباعدة .. بالتالي تكون الحركة غير ناعمة ..

void glPoint(int x,int y)
{
	glPointSize(1);
	glBegin(GL_POINTS);
			glVertex3i(x,y,-100);
	glEnd();
}

void linev6(	int x1,   int y1,
				int x2,   int y2,
			  POINT &point )
	{
	  int dx  = x2 - x1,
		  dy  = y2 - y1,
		  y   = y1,
		  eps = 0;

	  for ( int x = x1; x <= x2; x++ )  {
		 glPoint(x,y);


		eps += dy;
		if ( (eps << 1) >= dx )  {
		  y++;  eps -= dx;
		}



	  }//for

	}

POINT pos={0,0};

void Render()
{


			 glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
			glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
			glTranslatef(0,0,-12);//comment

			linev6(-30,0,30,30, pos);




}

تم تعديل هذه المشاركة بواسطة الشمري في 21 أكتوبر 2006 في 04:35

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#21

السلام عليكم

أخي الكريم الشمري

أنا وضعة مثال بسيط لأن المثال السابق 3d وما رضى يتحمل يمكن بسبب الحجم مع أن هناك أمثلة إثري دي في المنتدى

إذا كنت تبي تحرك الشخصية إستخدم دالة الإزاحة

glTranslatef(x2x,0, y2y );

ولكن هناك تغير في الدالة الأولى

 float r;
void ray(int x,int y,int x2,int y2)
{

float m;
if ((x2-x)!=0)
{
m=(float)(y2-y)/(float)(x2-x);
r=y-(x*m);

if((x<x2)&&(x2x<x2))
{
x2x+=1.0;
}
if((x>x2)&&(x2x>x2))
{
x2x+=-1.0;
}
if((y2-y)!=0)
{
float as=x2x*m;
float sa=r;
y2y=(float) ((x2x*m)+r);
//y2y=(float) ((as)+sa);
if (y2y<0&&y2y>-1)
{
y2y=0;

}
}

}
if ((x2-x)==0)
{


if ((y<y2)&&(y2y<y2))
{
y2y+=1.0;

}
if ((y>y2)&&(y2y>y2))
{
y2y+=-1.0;

}

}



if (y2y>0)
{

y2y=0;
}
}

سأرى الخوارزمية وسأرد عليك

glut.zip

#22

مثال ممتاز ,, هذا بالظبط ما اريده .. لكن هل من السهل تحويله إلى ثريدي !!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#23

السلام عليكم

أخي الكريم الشمري

أشكرك مرة أخرة لمتابعتك الموضوع

نعم من السهل تحويل المسار إلى ثريدي ولكن

في أغلب الألعاب يكون المسار 2d

مثلا

لوكانت عندك سيارة فليس من الطبيعي أن يكون مسارها ثريدي لأنها سترتفع إلى أعلى في هذه الحالة

وهذا خطئ إلا إذا كان في مرتفع

ولكن لو كان عندك طائرة فهنا يجب عليك عمل مسار ثريدي (طبعا نحن لانتكلم عنوع المسار هل هو منحنى أو مستقيم )

طيب كيف تعمل المسار فقط تدخل الإحداثي الثالث إلى المعادلات

مثلا الميل راح يكون نفسه في البعدين

الطول سيصبح جدر (س*س+ص*ص+ع*ع)

وهكذا

طبعا الألعاب اللي أتكلم عنها كلها ثريدي ولكن مو شرط المسار يكون ثريدي

إذا في أي غموض أو متغيرات غير واضحة في الكود فأرجوا إبلاغي عشان أوضحها

قبل لا أنسى هناك خطأ لم أعرف له حله مثلا

0.35 -0.35=1.5e-5

المفروض يساوي صفر بس ماأدري وش صاير فهل حد يعرف الحل

تم تعديل هذه المشاركة بواسطة hunterxhunter في 22 أكتوبر 2006 في 14:32

#24
اقتباس
نعم من السهل تحويل المسار إلى ثريدي ولكن

في أغلب الألعاب يكون المسار 2d

مثلا

لوكانت عندك سيارة فليس من الطبيعي أن يكون مسارها ثريدي لأنها سترتفع إلى أعلى في هذه الحالة

وهذا خطئ إلا إذا كان في مرتفع

ولكن لو كان عندك طائرة فهنا يجب عليك عمل مسار ثريدي (طبعا نحن لانتكلم عنوع المسار هل هو منحنى أو مستقيم )

طيب كيف تعمل المسار فقط تدخل الإحداثي الثالث إلى المعادلات

مثلا الميل راح يكون نفسه في البعدين

الطول سيصبح جدر (س*س+ص*ص+ع*ع)

وهكذا

طبعا الألعاب اللي أتكلم عنها كلها ثريدي ولكن مو شرط المسار يكون ثريدي

تمام ، لانك سوف تعمل علي المستوي XZ - طالما ال Y لا تتغير كثيرا ، تستطيع تطبيق خورازميات 2د بكل سهولة ..

طبقاً لتعريق معطيات البيانات و لاحظ ان الرقم له ارقام بعد العلامة ..

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#25
	cout <<0.35 -0.35<<endl;

الناتج صفر .. صحيح .

لكن حاول تأخذ احتياطاتك .

مثلا

	cout <<(float)0.35  - (float)0.35 <<endl;

عموما لو كتبت كذا

0.35 - 0.35f

سيخرج الناتج غلط ... حاول كل الرقمين تعمل لهم تحويل ..

مثل

0.35f -0.35f

سبق أن واجهت مشاكل مشابه في موضوع sprite ... وكان السبب أني ما اعمل casting .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

هذا الموضوع مغلق.

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