نویسنده: آیدین غریبنواز
آخرین به روز رسانی: ۷ مهر ۱۳۸۷
این مستند مرجع کامل استفاده از IWOR است. بعد از خواندن آن شما قادر خواهید بود از IWOR استفاده کرده و رباتهای خود را برای آن طراحی کنید.
IWOR یک دنیای مجازی را شبیه سازی میکند که رباتها میتوانند در آن زندگی کنند. رباتها اشیای فیزیکی هستند. تمام کاری که بازیکن (برنامه نویس) باید انجام دهد طراحی یک مغز برای این ربات است و سپس تماشای آن که چگونه در این دنیا حرکت و فعالیت میکند. در تمام طول این مقاله (و مستندات دیگر IWOR) کلمه ربات برای اشاره به این مغز (برنامه طراحی شده) به کار میرود و نه شیء فیزیکی ربات.
این نرمافزار دنیایی را شبیه سازی میکند که رباتها میتوانند در آن زندگی کنند، کار کنند، از قبیله خود دفاع کرده و صاحب فرزند شوند. هر ربات به یک قبیله تعلق دارد. وظیفه رباتها جمع آوری کریستال برای کارخانهی قبیله است و کارخانه نیز در مقابل انرژی لازم برای فعالیت رباتها را تامین میکند.
هر ربات یک باتری به همراه خود دارد. فعالیتهای مختلف مقدار مشخصی از انرژی باتری را مصرف میکنند. باتری رباتها با قرار گرفتن در نزدیکی کارخانه شارژ خواهد شد.
هر قبیله کارخانه خود را دارد. مهمترین وظیفه رباتها جمع آوری کریستال و تامین سوخت کارخانه قبیله است. کریستالها در جایجای نقشه وجود دارند. رباتها میتوانند آنها را برداشته و به کارخانه تحویل دهند. کارخانه کریستالها را مصرف کرده و انرژی لازم برای رباتها را تولید میکند. با زندگی در اجتماع و انجام فعالیتهای جمعی و کمک به یکدیگر، رباتها قادر خواهند بود مدت بیشتری در این دنیای ناکامل و بیرحم به زندگی خود ادامه دهند.
تولید مثل
با خدمت کردن به قبیله، ربات افتخار کسب خواهد کرد. هنگامی که یک ربات به اندازه کافی افتخار بدست آورد، اجتماع اجازه داشتن فرزندی جدید را به او خواهد داد.
هر ربات برای ورود به بازی نیاز به یک کد معتبر دارد. در شروع بازی، تعدادی کد صفر وجود دارد که رباتها میتوانند با استفاده از آن به بازی وارد شوند. بعد از اتمام این کدهای صفر، رباتها برای بدست آوردن کد جدید باید از دستور CLONE استفاده کنند. اگر ربات به اندازه کافی افتخار بدست آورده باشد کد جدیدی را دریافت خواهد نمود. با ارسال این کد به فرزندانش (پروسسهای جدید)، آنها نیز میتوانند به بازی وارد شوند.
به این ترتیب رباتهایی که به میزان بیشتری به قبیله خود خدمت کرده باشند میتوانند فرزندان بیشتری به دنیا آورده و نسل خود را گسترش دهند.
عمر
هر ربات میزان مشخصی زمان برای زندگی کردن در این دنیا دارد. این مدت زمان میتواند با استفاده از پارامتر ROBOT_LIFETIME تنظیم شود. با ارسال دستورات مشخصی (همانند MOVE, PICK, ...) از این زمان کاسته خواهد شد. بعد از اتمام این زمان ربات خواهد مرد.
یکی از اهداف رباتها تولید نسل جدیدی از خود قبل از اتمام عمرشان است.
IWOR از مدل client/server برای تعامل با رباتها استفاده میکند. رباتها باید به طور مجزا اجرا شده و به سرور شبیه ساز متصل شوند. رباتها میتوانند تقریبا با هر زبانی طراحی شوند و یا حتی بر روی سیستم عاملهای مختلفی اجرا شوند. استفاده از مدل client/server این قابلیت را در اختیار کاربر قرار میدهد تا رباتها و سرور را بر روی دستگاههای مختلف در یک شبکه محلی و یا شبکه گسترده اجرا کند.
برای استفاده از IWOR ابتدا باید سرور اجرا گردد. سرور به پورت 7200 (به صورت پیش فرض) گوش کرده و منتظر اتصال رباتها میماند. به محض اتصال اولین ربات بازی آغاز خواهد شد. سپس نرم افزارهای client (مغز رباتها) میتوانند با ارسال دستورات به سرور، ربات خود را کنترل کنند. در صورتی که تمایل به استفاده از رابط گرافیکی (GUI) داشته باشید، باید آن را نیز به صورت مجرا اجرا کنید. سرور به صورت پیش فرض منتظر اتصال رابط گرافیکی به پورت 7250 میماند. سپس اطلاعات مربوط به اشیای درون دنیا را به این پورت ارسال کرده و با هر بار تغییر در این اشیا، اطلاعات را مجددا ارسال خواهد نمود.
اگر شما برنامه را به صورت پکیج دریافت کردهاید، میتوانید فایلهای از قبل کامپایل شده را در دایرکتوری bin پیدا کنید. در غیر اینصورت باید خودتان کد منبع را کامپایل کنید. نحوه انجام این عمل در فایل README توضیح داده شده است.
با اجرای فایل iwor سرور شروع به کار کرده و منتظر اتصال رباتها میماند. اگر به رابط گرافیکی احتیاج دارید باید آن را بعد از اجرای سرور اجرا کنید. یک رابط گرافیکی پیش فرض و ساده به همراه برنامه وجود دارد: فایل gui را اجرا کنید. هم اکنون همه چیز برای اتصال رباتها آماده است.
اگر میخواهید بدون کد نویسی تنها دستورات را آزمایش کنید، از telnet استفاده کنید. برای این منظور دستور telnet localhost 7200 را اجرا کرده و دستورات را مستقیما در آن تایپ کنید.
دستورات پیغامهای متنی سادهای هستند که clientها میتوانند برای سرور شبیه ساز ارسال کنند. به وسیله این پیغامها یک برنامه میتواند ربات خود را در دنیای شبیه سازی شده کنترل کند. ساختار کلی یک دستور به صورت زیر است:
command&arg1&arg2&...&argn&
arg1، arg2 و ... آرگومانهایی هستند که دستور قبول میکند. آرگومانها با علامت & از یکدیگر جدا میشوند. توجه داشته باشید که یک & نیز در انتهای دستور و پس از آرگومانها قرار دارد. دستورات باید با حروف بزرگ نوشته شوند.
دستورات شامل این موارد هستند:
INIT&TribeNumber&Name&key&
این دستور به سرور میگوید که یک ربات به قبیله اضافه کند. TribeNumber شماره قبیله مورد نظر است. Name نام ربات است و میتواند هر رشتهای شامل اعداد و حروف باشد. به عنوان مثال &INIT&1&sample&0& رباتی را با نام sample به قبیله شماره یک اضافه خواهد کرد.
key کدی است که سرور در اختیار ربات قرار میدهد. هر ربات باید کد معتبری را برای اضافه شدن به بازی در اختیار داشته باشد. در ابتدا تعدادی کد صفر وجود دارد. تعداد این کدهای آزاد در فایل .config قابل تنظیم است. بعد از اتمام این کدهای صفر، ربات باید برای بدست آوردن کدهای دیگر افتخار کسب کند. با استفاده از این کدهای جدید ربات قادر به تکثیر خود خواهد بود.
رباتها به مکانی در اطراف کارخانه قبیله اضافه خواهند شد. اگر کلیه مکانها در اطراف یک کارخانه اشغال شده باشد، ربات پیغام 190 (مجددا سعی کنید) را دریافت کرده و باید دستور INIT را دوباره ارسال کند.
MOVE&direction&
ربات را در جهت direction حرکت میدهد. direction میتواند NORTH, SOUTH, WEST, EAST باشد.
LOCATION&
با دریافت این دستور سرور موقعیت کنونی ربات را ارسال خواهد کرد. پاسخ سرور ساختاری همانند i,j دارد. i شماره سطر و j شماره ستون است.
SENSE&
با ارسال این دستور، رادار ربات فعال شده و سرور اشیای اطراف ربات را در پاسخ به این دستور ارسال خواهد کرد. پیغام ارسال شده توسط سرور دارای ساختار زیر است:
i1,j1,object1&i2,j2,object2& ...
i1,j1 محل اولین شیء را مشخص کرده و object1 نوع این شیء را نشان میدهد. اشیاء با علامت & از یکدیگر تفکیک شدهاند.
اشیاء میتوانند # (دیوار)، C (کریستال)، R (ربات)، F (کارخانه) باشند. بعد از R و F عددی قرار خواهد گرفت که نشان دهنده شماره قبیله آن ربات یا کارخانه است.
به عنوان مثال شکل زیر را در نظر بگیرید:
دایره قرمز نشان دهنده ربات مورد نظر، دایرههای آبی رباتهای دیگر و دایرههای سیاه دیوار هستند. ربات میتواند اشیاء درون مربعهای سبز رنگ را مشاهده کند. با ارسال دستور SENSE پیغام زیر دریافت خواهد شد: (ربات در موقعیت 3,3 قرار دارد)
3,7,R2&4,3,#&5,3,#&6,3,#&6,8,R2&
PICK&direction&
هنگام دریافت این دستور، ربات سعی در برداشتن شیء کنار خود میکند. به عنوان مثال با ارسال دستور PICK&WEST& ربات سعی در برداشتن شیء در سمت چپ خود خواهد کرد. در صورت موفقیت، سرور پیغام 255 و در صورت عدم موفقیت پیغام 130 ارسال خواهد شد.
DROP&direction&
از این دستور برای پرتاپ کریستال به درون یک کارخانه استفاده میشود. کاربرد آن همانند دستور PICK است. در صورت موفقیت 255 و در غیر اینصورت 140 ارسال خواهد شد. همچنین اگر ربات در حال حاضر چیزی در دستانش نداشته باشد نیز 140 ارسال میشود.
ISHELD&
در پاسخ به این دستور، اگر ربات چیزی را در دستان خود داشته باشد 250(بلی) و در غیر اینصورت 251(خیر) از طرف سرور ارسال خواهد شد.
BATTERY&
با دریافت این دستور، سرور میزان باقیمانده از باتری ربات را ارسال خواهد کرد.
INFO&i&j
ربات میتواند با استفاده از دستور اطلاعاتی را از یک شیء مشخص که در موقعیت (i,j) قرار دارد را بدست آورد. پاسخ سرور ساختاری همانند زیر دارد:
object&id&tribe&
'object' میتواند WALL,ROBOT و FACTORY باشد. بدیهی است که اطلاعات مربوط به ID و tribe برای دیوار وجود نخواهد داشت. اگر در موقعیت مشخص شده چیزی وجود نداشته باشد، سرور پیغام 211 را باز خواهد گرداند.
WORLDSIZE&
هنگام دریافت این دستور، سرور اندازه جهان را با ساختار i,j ارسال خواهد نمود.
HONOR&
با دریافت این دستور، سرور میزان افتخاری را که ربات کسب کرده است باز خواهد گرداند.
LIFETIME&
در پاسخ به این دستور، سرور مدت زمانی که ربات پیش از مرگ در اختیار دارد را ارسال خواهد کرد.
SEND&id&message&
با استفاده از این دستور رباتها میتوانند به یکدیگر پیغام ارسال کنند. id همان ID رباتی است که پیغام باید به دستش برسد و message نیز پیغام مورد نظر است.
سرور در پاسخ به درخواست رباتها پیغامهای مختلفی را ارسال میکند. تمام آنها اعداد صحیح هستند. جدول زیر لیستی از پیغامهای سرور را نمایش میدهد.
255 | دریافت این پیغام به این معنی است که آخرین دستور به طور صحیح اجرا شده است. |
250 | بلی در پاسخ به سوالات بلی/خیر ارسال میشود. به عنوان مثال ISHELD. |
251 | خیر در پاسخ به سوالات بلی/خیر ارسال میشود. به عنوان مثال ISHELD. |
210 | چیزی در اطراف ربات وجود ندارد این پیغام در پاسخ به دستور SENSE ارسال میشود. به این معنی که ربات در اطراف خود چیزی را احساس نمیکند. |
211 | هیچ شیء در موقعیت مشخص شده وجود ندارد. معمولا در پاسخ به دستور INFO ارسال خواهد شد. |
220 | دشمن مورد اصابت قرار گرفته است. ربات بوسیله اسلحه خود دشمن را مورد هدف قرار داده است. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
221 | ربات خودی مورد اصابت قرار گرفته است. ربات یکی از هم تیمیهای خود را مورد هدف قرار داده است. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
222 | کارخانه مورد اصابت قرار گرفته است. یک کارخانه به وسیله ربات مورد هدف قرار گرفته است. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
223 | دیوار مورد اصابت قرار گرفته است. گلولهای که ربات شلیک کرده است به دیوار برخورد کرده. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
224 | کریستال مورد اصابت قرار گرفته است. ربات کریستال را مورد هدف قرار داده است. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
229 | گلوله به چیزی اصابت نکرده است. ربات فضای خالی را مورد هدف قرار داده و گلوله به چیزی اصابت نکرده است. این پیغام در پاسخ به دستور SHOOT ارسال میشود. |
100 | ربات مرده است. دریافت این پیغام به این معنی است که ربات کشته شده و یا مرده است. بلافاصله بعد از دریافت این پیغام اتصال این ربات به سرور قطع خواهد شد. |
112 | کد نامعتبر ربات کد نامعتبری را به سرور ارسال کرده است. |
110 | دستور اشتباه دستور ارسال شده دارای ساختار درستی نبوده است و یا چنین دستوری توسط سرور قابل اجرا نیست. |
120 | ربات نمیتواند در جهت مورد نظر حرکت کند. معمولا این خطا هنگامی رخ میدهد که مقصد ربات اشغال شده باشد (توسط رباتی دیگر یا دیوار) |
130 | نمیتوان شیء را برداشت هنگامی ارسال میشود که ربات نتواند شیء مشخصی را بردارد (به عنوان مثال یک دیوار) یا شیء در اطراف ربات وجود ندارد. |
140 | ربات نمیتواند شیء را پرتاب کند یکی از موارد دریافت این پیغام این است که ربات سعی در پرتاب شیء در مکان نامعتبری دارد. به عنوان مثال درون یک دیوار. |
150 | به اندازه کافی افتخار کسب نشده است. ربات به اندازه کافی افتخار کسب نکرده است تا اجازه تکثیر را داشته باشد. این پیام معمولا در پاسخ به دستور CLONE ارسال میشود. |
160 | چنین رباتی وجود ندارد. ID درخواست شده وجود ندارد. این پیغام معمولا در پاسخ به دستور SEND ارسال میشود. |
190 | دوباره سعی کنید. گاهی در پاسخ به دستور INIT چنین خطایی گزارش میشود. علت معمول آن اشغال بودن تمامی نقاط اطراف کارخانه است (جایی که ربات در آن قرار خواهد گرفت) در این حالت ربات باید دستور INIT را دوباره ارسال کند. |
199 | خطای نا مشخص هنگامی که خطای غیر قابل کنترلی رخ دهد سرور چنین پیغامی را ارسال خواهد کرد. یکی از موارد معمول آن درخواست حرکت برای رباتی است که قبلا غیر فعال و یا کشته شده است. |
سرور تنظیمات بازی را از یک فایل config. میخواند. این فایل یک فایل متنی ساده است که شامل مقادیر مربوط به این تنظیمات میباشد. به طور پیش فرض، سرور به دنبال فایلی با نام iwor.config در دایرکتوری جاری میگردد. شما میتوانید فایل دیگری را به عنوان فایل تنظیمات، با ارسال نام آن توسط پارامتر c- تعیین نمایید. مواردی همچون میزان انرژی مصرفی توسط رباتها برای انجام اعمال مختلف، میزان انرژی که یک کارخانه میتواند به ازای هر کریستال تولید کند و ... قابل تغییر هستند.
تعدادی از تنظیمات مهمتر در زیر توصیف شدهاند.
ROBOTS_PER_TRIBE:
در شروع بازی تعدادی کد صفر وجود دارد که اجازه میدهد تعداد محدودی ربات وارد بازی
شوند. (قوانین بازی را ببینید.) این گزینه تعداد این
کدهای صفر را تعیین میکند.
HONOR_FOR_CLONING:
میزان افتخاری که یک ربات باید کسب کند تا اجازه تکثیر خود را داشته باشد.
ROBOT_LIFETIME:
هر ربات میتواند تا قبل از مرگ خود تعداد مشخصی عمل انجام دهد. این تعداد توسط
این گزینه قابل تنظیم است.
دنیاها در این بازی به وسیله فایلهای متنی سادهای توصیف میشوند، سرور این فایلها را خوانده و دنیا را شبیه سازی میکند. شما میتوانید دنیاهای خود را برای IWOR طراحی کنید. این بخش ساختار این فایلها را توصیف میکند. دنیای کوچک زیر را در نظر بگیرید:
9 15 ############### #000000000000## #010000000c000# #000000#000000# #00000###00000# #0000000000000# #000c000000020# #0000000##0000# ############### |
دو خط اول اندازه دنیا را مشخص میکنند. دیگر خطوط اشیای درون دنیا را نشان میدهند. صفر فضای خالی است، اعداد محل کارخانهها را مشخص میکنند (یک برای کارخانه مربوط به اولین قبیله، دو برای دومین قبیله و به همین ترتیب)، # دیوار و c نیز کریستال است. به همین سادگی!
Copyright(C) 2008 Aidin Gharibnavaz
کلیه حقوق برای آیدین غریبنواز محفوظ است. این سند تحت قوانین اجازهنامه مستندات آزاد گنو منتشر میشود.
شما آزاد هستید تا این سند را ویرایش کرده و یا تحت قوانین مستندات آزاد گنو دوباره منتشر کنید.
نسخهای از این اجازهنامه در فایل FDL در دایرکتوری Docs وجود دارد.