@levedun

Как реализовать игровую логику на примере данного приложения?

56793b9e6babdaa268c4d19fdb1db40b.jar.jpg
Игра зажги лампочку. Смысл в том что аккамулятор передает энергию проводам. И действует все это с точки зрения физики рационально, т.е. если обрыв то дальше энергия не идет. Перепробывал разные варианты и все неуспешные: такие как задавать сценарий изначально. Согласитесь это завязывает руки и убивает ИИ. Второй вариант передавать положение активности через кучу условий, если это так повернуто то делай так и т.д. Все это тоже ограничено... Может быть есть идеи?
Находил пример на визуалбейсике-там по сценарию - не катит. Подсоединил там аккум с лампочкой напрямую не заработал.
  • Вопрос задан
  • 2519 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Espleth
Не совсем понимаю, а что тут особо сложного? Что-то типа простенькой задачи на графах. У каждой ячейки поля есть свойства: bool - есть ли в ней провод (или string/int, если может быть не только провод, но и еще что-то, например лампа), и еще 4 bool соответствующие сторонам (вверх, вниз, влево, вправо), по которым становится понятно, куда выходит провод. при каждом обновлении игры (обновлении в плане поворота провода или что-то типа того) в лоб идти по всем источникам питания по очереди и смотреть, выходят ли на лампу провода от нее. Если выходят - зажигать ее. С ходу мне чем то напомнило алгоритм Прима. Хотя тут совсем другое, но что-то общее в них определенно есть, а именно мне так кажется рекурсивная функция для прохода всех вариантов тут будет функцию для проверки на наличие зацикливаний в том алгоритме
Ответ написан
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Всё просто. У вас есть 2d массив - карта поля. В каждой ячейке хранится объект - лампа, батарея, провод. У проводов есть свойство - четыре переменные проводимости: left, right, up, down. Какая из них true - значит в ту сторону есть соединение.
Далее создаёте второй 2d массив - карта электричества, размер такой же, но в каждой ячейке значение true/false - есть электричество или нет электричества.
Теперь ваша задача в том, чтобы, начиная от батарей, заполнить карту электричества согласно проводам.
Как только это сделано, смотрите на ваши лампы, смотрите куда у них идёт контакт, есть ли у той ячейки электричество и есть ли соединение с этой ячейкой.

Для этого в цикле обрабатываете каждую батарею: начинаете с позиции батареи присваивать true в карту электричества, идёте по карте по направлению проводов, там где разветвление - применяете рекурсию. Как только ходов не останется - переходите к следующей батареи. Если в ячейке уже есть электричество - игнорируете.

Когда все батареи будут обработаны переходите к лампам и зажигаете их, если всё в порядке.

Как только происходит изменение поля (поворот провода/перемещение), то очищаете карту электричества, выключаете все лампы и прогоняете алгоритм снова. Происходит это за доли секунды.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы