DevMan, Ну я не знал, что это за кадр. А так весьма интересно. Как в инопланетную слизь палкой потыкать. Что-то шевелится, какая-то реакция есть. Это даже интереснее политических срачей.
Тера Инкогнита, Да вы правы. Мы тут все просто тупые и не умеем в Скретч. К сожалению, вам придется самой придумать ответ. Зато как придумаете, можете запатентовать и выпустить ИГРУ и заработать кучу денег. Удачи вам в этом!
Тера Инкогнита, Во-первых, когда мы на "ты" перешли? Во-вторых, хамство - не лучшая стратегия пытаться выпрашивать решение вашей задачи в вашей программе. Не собираюсь я разбираться в этой фигне для младшеклассников ради тебя.
Смотрите, вот аналогия: Вам нужны инструкции, как пройти в библиотеку на языке племени Зулу. Вам объяснили, как пройти на русском, английском и французких языках и нарисовали путь на карте. Вам придется самой переводить эти инструкции на язык Зулуцкого племени, потому что им никто из знающих путь им не пользуется.
Инструкции не поменялись, просто вместо "for i=1..n" вам надо сделать блок "Повторить n раз".
Тут еще и вторая проблема визуальных языков программирования всплывает. Чтобы вам прислать пример нужно поставить себе этот чертов скретч, долго и муторно перетаскивать блоки и заполнять все поля и потом шарить картинку. Никто этого делать не будет. Когда как текст алгоритма на C++/Java при небольшом опыте можно прямо тут в комментарии напечатать. Или скопировать с википедии.
> просто представленный вами алгоритм написан для другой программы ,
У вас полное непонимание, что такое программирование. Это задание компьютеру алгоритма работы на каком-то понятном ему языке. Скретч - один из вариантов такого языка. Перевод из одного в другой - часто чисто машинальное действие где вообще думать не надо.
Вот написано в википедии
for(all nodes i) visited[i] = false; // изначально список посещённых узлов пуст
В вашем скретче надо сделать цикл, который проходит по всем номерам вершин и в массиве/списке по этой позиции ставит false. Если скретч не поддерживает логический тип переменных (ложь/истина), то можно ставить 0 и в ваших ЕСЛИ сравнивать с 0.
MARK KURDA, Ну тогда ваше решение уже отличное. В идеале надо было бы хранить только список активных объектов. Сами объекты при срабатывании SetActive(true) уведомляли бы Pool об этом и помещались бы в нужный список.
Тера Инкогнита, Вы реализуете алгоритм, который вам выдаст список вершин в пути. И уже потом вы по этому списку двигаете вашу пешку. Ставите ее в координаты первой вершины. Двигаете в координаты второй, потом в координаты третьей и т.д. пока весь список не обойдете.
Поле не квадратное, потому что алгоритм работает для любого графа. Ваш граф - квадратная решетка. Алгоритм ни чем не отличается, отличаются только данные.
Вот еще одна проблема скретча. Вы можете думать только в понятиях спрайтов и движущихся фишек. Это работает для тривиальных анимаций. Но в играх где происходит что-то чуть более сложное уже есть ДАННЫЕ. И оперировать надо ими.
Тера Инкогнита, Отмотайте страницу википедии ниже, там код приведен, описание по словам и даже гифка, демострирующая работу. Сделать из этого визуальные блоки дложно быть легко.
Не знаком с юнити, поэтому не все поянтно. Могли бы вы коротоко подытожить, какие операции с вашей структурой данных просиходят и как часто? Есть ли возможность как-то подписаться на изменение activeInHierarchy?
Тера Инкогнита, Вершина задается двумя координатами. Их, правда, удобнее перенумеровать. Напишите 2 функции, одна по координатам выдаст номера вершин (можно взять формулу x*n+y, например).
Вторая функция должна по вершине возвращать ее координаты. Можно или реализовать обратную формулу (i/n, i%n).
Но это работает только в квадратной сетке. Для треугольной сетки вам может быть удобнее сложить координаты вершин в список и эти 2 функции будут соответственно, искать координаты в списке или возвращать i-ый элемент списка.
Вот теперь граф. Граф - это фактически список списков. Для каждой вершины вам надо хранить ее соседей. Надо для каждой вершины заданной координатами (x,y) добавить в ее список соседей вершины (x-1, y), (x+1,y) (x, y-1) и (x,y+1), если они есть, естественно. Для вершины (0,0) - в углу - есть только 2 соседа. Надо не добавлять вершины с отрицательными координатами или координатами >=n.
Создали вы граф. Запустите на нем дейкстру, а лучше обход в ширину. Этот алгоритм вернет вам список вершин в пути. По номерам вершин вы можете восстановить координаты. Вот у вас уже есть весь путь.
Тера Инкогнита, Это не игры. Это тривиальные заскриптованные анимации вообще без логики. На том же юнити это делается за тот же час а то и быстрее. Ваш скретч лучше всяких C# и Java только тем, что там встроенная систма для рисования спрайтов, воспроизведения звуков и обработки кликов. Фактически - это игровой движок как юнити. Его и надо сравнивать с игровыми движками. Только вместо нормального кода и удобных инструментов там кастрированная система визуального перетаскивания блоков. Это может казаться удобнее новичку, который ни разу в жизни ни писал код. Но это медленнее, чем печатать код, и это неподдерживаемо - читать эти блоки сложнее и редактировать - сущий ад.
Кроме того сам движок весьма кастрирован. Там есть 3d графика? Работа с ресурсами? Насколько интерпретация этих блоков быстра? Там есть JIT-компиляция? Про структуры данных я уже спрашивал...
Короче, это неплохой инструмент для обучения маленьких детей, как и логомиры. Но для бизнеса он не подходит.
Тера Инкогнита, Тут не надо знания математики. Надо лишь немного абстрактного мышления. И его придется потренировать как-то. Потому что без этого игры писать не получится. Вернее, вот такие тривиальные анимации, как в ваших примерах, вы еще сможете сделать, а вот треугольную сетку - уже никак.
Попробуйте сначала сделать тупо квадратную сетку. Это чуть проще. Раз дейкстру у вас учат в 7-ом классе, то вы должны ее понимать. Вам осталось только скормить ей какой-то граф. Для квадратной сетки граф построить просто - вершина заданна двумя координатами. Ребра есть на соседние (там одна из координат изменена на +1 или -1).
Тера Инкогнита, А хеш-таблицы, множества на бинарных деревьях, вот-это-вот все там есть? Впрочем, это не важно. Вам понадобятся максимум списки-списков.