فهرست

صفحهٔ نخست
اخبار
دریافت پروژه
مستندات
همکاری
دربارهٔ پروژه

میزبان:

SourceForge.net Logo

قدرت گرفته از:

لوگوی پروژهٔ گنو



Patent Free

کتابچه راهنمای دنیای ناکامل ربات‌ها

نویسنده: آیدین غریب‌نواز
آخرین به روز رسانی: ۷ مهر ۱۳۸۷

فهرست


۱. مقدمه

این مستند مرجع کامل استفاده از IWOR است. بعد از خواندن آن شما قادر خواهید بود از IWOR استفاده کرده و ربات‌های خود را برای آن طراحی کنید.

IWOR یک دنیای مجازی را شبیه سازی می‌کند که ربات‌ها می‌توانند در آن زندگی کنند. ربات‌ها اشیای فیزیکی هستند. تمام کاری که بازیکن (برنامه نویس) باید انجام دهد طراحی یک مغز برای این ربات است و سپس تماشای آن که چگونه در این دنیا حرکت و فعالیت می‌کند. در تمام طول این مقاله (و مستندات دیگر IWOR) کلمه ربات برای اشاره به این مغز (برنامه طراحی شده) به کار می‌رود و نه شیء فیزیکی ربات.


۲. قوانین بازی

این نرم‌افزار دنیایی را شبیه سازی می‌کند که ربات‌ها می‌توانند در آن زندگی کنند، کار کنند، از قبیله خود دفاع کرده و صاحب فرزند شوند. هر ربات به یک قبیله تعلق دارد. وظیفه ربات‌ها جمع آوری کریستال برای کارخانه‌ی قبیله است و کارخانه نیز در مقابل انرژی لازم برای فعالیت ربات‌ها را تامین می‌کند.

هر ربات یک باتری به همراه خود دارد. فعالیت‌های مختلف مقدار مشخصی از انرژی باتری را مصرف می‌کنند. باتری ربات‌ها با قرار گرفتن در نزدیکی کارخانه شارژ خواهد شد.

هر قبیله کارخانه خود را دارد. مهمترین وظیفه ربات‌ها جمع آوری کریستال و تامین سوخت کارخانه قبیله است. کریستال‌ها در جای‌جای نقشه وجود دارند. ربات‌ها می‌توانند آن‌ها را برداشته و به کارخانه تحویل دهند. کارخانه کریستال‌ها را مصرف کرده و انرژی لازم برای ربات‌ها را تولید می‌کند. با زندگی در اجتماع و انجام فعالیت‌های جمعی و کمک به یکدیگر، ربات‌ها قادر خواهند بود مدت بیشتری در این دنیای ناکامل و بی‌رحم به زندگی خود ادامه دهند.

تولید مثل

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

هر ربات برای ورود به بازی نیاز به یک کد معتبر دارد. در شروع بازی، تعدادی کد صفر وجود دارد که ربات‌ها می‌توانند با استفاده از آن به بازی وارد شوند. بعد از اتمام این کدهای صفر، ربات‌ها برای بدست آوردن کد جدید باید از دستور CLONE استفاده کنند. اگر ربات به اندازه کافی افتخار بدست آورده باشد کد جدیدی را دریافت خواهد نمود. با ارسال این کد به فرزندانش (پروسس‌های جدید)، آنها نیز می‌توانند به بازی وارد شوند.

به این ترتیب ربات‌هایی که به میزان بیشتری به قبیله خود خدمت کرده باشند می‌توانند فرزندان بیشتری به دنیا آورده و نسل خود را گسترش دهند.

عمر

هر ربات میزان مشخصی زمان برای زندگی کردن در این دنیا دارد. این مدت زمان می‌تواند با استفاده از پارامتر ROBOT_LIFETIME تنظیم شود. با ارسال دستورات مشخصی (همانند MOVE, PICK, ...) از این زمان کاسته خواهد شد. بعد از اتمام این زمان ربات خواهد مرد.

یکی از اهداف ربات‌ها تولید نسل جدیدی از خود قبل از اتمام عمرشان است.


۳. استفاده از برنامه

IWOR از مدل client/server برای تعامل با ربات‌ها استفاده می‌کند. ربات‌ها باید به طور مجزا اجرا شده و به سرور شبیه ساز متصل شوند. ربات‌ها می‌توانند تقریبا با هر زبانی طراحی شوند و یا حتی بر روی سیستم عامل‌های مختلفی اجرا شوند. استفاده از مدل client/server این قابلیت را در اختیار کاربر قرار می‌دهد تا ربات‌ها و سرور را بر روی دستگاههای مختلف در یک شبکه محلی و یا شبکه گسترده اجرا کند.

A sample image which
show how IWOR can run on separated machines

برای استفاده از 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 نیز کریستال است. به همین سادگی!

[English/فارسی]