SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Алгоритм генерации лабиринта
В этой теме 1 ответ, 2 участника, последнее обновление Ryuzaki 6 года/лет, 9 мес. назад.
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
-
АвторСообщения
-
Я новичек в программировании, поэтому сам разобраться не смогу. Может ли кто-нибудь скинуть статьи или книги на тему процедурного генерирования лабиринтадля sfml?
Предлагаю статью о различных алгоритмах генерации лабиринта, а также свою реализацию алгоритма из данной статьи “Двоичное дерево”. Реализация алгоритма основана на стандартном примитиве SFML – линия.
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071class BinaryMaze : public Drawable {public:///////////////////////////////////////////////////////////////Конструктор принимает в себя///scale - длинна одной линии///vx - ширина лабиринта///vy - высота лабиринта////////////////////////////////////////////////////////////BinaryMaze(int scale, int vx, int vy);private:///////////////////////////////////////////////////////////////Отрисовка по типу window.draw(...);////////////////////////////////////////////////////////////virtual void draw(RenderTarget &target, RenderStates states) const override;///////////////////////////////////////////////////////////////Массив линий////////////////////////////////////////////////////////////VertexArray lines;};BinaryMaze::BinaryMaze(int scale, int vx, int vy) {lines.setPrimitiveType(Lines);//Установка примитива - линияlines.resize(vx*vy*2);//Установка количества линийint arrayNumber(0);//Номер линии///////////////////////////////////////////////////////////////Цикл выполняющий алгоритм - Двоичное дерево////////////////////////////////////////////////////////////for (int y(0); y < vy; y++) {for (int x(0); x < vx; x++) {int randomSetting = 0 + rand() % 2;switch (randomSetting) {case 0 :lines[arrayNumber].position = Vector2f(x*scale, y*scale);arrayNumber++;lines[arrayNumber].position = Vector2f(x*scale+scale, y*scale);break;case 1 :lines[arrayNumber].position = Vector2f(x*scale, y*scale);arrayNumber++;lines[arrayNumber].position = Vector2f(x*scale, y*scale+scale);break;}arrayNumber++;}}}///////////////////////////////////////////////////////////////Описание функции отрисовки////////////////////////////////////////////////////////////void BinaryMaze::draw(RenderTarget &target, RenderStates states) const {target.draw(lines, states);}Вложения:
You must be logged in to view attached files. -
АвторСообщения
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
Для ответа в этой теме необходимо авторизоваться.