Представление Pac-Man с Конечным автоматом
Вопрос
Рассмотрим игру, похожую на pac-mac, которую мы хотим представить с помощью графика FSA.У нас есть лабиринт (стол), и в нем ягоды расположены случайным образом.Цель состоит в том, чтобы съесть все ягоды в лабиринте.Команды, которые мы должны рассмотреть для управления, следующие:
ВПЕРЕД, ВЛЕВО, ВПРАВО, ЧЕКБЕРРИ (проверяет, есть ли ягода перед pac man), ЕШЬ и ВЫХОДИ из ЛАБИРИНТА.
Нам нужно максимум 10 этапов...И имейте в виду, что у нас не может быть более одного пробела подряд.Спасибо
Редактировать: альтернативный текст http://img338.imageshack.us/img338/2479/graphp.jpg
тогда ладно.Я создал график, но я не могу найти способ преодолеть пробелы.Например:В лабиринте после определенного ряда ягод внезапно впереди появляется просвет, и следующая ягода оказывается прямо в нем.Поэтому я не уверен, как будет выглядеть мой график, так как даже если я поверну влево или вправо, команда checkberry не вернет ИСТИННОЕ значение.Таким образом, у pac man должен быть способ переместиться на площадь разрыва, не съев ничего, но как он решит, перейти к тому, кто впереди, или к другим?
Решение
Если вы разрабатываете диаграмма состояний, попробуйте сначала выяснить , какого рода состояния что ваш государственная машина будет иметь, вместо нумерации состояний.
Вот простой пример, ваш "pac man" должно быть ходьба, проверка и еда.Итак , есть три состояния IS_WALKING
, IS_CHECKING
и IS_EATING
.Схема перемещения прямо вперед и приема пищи может быть примерно такой, как показано на рисунке ниже.Я не уверен, какую диаграммную нотацию вы используете, хотя надеюсь, что это кое-что прояснит для вас.
GO_AHEAD
+------------------------------------+
| |
v |
+----------------+ false +------------+
| IS_CHECKING |---------------------->| IS_WALKING |
+----------------+ +------------+
| E: CHECK_BERRY | ^
+----------------+ |
| |
| true |
v |
+-----------+ EAT |
| IS_EATING |------------------------------+
+-----------+
Переходы становятся более естественными, и их легче вычислить, если у вас есть соответствующие названия для состояний.Примером хорошего названия для состояния является такое, которое достаточно четко описывает, что государственная машина делает в данный конкретный момент.
Другие советы
Если вы ищете помощь от Stackoverflow по такого рода вопросам;очевидно, вам нужно посмотреть на то, что вы делаете.Ваш вопрос должен быть более конкретным.У вас возникли проблемы с конкретной проблемой кодирования, или вы не знаете, с чего начать?Предполагается ли, что это будет тривиальное упражнение или полномасштабный проект?
Попробуйте составить мысленную карту того, чем вы хотите заниматься, и посмотрите, куда вы можете двигаться дальше с теми навыками, которые у вас есть в данный момент.Возвращайтесь, как только столкнетесь с реальной проблемой.