Я думал сегодня о идее небольшой игры и наткнулся на ее реализацию. Идея состоит в том, что игрок может совершить серию ходов, которые вызывают небольшой эффект, но если это сделано в определенной последовательности, это приведет к большему эффекту. Пока все хорошо, я знаю, как это сделать. Очевидно, мне пришлось усложнять задачу (потому что мы любим усложнять ее), поэтому я подумал, что может быть несколько возможных путей для последовательности, которые будут вызывать больший эффект, хотя и разные. Кроме того, частью некоторых последовательностей может быть начало других последовательностей, или даже целые последовательности могут содержаться другими более крупными последовательностями. Теперь я не знаю наверняка лучший способ реализовать это. У меня были некоторые идеи.Алгоритм дерева
1) Я мог бы реализовать круговой n-связанный список. Но так как список шагов никогда не заканчивается, я боюсь, что это может вызвать переполнение стека ™. Идея состоит в том, что каждый узел будет иметь n детей и после получения команды он может привести вас к одному из его детей или, если ни один из детей не будет доступен для такой команды, приведет вас к началу. По прибытии на любых детей будет выполняться пара функций, вызывающих небольшой и большой эффект. Это может, однако, привести к большому количеству дублированных узлов на дереве, чтобы справиться со всеми возможными последовательностями, заканчивающимися на этом конкретном ходу с различными эффектами, что может быть болью для поддержания, но я не уверен. Я никогда не пробовал что-то такое сложное по коду, только теоретически. Существует ли этот алгоритм и есть имя? Это хорошая идея?
2) Я мог бы реализовать конечный автомат. Затем вместо того, чтобы блуждать по связанному списку, у меня будет гигантский вложенный коммутатор, который будет вызывать функции и соответственно обновлять состояние машины. Кажется, проще реализовать, но ... ну ... не кажется забавным ... и не ellegant. Гигантские переключатели всегда кажутся мне уродливыми, но будет ли это работать лучше?
3) Предложения? Я хорош, но я далеко неопытен. Хорошая вещь в области кодирования заключается в том, что независимо от того, насколько странно ваша проблема, кто-то решил ее в прошлом, но вы должны знать, где искать. У кого-то может быть лучшая идея, чем у меня, и я действительно хотел услышать предложения.
Как общее замечание, начните просто и добавьте сложности позже. – 2008-10-09 13:38:05