Я, кстати тож чего-то на LD45 накалякал, извините, забыл рассказать:
https://ldjam.com/events/ludum-dare/45/mn-master-of-nothing
Там типа такой зелёный чудик ползает по процедурно генерируемой базе роботов, спасает своих собратьев, создаёт чёрные дыры чтоб ломать генераторы и попутно заталкивать в них неугодных роботов.
Комнат мало, враги скучные, винскрина нет — такое себе получилось ИМХО.
- 10 октября 2019, 20:33
- 05
У меня вопрос, а как делаешь карту? Я понимаю в данной игре это массив из комнат 5*5, с переходами в определенных местах. Расскажи. В интернете я нашел метод, но он построен на графах и это так замудренно, что всякий интерес пропадает разбираться в этом...
Сетка - частный случай графа, где соединены только соседние по сетке ячейки.
Человеку нужна реализация, а не математические рассуждения. Что сетка, что граф, представляются двухмерными массивами, это он и хотел узнать.
Я сетку использую. В GMS2 называется ds_grid. Можно просто двумерный массив. Комнаты все состыкованы по центру. Это самый примитив. Тогда можно вообще все комнаты перемешать. Можно делать комнаты без проходов, а потом их просто вырубать и при старте комнаты ненужные стены вместе с тайлами удалять.
Затем можно генерировать переходы до тех пор, пока "граф" не станет связным, ну то есть ты сможешь из любой точки попасть в любую. Но это может дать слишком "дырявые" карты, поэтому я делаю наоборот - генерирую список стен, т.е. много раз пытаюсь поставить стенку так чтобы "граф" оставлся связным. Это даёт карты больше похожие на лабиринты. Более того, в этом случае можно регулировать "дырявость".
Ещё есть метод вместо "стен" делать отсутсвтующие комнаты, но тогда комната по дефолту соединена с каждой соседней.
Ключи и двери тоже можно генерировать, но тут уже нужно в теорию графов погружаться и искать точки сочленения, или использовать другие алгоритмы, которые будут генерить карту "по ходу дела".
Если код интересует, то в моём случае это выглядит примерно так:
MAP_init
Map_generate
Банальный обход сетки mapWalk
Нижнее подчёркивание в начале имени переменной что-то значит в Гамаке или это просто такой стиль?
Такой стиль.
Капсом я пишу глобальные переменные, обычным регистром - локальные для объекта, а с подчерком - временные для блока кода. Так у меня никогда не бывает коллизии имён.
хорошая привычка, я иногда временные переменные путаю)