Открытие пути в Java 2-я Игра?

Этот метод называется компонентами высшего порядка (HOCs) и является способом расширения компонентов с некоторыми дополнительными функциями.

Сначала это может выглядеть проще, если переписать его, используя обычные функции вместо функций со стрелками:

function withTodosNull(Component) {
  return function(props) {
    if (!props.todos) {
      return null;
    } else {
      return 
    }
  }
}

withTodosNull принимает компонент и возвращает новый компонент. Если этот новый компонент, который возвращается, получает todos реквизит, компонент, переданный в HOC, будет визуализирован со всеми реквизитами. Если todos не указано как опора, null будет воспроизведено.

6
задан Click Upvote 8 March 2009 в 05:14
поделиться

7 ответов

Для хорошего новаторского алгоритма, с помощью*, вероятно, была бы хорошая идея, однако, для простой игры, которая не требует сложного, эффективного, ни эффективного поиска пути, просто имея перемещение символов к цели путем обнаружения, что направление цели должно быть достаточным.

Например, решение сделать символьное перемещение, в псевдокоде:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

Да, символ не собирается делать самое эффективное перемещение, но это станет ближе и ближе к цели на каждом повторении игрового цикла.

Это - также мое предположение, что аркада с начала 80-х, вероятно, не использовала бы сложные новаторские алгоритмы.

12
ответ дан 8 December 2019 в 04:55
поделиться

Обход непосредственно к Вашим врагам является запуском, но когда Вы добавите лабиринт, Вы захотите добавить немного более умный новаторский, таким образом, Ваши фантомы не застревают в изгибах или тупиках.

Следующее учебное руководство является замечательным легким руководством для начала работы с* с загружаемыми примерами.

Открытие пути на основанных на мозаике Картах

2
ответ дан 8 December 2019 в 04:55
поделиться

Если у Вас просто есть сетка пикселей - "большое поле", на котором pacman и фантом могут переместиться свободно - затем, кратчайший путь легок - прямая линия между фантомом и pacman.

Но "кратчайший путь" неизменно означает, что мы пытаемся решить проблему теории графов. (Я принимаю знание графиков, некоторой теории графов, матриц прил, и т.д.!)

В случае выше, полагайте, что каждый пиксель узел на графике. Каждый узел подключен к своим соседям краем, и каждый край имеет равный "вес" (перемещающийся в узел на "вышеупомянутом", не медленнее, чем перемещение в узел "ниже").

Таким образом, у Вас есть это: (" *" = узел, "-,/, \, |" = край)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

Если Pacman находится в центре, он может переместиться в любой другой узел очень легко.

Что-то больше ближе к действительности могло бы быть этим:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Теперь, pacman не может переместиться по диагонали. Пойти от центра до нижней правой части требует 2 "транзитных участков", а не один.

Продолжать прогрессию:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Теперь, для движения от узла в середине к узлу наверху Вам нужны 3 транзитных участка. Однако для перемещения к нижней части только берет 1 транзитный участок.

Было бы легко перевести любую установку игровой доски в график. Каждое "пересечение" является узлом. Путь между двумя пересечениями является краем, и длина того пути является весом того края.

Введите A*. Путем построения графика (используют adjency матрицу или список узлов), можно использовать* алгоритм для нахождения кратчайшего пути. Другие алгоритмы включают Dijkstra. И многие другие! Но сначала необходимо структурировать проблему с точки зрения графика и затем играть, как Вы пошли бы от узла (pacman) к узлу B (фантом).

Надежда, которая помогает!

6
ответ дан 8 December 2019 в 04:55
поделиться

Это было очень долгое время, но из памяти фантомы в Pac-человеке не сделали многого в способе новаторских. Они сделали бы довольно стандартный рандомизированный обход лабиринта, пока они не "разыскали" Вас, которые включили нахождение свободного пути вдоль оси коридора к Вам, и затем они переместятся непосредственно к Вам, пока Вы не исчезли из их угла обзора, после чего они возобновят случайный шаблон. На более высоких уровнях Pac-человек оставил бы невидимые следы позади него некоторое время, которого фантомы будут "чувствовать запах" и иногда следовать.

Когда Pac-человек разбудил питание, единственная разница в алгоритме - то, что, когда они разыскали Вас, фантомы сбегут из Вас вместо того, чтобы двинуть Вас.

Так, для подлинного опыта Вам, вероятно, не нужен очень сложный новаторский алгоритм вообще. Если Вы хотите быть необычными, конечно, можно реализовать A*.

3
ответ дан 8 December 2019 в 04:55
поделиться

в Пакмане у всех призраков был другой алгоритм погони

  • Блинки -> Погони. Обычно выбирают кратчайший путь и склонны следовать.
  • Пинки -> Засады. Имеет тенденцию идти более окольным путем к pac-man. Смертельный. (мизинец и блинки имеют тенденцию выбирать по-разному при выборе направления, часто загоняя игрока в угол)
  • Inky -> Freak. Этот чувак ведет себя странно. Он передвигается по доске довольно случайно, но иногда преследует, когда подходит близко.
  • Клайд -> Идиот. Перемещается случайным образом. Не большая угроза.

У призраков есть запрограммированный в их движениях интересный паттерн: иногда они одновременно прекращают преследование Pac-Man и отказываются от него и возвращаются в соответствующие углы лабиринта, переходя в «режим разброса».

полное описание алгоритма в досье pacman

касается

Гийома

1
ответ дан 8 December 2019 в 04:55
поделиться

Вы могли начать смотреть на* (Звезда)

И вот страница, которая имеет ссылки на другие алгоритмы нахождения пути.

[редактирование] gah... мозг является слишком медленным... забыл об этой книге, это - C или C++ (я забываю, который), но можно все еще получить понятия для Java. Это не может быть самым легким для Вас читать, но не является плохо полным. AI для Разработчиков игр David M. Bourg, Glenn Seemann.

0
ответ дан 8 December 2019 в 04:55
поделиться

Я думаю, идут для алгоритма поиска кратчайшего пути при каждом перемещении, сделанном pacman. Очень хорошая реализация является алгоритмом Dijkstra.

Только подвести итог: Визуализируйте лабиринт как график с вершинами и краями. Каждый край подождал (в Вашем случае, все края имеют тот же вес). Алгоритм находит, что кратчайший путь от исходной вершины предназначается для вершины путем перемещения одного шага вниз каждый непосредственный достижимый край. Затем на следующей вершине Вы делаете то же и продолжаете делать, до Вам добираются до цели. Первый достигнутый путь является кратчайшим путем. Может быть много оптимизации, сделанной к этому алгоритму для ускорения вещей как принятие во внимание, где pacman был в своем предыдущем положении и в которое направление это переместилось так, чтобы можно было получить некоторый heiristics в алгоритме. Я предложил бы найти кратчайший путь от каждого фантома до pacman в каждом перемещении и переместил бы фантом в то направление. В конечном счете расстояние уменьшит, и Вы сможете поймать pacman.

Другая эвристика, которая может использоваться это для нахождения всех непосредственных краев достижимыми от pacman и попытки покрыть как можно больше этих вершин фантомами. Таким образом вместо того, чтобы установить pacman как целевую вершину мы устанавливаем вершины immediatetly достижимый pacman как цель, результат будет состоять в том, что доступные фантомы попытаются покрыть themajor пути эвакуации pacman и поймать его.

0
ответ дан 8 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: