PDA

View Full Version : شبیه سازی مسابقه فوتبال با C#‎‎‎



zayens
چهارشنبه 28 مهر 1389, 23:17 عصر
(سلام به همگی) اول فایلی که تو ضمیمه گذاشتم دانلود کنید تا بهتون بگم موضوع از چه قراره!
این فایل شامل سورس شبیه سازی یه برنامه فوتبال و یک فایل pdf برای شرح قوانین و مقررات این مسابقه است



**هدف از این تاپیک این است که نشان دهیم در C#‎‎‎‎ مهارت و استعداد است که حرف اول را میزند نه معلومات!**
(مدیران عزیز خواهشا اگر مشکلی در عنوان یا ... می بینند یه ایندفعه را خبر بدین و یه هو کل تاپیک را پاک نکنین:قلب:)


مسابقات شبیه سازی فوتبال روباتها هر ساله در کشورهای مختلف برگزار میشود اما عموما
موتور نرم­ افزاری این مسابقات برای شبیه سازی هر چه واقعی تر فوتبال، از پارامترهای زیادی
استفاده می­کنند که این امر خود موجب طولانی تر شدن برنامه های شرکت کننده در این
مسابقات میشود.
این برنامه با ساختاری بسیار ساده، طوری طراحی شده تا حتی برنامه نویسان
مبتدی زبان C#‎‎‎‎ که تنها دستور if را آموخته­ اند، بتوانند نقش یک مربی را ایفا کنند و تابعی
بنویسند که در هر لحظه از بازی، دستوراتی به بازیکنان صادر کند.
این برنامه، همه ی محیط برنامه و قوانین را خود طراحی و اجرا میکند و فقط باید کدهای دو متد
RedTeam (که توسط شما نوشته شده)و BlueTeam(که کدهای حریف شماست) نوشته شود.
علاوه بر این، تعداد بازیکنان هر تیم هم سه نفر در نظر گرفته شده تا برای کنترل همزمان یازده بازیکن
یازی به استفاده از حلقه و پیچیده کردن برنامه نباشه.
لذا شما تنها کافی است که متد (RedTeam) واقع در کلاس soccer موجود در پروژه را پیدا کنین و
کدنویسی کنید و بعد از اتمام کار کافی است کدهای حریفان را
درون متد BlueTeam قرار دهیم و سپس دیباگ کنین.

پس کارهایی که برای این مسابقه باید بکنین به شرح زیر است:

1- فایل را دانلود کرده و برای قوانین و نحوه کد نویسی این برنامه و دیدن مثال
فایل pdf را مطالعه کنید

2- تابع RedTeam را در پروژه(که در کلاس Soccer است) پیدا کنین و درون این متد کدهای لازم را
قرار بدین
3- بعد از آماده شدن، فقط کدهای همین متد را در یک پست ضمیمه کنین تا دیگران کد را
در متد BlueTeam قرار دهند و با دیباگ کردن برنامه ببینیم کی برنده میشه


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

این هم تصویری از محیط برنامه

silverfox
پنج شنبه 29 مهر 1389, 09:21 صبح
اگه هنوز داری روش کار می کنی به نظرم بیشتر شبیه ورژن اصلی(شبیه سازی 2 بعدی که مسابقاتش برگذار می شه)بکنی جذاب ترم بشه...مثلا به بازیکنان رندم یه فدرت شوت سرعت اینا بدی...و اینکه شاید اگه با xna پیاده سازیش کنی دیگه اینطوری چشمک نزنه موقع ریفرش شدن...

samira2008
پنج شنبه 29 مهر 1389, 11:09 صبح
سالم جناب zayens. شما يه سري خاطرات رو براي من زنده كردين . راستش حدود 5 سال پيش من جزء تيم socer سه بعدي دانشگاهمون بودم البته راه به جايي نبرد در واقع تيم توي ما نتونست مقامي كسب كنه. ولي با توجه به تجربياتم ميگم كه اينكه شما با يك سري دستورات if يا while ساده بخواين اين بازيكنان رو رهبري كنين فكر نكنم به نتيجه برسين و خيلي جاي كار داره. اون مسابقات روي يه سري سرورهاي قوي اجرا ميشد و شايد باورتون نشه ما فقط براي اينكه بتونيم يه بازيكن رو طوري حركت بديم كه بتونه به توپ برسه چه قدر اين كد ها رو زير و رو كرديم چه راه هايي رو امتحان كرديم. جناب silverfox هم درست ميگن شما بايد متغير هاي سرعت بازيكن سرعت توپ قدرت شوت رو هم لحاظ كنين . ما توي سه بعدي زاويه شوت رو هم داشتيم كه اينجا ديگه لازم نداره .البته من هنوز كد هاتون رو كامل مطالعه نكردنم ولي خوشحال ميشم كمكتون كنم .

yasemi
پنج شنبه 29 مهر 1389, 16:53 عصر
شما میخوای کار کنید باید از سرور لینوکس و برنامه های آماده استفاده کنید و بیشتر این برنامه ها روی ++C جواب میدن

zayens
پنج شنبه 29 مهر 1389, 17:49 عصر
دوستان مثل اینکه درست متوجه نشدن!
هدف من اصلا بهینه سازی موتور بازی نیست بلکه استفاده از خود موتوره.
اصلا نیازی به تغییر و حتی مطالعه کدهای برنامه نیست و به اونها به هیچ وجه نباید توجه کرد.

تنها کاری که خواستم انجام بدین ایجاد کد در متد های ()RedTeam و ()BlueTeam هست.

یه مثال ساده: من یه سری کد در متد RedTeam قرا میدم تا به تیم آبی یا BlueTeam حمله کنه


public static void RedTeam()
{
if (o == 3)اگر توپ دست بازیکن 3 بود
{
pas(2); پاس بده به 2
run(2, 520, 140); شماره 2 به نقطه مورد نظر حرکت کنه
}
if (o == 2) اگر توپ دست 2 بود
if (x(2) == 520) اگر 2 به نقطه مورد نظر رسید
shoot(630, 195); شوت به نقطه مورد نظر
حالا باید تیم حریف (BlueTeam ) برای اینکه دروازه بان به سمت توپ بره این کد را قرار بده:


public static void BlueTeam()
{
if (o == 0) اگر توپ دست کسی نبود(در حال شوت بود)
run(1, x(o), y(o)); بازیکن 1 یا همون دروازه بان به مختصات توپ برود
همون طور که در بالا یه مثال زدم شما باید کدهای تیم خودتون را بنویسید و در یک پست برای ما بذارین تا ما
هم اونها را در تیم دوم قرار بدیم و بعدش ببینبم چه کسی برنده خواهد شد

zayens
شنبه 01 آبان 1389, 00:00 صبح
من دو سه روزه که نشستم و دارم روی کدهای تیم قرمز کار میکنم.
توی این دو روز فقط روی کدهای دروازه بان کار کردم.
حدودا 600 خط شد اون هم فقط برای عکس العمل دروازه بان!

الآن دیگه گل زدن به دروازه بان تقریبا غیر ممکنه.
مثلا در قسمتی من از مختصات بازیکن و توپی که توسط بازیکن، شوت میشه معادله خطی را بدست آوردم
و این کد محاسبه میکنه که اگر شوت، توپ را وارد دروازه میکنه،دروازه بان باید در کدام نقطه از دروازه قرار بگیره.
یا مثلا اگر دو بازیکن با پاسکاری بخوان گل بزنن، دروازه بان میتونه هوشمندانه بهترین جایگیری را داشته باشه.
البته از فردا که شنبه است سرم شلوغ میشه ولی سعی میکنم تا آخر هفته، همش را آماده کنم.

samira2008
شنبه 01 آبان 1389, 14:53 عصر
من دو سه روزه که نشستم و دارم روی کدهای تیم قرمز کار میکنم.
توی این دو روز فقط روی کدهای دروازه بان کار کردم.
حدودا 600 خط شد اون هم فقط برای عکس العمل دروازه بان!

الآن دیگه گل زدن به دروازه بان تقریبا غیر ممکنه.
مثلا در قسمتی من از مختصات بازیکن و توپی که توسط بازیکن، شوت میشه معادله خطی را بدست آوردم
و این کد محاسبه میکنه که اگر شوت، توپ را وارد دروازه میکنه،دروازه بان باید در کدام نقطه از دروازه قرار بگیره.
یا مثلا اگر دو بازیکن با پاسکاری بخوان گل بزنن، دروازه بان میتونه هوشمندانه بهترین جایگیری را داشته باشه.
البته از فردا که شنبه است سرم شلوغ میشه ولی سعی میکنم تا آخر هفته، همش را آماده کنم.

بهتر همينه كه شما يه نمونه كد بزارين تا ديگران بدونن بايد به چه شكل عمل كنن از طرفي
وقتي يه بازي رو ببينن بيشتر ترغيب ميشن.

zayens
یک شنبه 02 آبان 1389, 22:41 عصر
بهتر همينه كه شما يه نمونه كد بزارين تا ديگران بدونن بايد به چه شكل عمل كنن از طرفي
وقتي يه بازي رو ببينن بيشتر ترغيب ميشن.

با اینکه کدی که دارم روش کار میکنم کامل نشده ولی با اینحال به خاطر دوستان کدم را میذارم (هر چند ناقصه)

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


کد به صورت فایل txt ذخیره شده. تنها کاری که باید بکنید اینه که اون را در برنامه خودتون در تابع RedTeam کپی پیست کنید

درضمن قبل از اجرای برنامه کد زیر را هم قبل از تابع RedTeam قرار بدین

static bool plyr1 = false, plyr2 = false, plyr3 = false,
rival1 = false, rival2 = false, rival3 = false, Danger = false,
IsPas = false, IsSafe = true, Down = true, Down2 = true;
static int Y0;حالا اگر در تیم حریف (BlueTeam) کد ساده ی زیر را قرار بدین خواهید دید که دفاع و دروازه بان
تیم خودتون (RedTeam) چه عکس العمل خوبی از خود نشان میدهند

این کد را برای نمونه در BlueTeam کپی کنید


public static void BlueTeam()
{
// Players
if (o == 1)
pas(2);
if (o == 3)
{
if (x(3) < 330)
pas(2);
else if (x(3) == 560)
if (Down == true)
{
Down = false;
shoot(630, 285);
}
else
{
Down = true;
shoot(630, 195);
}
}
else if (o == 2)
{
run(2, 530, 190);
if (x(3) != 560)
run(3, 560, 295);
if (x(2) == 530)
{
if (Down2 == true)
{
pas(3);
Down2 = false;
}
else
{
Down2 = true;
shoot(630, 285);
}
}
}
}
این هم از کد(همون 600 خط) که حجمش هم خیلی کمه و باید در RedTeam بذارین

zayens
چهارشنبه 05 آبان 1389, 23:24 عصر
فایل ضمیمه ی پست قبلی (ForRedTeam.rar) ویرایش شد

کدهای جدید بهینه شد( دروازه بان باهوش تر شده است)

flash118
پنج شنبه 06 آبان 1389, 00:45 صبح
دوست عزیز
با سلام با تشکر از زحمت و برنامه خوبتون به نظر شما ما اگه این پروژه رو با openGL و یا DIRECTX شبیه سازی کنیم هم سرعتش بالا تره و هم کیفیت و هم تعملش با کاربر بهینه تر میشه البته این یه پیشنهاده

sorenamusic
سه شنبه 14 تیر 1390, 02:05 صبح
سلام
ببخشید میشه راجب کد 600 خطی که برای تیم قرمز نوشتین کمی توضیح بدین ؟
من متوجه نشدم
دستتون درد نکنه .