سلام ،
در مورد الگوریتم شوت به دروازه یا shootToGoal میخواستم یه توضیحات ابتدایی رو بگم ::
از مواردی که در shootToGoal می تونیم مورد بحث و بررسی قرار بدیم ، توجّه به
Opponent Goalie Catchable Area , Cone To Goal , Opponent's Situation , Teammate Situation , Opponents Kickable Area
میباشد که میتوان از این مشخصه ها در یک تابع مثل shootToGoal استفاده کرد و با محاسبات و دادن امتیاز یا کسر امتیاز نقطه ی
مطمئنی رو بر روی خط دروازه به دست آورد و به اون نقطه شوتید.
ساده ترین الگوریتمی که می توان برای این موضوع به کاریرد به شرح زیر است :

البته دخالت عوامل بالا موجب پیشرفته شدن
الگوریتم می شود که در پستهای بعدیم توضیح میدم. )
خوب میریم سراغ الگوریتم ::
اینکه به کدوم نقطه شوت بزنم خیلی مهمّ برای همین بر روی خط دروازه دو نقطه رو به عنوان targetPos انتخاب میکنیم و به
صورت زیر تعریف میکنیم ::
VecPosition posTarget[2] = {VecPosition( 52.5 , 6.5 ) , VecPosition( 52.5 , -6.5 )};۰
تو این الگوریتم فقط موقعیت دروازه بان و خود بازیکن رو در نظر میگیریم ::
Vec Position posAgent = WM->getAgentGlobalPosition();۰
VecPosition posGoalie = WM->getGlobalPosition( OBJECT_OPPONENT_GOALIE ();۰
و با چک کردن شروط زیر امن ترین نقطه برای شوت رو انتخاب میکنیم و بهش میشوتیم ::
1. اگر Y من بزرگتر در Y دروازه بان بزرگتر از 0 بود ::
الف . اگر posAgent.getY() > 0 :
شوت به نقطه ی posTarget[0]۰
ب. در غیر اینصورت :
شوت به نقطه ی posTarget[1]۰
2. در غیر اینصورت :
الف . اگر posAgent.getY() < 0 :
شوت به نقطه ی posTarget[1]۰
ب . در غیر اینصورت :
شوت به نقطه ی posTarget[0]۰
---------------------------------------------------------------------------------------
امیدوارم که بتونید استفاده کنید ( البته برای تازه کارها خیلی خوب میتونه باشه .)
لینک در انجمن برای پرسش سوال:
http://www.rcsoccersim.com/forum/index.php/topic,106.0.html