Нека направим игра Вълк-Коза-Зеле

Хардуерен проект с отворен код

Намерих страхотна статия „Самостоятелно изучаване на вериги. Синтез на автомати на тригери. Част 1 "за Хабре. Статията разглежда интересен пример за създаване на игра "Вълк-коза-зеле".
Ще се опитам да обясня същността на въпроса.

игра

Цел: Селянин, вълк, коза и зеле са от едната страна на реката. Селянинът има лодка, но очевидно не особено добра. Той може да вземе със себе си на плаване само един „предмет“, в смисъл само коза или само зеле или само вълк. Проблемът е, че някой не трябва да остава сам с храната, която иска. Например, не можете да плувате, оставяйки вълк и коза на един и същи бряг - вълкът ще яде козата. Или не можете да плувате с вълка, оставяйки козата и зелето - защото козата ще яде зелето. Но селянинът със сигурност трябва да стигне до другата страна. Тук той е толкова упорит. И иска да вземе всички на сигурно място.

Всъщност това е доста известен детски пъзел.

Авторът на тази статия предлага да се използва „графиката на автомата на Мур“, за да се опише тази система вълк-коза-зеле и селяни. Е, вероятно има някаква разумна идея в това.

Четирибитова дума се използва за съхраняване на състоянието на системата. Един прилеп за всеки: за коза (бит 3), за вълк (бит 2), зеле (бит1) и селянин (бит 0). Ако битът е един, тогава обектът е на първата банка, а ако е нула - на втората.

Като цяло, след като прочетох статията и внимателно изучих тази графика, веднага исках да се опитам да внедря тази игра „в хардуер“. Нещо повече, като цяло не е нужно да правя нищо - защото имам хонорар Роувър и тя е много подходяща за тази игра.

Потърсих в интернет и намерих няколко снимки на кози, зеле, вълци и селяни. След като избрах по-подходящите, ги събрах в една снимка и ги отпечатах на принтера така:

игра

След това той залепи тази картина върху картон, изряза я по контура и зави на дъската с два къси винта Роувър към картона. Оказа се така:

игра

Идеята е следната. На борда Роувър има 8 светодиода. Мислено ги разделяме на две групи. Първите четири светодиода показват наличието на обекти от левия бряг, докато десните четири светодиода показват наличието на обекти от десния бряг. Ясно е, че десните светодиоди са просто обратни на левите. Така играта ще бъде по-ясна.

Тук започна веселбата. Всъщност има голяма разлика между теоретичните изследвания и практическото изпълнение. Ще се опитам да обясня проблемите си и проблемите със съществуващата графика:

  • В съществуващата графика първоначалното състояние е 0000, което в приетата терминология означава, че всички обекти първоначално са разположени на този десен бряг. Това е някак странно.
  • Всяко събитие A1-A4 транспортира всички веднага на левия бряг от десния бряг от щат 0000 до щат 1111. Също така е странно.
  • Няма явна държава за победа или загуба. На графиката загубата прехвърля всички субекти на десния бряг наведнъж в държавата 0000, което като че ли означава „спечелено“. Е как е?