در این تمرین، برنامهای را پیادهسازی میکنید که وضعیت یک بازی tic-tac-toe را مشخص میکند. (شاید این بازی را با نامهای «noughts and crosses» یا «Xs and Os» هم بشناسید.)
این بازی روی یک شبکهی ۳×۳ انجام میشود.
بازیکنان به نوبت Xها و Oها را روی شبکه قرار میدهند.
بازی زمانی تمام میشود که یکی از بازیکنان با قرار دادن سه علامت در یک ردیف، یک ستون یا روی یک قطر از شبکه برنده شود، یا زمانی که کل شبکه پر شود.
در این تمرین فرض میکنیم که بازی با X شروع میشود.
کار شما این است که مشخص کنید یک بازی دادهشده در چه وضعیتی قرار دارد.
سه وضعیت ممکن برای بازی وجود دارد:
اگر صفحهی دادهشده نامعتبر باشد، خطای مناسبی پرتاب کنید.
اگر یک صفحه شرایط زیر را داشته باشد، نامعتبر است:
X شروع میکند). | |
X | |
___|___|___
| |
| X | O
___|___|___
| |
O | X |
| |
| |
X | O | X
___|___|___
| |
X | X | O
___|___|___
| |
O | X | O
| |
| |
X | X | X
___|___|___
| |
| O | O
___|___|___
| |
| |
| |
| |
O | O | X
___|___|___
| |
| |
___|___|___
| |
| |
| |
| |
X | X | X
___|___|___
| |
O | O | O
___|___|___
| |
| |
| |
در این تمرین دو enum به شما داده میشود.
هر دو نوع enum باید بهعنوان مقدار بازگشتی متد state و از طریق یک union استفاده شوند.
میتوانید دربارهی enum و union در مستندات مرجع Crystal بیشتر بخوانید: