Как спроектировать этот конкретный конечный автомат? - PullRequest
0 голосов
/ 18 февраля 2010

Я пытаюсь понять, как спроектировать следующую систему, которую, я думаю, можно определить как конечный автомат:

Скажем, у нас есть куча из 16 строительных блоков (башен, стен, ворот), вместе образующих замок. Игрок может перетащить блоки в 16 мест на плане этажа, и если все сделано правильно, они увидят весь замок. Все башни (их четыре) равны, поэтому они могут идти по любому из четырех углов. То же самое касается некоторых стен.

Всего на плане этажа есть 16 точек, в которые можно поместить строительный блок, и каждая из точек может иметь 17 «состояний»: пусто + один из 16 строительных блоков. При выполнении математики это приводит к 17 ^ 16 = много комбинаций.

Программа начинается с пустого плана этажа и груды строительных блоков. Затем должно появиться сообщение «Построй свой собственный замок, начни с башни». Когда пользователь правильно размещает башню, он должен сказать «хорошо сделано, теперь постройте все четыре башни». Вы поняли.

Проблема в том, что игрок может сделать так много всего. Поместите блок в неправильном месте, удалите блок, правильно разместите стены или башни по всему плану этажа, игнорируя указания, данные им, и т. Д.

Было бы здорово, если бы я мог избежать использования тысяч операторов if-then, чтобы решить, стоит ли мне делать следующий шаг, показывать сообщение об ошибке или возвращаться к предыдущему шагу в зависимости от того, что делает игрок.

Как бы вы описали условия СЛЕДУЮЩАЯ, ПРЕДЫДУЩАЯ и ОШИБКА для каждого шага последовательности строительства? Есть ли методы дизайна для этого? Большое спасибо за ваш вклад.

1 Ответ

0 голосов
/ 18 февраля 2010

Попробуйте сделать это декларативно. Определите перечисление (или, возможно, классы), описывающее виды блоков. Определите и создайте 2D-массив 4x4, описывающий наборы допустимых типов блоков в каждой позиции (реализуйте наборы в виде списков, битовых полей и всего, что вам подходит). Всякий раз, когда игрок пытается разместить блок в позиции, проверьте, допустимо ли это для двумерного массива. Если вы хотите иметь определенные сообщения для правильного заполнения позиции, также поместите их в тот же массив.

Я не знаю, является ли FSM действительно тем, что вы ищете: какие ограничения последовательности вы хотите проверить? Имеет ли значение, строятся ли башни первыми? Из остальной части вашего описания кажется, что приведенное выше описание состояния цели будет более подходящим.

...