نمايش پست تنها
قديمي ۰۴-۱۴-۱۳۸۹, ۰۳:۳۹ بعد از ظهر   #6 (لینک دائم)
Astaraki Female
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,337 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Wink بیس ( Base )

بیس اصطلاحاً به سورس کد های معروفی گفته می شود که توسط تیم های مطرح منتشر می شوند و معمولاً دستورات سطح پایین تر را که مستقیماً با سرور مسابقه در ارتباط هستند را پیاده سازی کرده اند و برنامه نویسی الگوریتم های سطح بالاتر همچون الگوریتم شوت ، پاس و ... را به شما سپرده اند.

بیس های ایرانی و غیر ایرانی معروفی در زمینه ی شبیه سازی فوتبال دو بعدی منتشر شده اند اما بهترین بیس که همواره جهت آموزش از آن استفاده می شود ، UvA_Base است.

UvA_Base در سال 2003 توسط آقای Jelle Kok نوشته شد ، سپس توسط آقای مهدی نامی برای نسخه 12 و 13 سرور آماده شد که البته ایراداتی داشت که اینجانب آنها را رفع نمودم و شما می توانید نسخه ی بنده را از اینجا دریافت نمایید.

همچنین می توان گفت این بیس دارای کاملترین توضیحات نسبت به بیس های دیگر است که این مستندات را می توانید از لینک های زیر دریافت نمایید:

مستندات و توضیحات با فرمت PDF
مستندات و توضیحات با فرمت CHM
راهنمای کاربر

*** متنی که در زیر خواهد آمد ، خلاصه ای است از راهنمای کاربر بیس آقای کوک ***

الگوریتم پیش فرض این بیس این است که سریع ترین بازیکن به توپ ( بازیکن هم تیمی که سریع تر از همه به توپ می رسد. ) توپ را میگیرد و آنرا بدون توجه به فاصله اش از دروازه ی حریف به یکی از گوشه های آن شوت می کند. دیگر بازیکنان به نقطه ی استراتژیک خود ( نقطه ای که با توجه به محل اصلی ( خانه ) بازیکن و محل فعلی توپ محاسبه می شود. ) حرکت می کنند.

برنامه ی اصلی بازیکنان این تیم ( به جز دروازه بان ) در تابع deMeer5 ( موجود در فایل PlayerTeams.cpp ) نوشته شده است.

بیس به کلاس های متعددی تقسیم شده است که بعضی از آنها را در زیر به طور خلاصه معرفی می کنم:

- کلاس Connection : این کلاس با سوکت مورد نظر ارتباط برقرار می کند و از این طریق پیام ها را به سرور ارسال و یا از سرور دریافت می کند.

- کلاس SenseHandler : این کلاس پیام هایی را که از سرور می آیند ، دریافت و تجزیه می نماید. سپس اطلاعات را به کلاس WorldModel ارسال می نماید.

- کلاس ActHandler : این کلاس دستوراتی که برنامه می خواهد به سرور بفرستد را دریافت و به دو صورت در داخل یک ساختار داده ی صف ذخیره می نماید ( برای اینکه دستورات به ترتیب انجام گیرند ). سپس با تبدیل تک تک آنها به یک رشته ی کاراکتری ، آنها را به سرور ارسال می نماید.

- کلاس WorldModel : این کلاس شامل تمام اطلاعات زمین و اشیای موجود در آن ( همچون سرعت و موقعیت بازیکنان ، توپ و ... ) که بازیکن در آن لحظه آنها را مشاهده کرده است. ( اطلاعات نسبت به مشاهده ی هر بازیکن می تواند متفاوت باشد. ) بنابراین این کلاس حاوی متد های بسیار زیادی است که دسته بندی آنها را به جلسات آینده موکول می نمایم. ( این کلاس ، یکی از کلاس های مهم و پر کاربرد است. )

- کلاس Object : این کلاس شامل اطلاعاتی در مورد تمام اشیای موجود در زمین است که به شش دسته ی زیر تقسیم می شوند:

1- Object : یک کلاس کلی برای تعریف متغیر های تمامی اشیا همچون موقعیت شی و ...

1-1- FixedObject : شامل اشیا ثابت موجود در زمین همچون پرچم ها و خطوط می شود که از کلاس Object مشتق شده است و هیچ خاصیت اضافه تری نسبت به آن ندارد.

1-2- DynamicObject : این کلاس نیز از کلاس Object مشتق می شود و شامل اشیا متحرک زمین می شود و تنها ویژگی که به آن اضافه شده است ، سرعت است.

1-2-1- BallObject : یک زیرکلاس از کلاس اشیا متحرک است که اطلاعاتی را راجع به توپ به ما می دهد و نسبت به لایه ی بالاتر خود ( اشیا متحرک ) هیچ ویژگی اضافه تری ندارد.

1-2-2- PlayerObject : این کلاس نیز از کلاس اشیا متحرک مشتق شده است و حاوی اطلاعات بازیکنان ( چه هم تیمی و چه رقیب ) است. این کلاس به لایه ی بالاتر خود ویژگی هایی همچون زاویه ی گردن و بدن را اضافه کرده است. یک متغیر بولی در این کلاس وجود دارد که مشخص می کند بازیکن دروازه بان است یا خیر. باید دقت شود که بازیکن مورد نظر ما که اکنون در حال اجرای برنامه است ( مغز بازیکن ما ) از این کلاس استفاده نمی کند.

1-2-2-1- AgentObject : این کلاس از کلاس PlayerObject مشتق شده است که شامل اطلاعاتی در مورد بازیکن فعلی ما ( بازیکنی که این برنامه را اجرا می کند. ) است. اطلاعاتی که به این کلاس نسبت به کلاس بالاتر اضافه شده است شامل استمینا یا انرژی بازیکن و زاویه و کیفیت دید می شود.

- کلاس BasicPlayer : این کلاس حاوی تمام توانایی ها ( skills ) ای است که بازیکن ما ( بازیکنی که در حال اجراست ) می تواند آنها را انجام دهد. البته باید توجه داشت که اجرا این توانایی ها به حالت محیط اطراف نیز بستگی دارد. ( این کلاس ، یکی از کلاس های مهم و پر کاربرد است. )

- کلاس PlayerSettings : این کلاس حاوی پارامتر هایی است که کلاس BasicPlayer از آنها استفاده می کند. به عنوان مثال پارامتر dPassEndSpeed که بیش ترین سرعت توپ را هنگامی که توپ به هم تیمی پاس داده می شود ، مشخص می نماید.

- کلاس Player : این کلاس از کلاس BasicPlayer مشتق شده است و شامل متد هایی است که مشخص می کند در شرایط مورد نظر بازیکن ما چه عملی را انجام دهد. متد های موجود در این کلاس تقریباً از اکثر کلاس های موجود در بیس مانند WorldModel ، PlayerSettings و ... استفاده می نمایند.

- کلاس Formations : این کلاس حاوی اطلاعاتی در مورد فرمیشن ( چینش تیم ) های معتبر به همراه تابعی برای مشخص کردن مکان ( نقطه ی ) استراتژیک بازیکن است.

- کلاس ServerSettings : این کلاس حاوی تمام پارامتر هایی از سرور فعلی است که از آن استفاده می شود همانند پارامتر player_speed_max که نهایت سرعت یک بازیکن را مشخص می کند. مقدار دهی این پارامتر ها اولین بار توسط سرور بعد از اینکه بازیکن به سرور متصل شد انجام می شود.

- کلاس SoccerTypes : این کلاس حاوی تمام متغیر های شمارشی ( enumeration ) است که انوع مختلفی را که در زمین شبیه سازی فوتبال استفاده می شوند را معرفی می کنند. ( این کلاس ، یکی از کلاس های مهم و پر کاربرد است. )

- کلاس SoccerCommands : این کلاس تمام اطلاعات لازم جهت ساخت یک دستور که بتوان آنرا به سرور ارسال کرد را دارد.

- کلاس VecPosition : این کلاس حاوی نمایشی برای مختصات (x,y) است و همچنین حاوی متد هایی برای اعمال بر روی این مختصات است.

- کلاس Line : این کلاس شامل نمایشی برای خط ax+by+c=0 است و در آن می توان به دو صورت یک خط را تعریف کرد ، به کمک دو نقطه و یا با یک نقطه و یک زاویه. همچنین این کلاس حاوی متد های دیگری نیز هست.

- کلاس Circle : این کلاس شامل نمایشی برای یک دایره و متد هایی برای اعمال بر روی آن است.

- کلاس Rectangle : این کلاس شامل نمایشی برای یک مستطیل و متد هایی برای اعمال بر روی آن است.

برای کسب اطلاعات بیش تر می توانید به مقاله ی مربوطه مراجعه نمایید.

ويرايش شده توسط Astaraki; ۱۱-۱۲-۱۳۸۹ در ساعت ۱۲:۱۸ بعد از ظهر
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
aftabgardan (۰۶-۲-۱۳۹۰), hadi1370 (۰۸-۱۷-۱۳۸۹)