بررسی فولدر های موجود و فایل های داخل آنها
اول از آنهایی شروع میکنیم که زیاد باهاشون کاری نداریم، HPSو SignalHandling رو کلا باهاشون کاری نداشته باشید(شاید بعدا بخواهید تغییرشان بدهید)
Formation هم نیازی به این فولدر نداره، یعنی کار formation میتونه بدون این فولدر انجام بشه(ignore ش کنید)
Coach هم همانطور که از اسمش پیداست مربوط میشه به مربی، زمان شورع و کار مبتدی کاری به مربی نداشته باشید(از کار های پیشرفته تر محسوب میشه)
Connection هم مربوط به ما نمیشه و اتصال بازیکنان به سرور هستش و ...(نیازی نیست تغییرش دهید)
بقیه فولدر ها خیلی مهم اند و تقریبا با تک تک فایلاشون کار داریم، چون کلاس های مهمی توشون تعریف شده که خیلی استفاده میشوند.
Configs: فایل های .conf اینجا هستند که اهمیتشون به اینه که راحت میشه تغییرشون داد و نیازی هم به کامپایل ندارند.( با تغییر دادن قسمتی کوچکی از آنها ممکن است تیم شما تغییر کلی ای بکند) مثل PassFactors.conf که فاکتور های پاس و ضریب آنها(وزن آنها) در آن لحاظ شده. علاوه بر این کانفیگ های اصلی Agent.conf و Coach.conf هم اینجا هست.
فعلا کاری به استفاده از کانفیگ و خواندن آنها در برنامه cpp نداریم.
دیگه قاعده صادق نیست(اول از اونهایی شروع میکنیم که زیاد باهاشون کاری ندارم)، WorldModel خیلی مهمه.
WorldModel:تقریبا مهم ترین فولدری که باید کاملا به فایل هاش، کلاس هاش و تابع های کلاس هاش مسلط باشید. چون زیاد ازشون استفاده میشه. ارتباط یک Agent با محیط بیرون و اطرافش(شایدم سرور) از طریق WorldModel است. مثلا این که الان ball کجاست(مختصاتش) یا چه سرعتی داره(بردار سرعت، جهت و مقدار داره که البته با مشخص کردن x و y در اینجا مشخص میشه)، نزدیک ترین بازیکن به توپ کیه، هم تیمی یا نه، شمارش چنده،مختصاتش چیه و ...؛ من الان کجام، شمارم چنده، چه type ی دارم(حدود 17 type داریم،مثلا یکی تند میدود ولی مثلا زود خسته میشه، و کوچک تر از بقیس به این معنی که از فاصله کمتری میتونه رو توپ اثر بذاره و... . یعنی هر کدوم ویژگی های خاص خودشو داره) همگی اطلاعاتی هستند که WorldModel در اختیار ما قرار میده.
میشه گفت کلاس WorldModelUtilities مهم ترین فایل WorldModel است.(که از WolrdModelBase ارث میبره) همون فایلیست که باید بهش مسلط باشید.
قبل از توضیح WorldModelUtilities باید کلاس های زیر را بررسی کنیم:
Object: همونطور که از اسمش معلومه یک شی هست که به تنهایی بی کاربرد ترین فایل cpp موجود در بیس مرصاد است!! ولی خیلی خیلی مهمه! چون کلاس های مهمی مثل Player و Ball ازش ارث میبرند که Body هم از Player ارث میبره. مهم ترین متغییر هاش position و velocity و decay(میزان اصطکاک با زمین) هستند و تابع های مهمش هم get و set این متغییر ها به همراه getDistance که فاصله آن با یک نقطه یا یک Object دیگر رو برمی گردونه، هستند.
Ball: همون توپ است که تابع های مهمش simulate ها و update ها و isValid هستند.(مثلا به جز توپ اصلی شما یک شی از کلاس Ball تعریف میکنید و simulateش میکنید،(اول برابر قرار دادیدش با توپ اصلی) میتونید با این کار بفهمید که مثلا بعدا اگر فلان اتفاق بیفته، توپ کجاس و چه وضعیتی داره،وضعیت مثل سرعت)
Player: یک بازیکن، چون ممکن است که منظور خود Agent باشد تابع isBody وجود دارد(چون از خودش بیشتر از بقیه اطلاعات دارید) تابع های مهمش خیلی زیادن ولی برخی از آنها عبارتند از: isValid,isAlive زنده بودنش یعنی این که تو زمین هست یا نه، مثلا اگه بهش بگیم که برو به position توپ و تو valid نباشه، بازیکن kill میشه(به اصطلاح) و میره بیرون زمین و سیاه میشه(دیگه قایل استفاده نیست). کارهای که باعث kill شدن یک بازیکن میشوند بیشتر از این ها هستند. و مهمترین توابع Player تمامی get ها هستند!چون اطلاعات رو در اختیار ما قرار میدن، پس همشون رو بخونید و بلد باشید.
Body:این کلاس هم خود بازیکن است.
پیشنهاد من این است کد .h تمام این کلاس ها رو بخونید.(فایل h. ی که این کلاس ها در آن تعریف شده اند)
فکر کنم دیگه زیاد شد. شما اینها رو فعلا بخونید، بقیه WorldModel رو بعدا میگم.