Я занимаюсь поиском путей в рамках 4-го курса обучения программисту.
Предполагается, что мы дадим визуальное представление для множества алгоритмов поиска пути нескольких агентов. Самым простым является A *, адаптированный для мультиагентов.
В любом случае наша среда представляет собой сеточную карту, где каждая ячейка может быть либо заблокирована, либо использована как часть пути агента. То, что я хочу сделать, это использовать анимацию, чтобы дать хорошее представление об окончательном движении агента, но анимацию изменения цвета в моей сетке.
I.E за секунду или около того раскрасьте каждый шаг в пути некоторым цветом, чтобы показать, как движется агент.
И еще одна вещь, которую я хочу сделать, это представить, как работает алгоритм, рисуя изменения в открытом и закрытом списках алгоритма A * во время его вычисления.
Я использую адаптированную версию шаблона проектирования наблюдателя для отправки событий со своего уровня алгоритма на уровень моего контроллера и GUI.
То, что я хочу сделать в слое GUI, это каждый раз, когда плитка добавляется в открытый список, я хочу, чтобы эта ячейка была окрашена в какой-то цвет, а затем постепенно исчезала в соответствии с предопределенным таймером или, возможно, позже добавляла ползунок для управления. этот таймер.
Я посмотрел на код здесь . Кажется довольно простым, проблема в том, что каждая анимация плитки должна быть независимой от других, чтобы позволить алгоритму и всему, что нужно, продолжать работать и запускать разные анимации.
Так, каков наилучший способ достижения результатов, которые я ищу? Должен ли я просто открыть отдельный поток для каждой анимации или иметь готовый поток для каждой ячейки?
Будет ли это излишним для приложения, поскольку может быть до 1000 ячеек и, следовательно, около 1000 потоков, выполняющих анимацию.
Другая проблема, с которой, я думаю, я могу столкнуться, заключается в том, что может случиться так, что ячейка начнет анимацию исчезновения цвета, а затем будет вынуждена перезапуститься, и я не хочу, чтобы две анимации запускались одновременно (только одна поток, выполняющий анимацию для одной и той же ячейки одновременно).
Надеюсь, я достаточно ясно понял, чего я пытаюсь достичь, если у кого-то есть какие-либо идеи или они думают, что это действительно может помочь мне в моем проекте.