По стъпките на черния самурай или правенето на игра - Сокобан - със собствените си ръце
Епиграф.
„Напоследък летя лошо в съня си. ?!
Или в възглавницата ми няма достатъчно пера? " (Японска поезия)
Малко за тази игра и нейните правила.
Правилата на играта са прости и елегантни, като всичко гениално. Има определен склад, често с много сложна конфигурация (обикновено се нарича „лабиринт“) и има складовер (в превод от японски, Soko-Ban - и има „складист“) и кутии. Всички кутии трябва да бъдат поставени в крайните си позиции (обикновено обозначени с кръстове). Кутиите могат да се бутат само, но не и да се изтеглят. Освен това не можете да натискате повече от едно чекмедже. Заключете кутията в ъгъла - никога няма да я извадите оттам - трябва да започнете отначало. Ако преместите едно чекмедже близо до друго, можете да го преместите само като го приближите отстрани. Ако, разбира се, стените или други кутии не пречат.

Остава да обсъдим с детето какво и как ще направим, за да реализираме идеята.
Изненадващо, моят пламенен „пристрастен към хазарта“ чу за първи път тази прекрасна игра. LEGO тухлите трябваше да изяснят основните моменти.
Слава Богу, той изглеждаше заинтересован. Вече е добре, да продължим напред.
Опитахме се дълго време с него (или по-скоро аз го бутнах с всички сили) да разработим и нарисуваме подобие на някакъв вид алгоритъм за бъдещата програма.
В същото време забелязах, че за детето е много трудно да премине към „атомни“ представяния на процеси. Е, например, нашият диалог:
Аз - И какво да правя по-нататък?
P - Проверете дали можете да отидете там.
I - Как да проверя?
P - Вижте какво има в тази клетка
I - Чакай малко, имаме само числа и набор от ясни команди. Как да го направя?
добре и т.н.
Честно казано, благодарение на това „обяснение“, както и трикове и трикове от рода на: „Не, знам как да го направя, НО ИСКАМ да чуя вашите възможности за разрешаване на този проблем.“, Аз самият НАЙ-накрая имам „ясен план“ писане на код:).
В крайна сметка, след като развалихме купчина хартия, все пак нарисувахме нещо. По-късно доработих малко тази снимка:

Има работещ масив (12x8 клетки) - това е игрално поле. Размерът на игралното поле може да бъде абсолютно всеки (в разумни граници, разбира се), но огромните полета изискват много тъпи движения. И това може да обезкуражи играча да премине такова ниво.
И отделно началните координати на човека. По пътя решихме, че задължително изискване е лабиринт от затворен тип. Тези. нашият склададжия винаги трябва да е в затворено пространство, ограничено от стени. В тази ситуация не е нужно да проверяваме дали сме излезли от игралното поле.
Всяка стойност в масива дефинира съдържанието му: празно, стена, кутия, пространство на кутията и кутия на място. Принципът на номериране на тези стойности е абсолютно всеки, както сърцето ви желае. Избрахме това:
По-долу е даден пример за „цифровизиране“ на едно ниво:

Оказа се, че едно ниво може да бъде описано по следния начин: 96 байта е самият лабиринт и 4 байта е началната позиция на човека. Общо 100 байта.