Неужели существует человек который нашел выход из этого мега лабиринта? Во всяком случае на его прохождение потребуется очень много времени, невероятной усидчивости и внимания…
а если постараться в пейнте залить...что нибудь выйдет?:D
зависший пейнт - а потом вся белая часть закрасится. тут все ответвления соеденены
Paint я прошёл !
Нет мозг даже не думай об этом!
Я не буду пытаться!!!
Я не буду пытаться!!!
qr код раcпознан
Я жду правильный вариант.
чаю тебе (две порции)
ГЕНИЙ!!!
я уже обдумывать программулину, которая будет обходить лабиринт, отсекая тупиковые ветки, а тут такое решение. все гениальное - просто ))
у меня родилась идея, поспорить с каким-нибудь умником, что он не сможет пройти карандашом напечатанный лабиринт.
он то будет думать, что лабиринт типа как в журналах, на одной печатной странице, а я ему вывалю лист А2 с этой головоломкой)
он то будет думать, что лабиринт типа как в журналах, на одной печатной странице, а я ему вывалю лист А2 с этой головоломкой)
хотя, чего тут удивляться.
Любой лабиринт (если это не тупик) имеет два и только два варианта прохода: двигаться, придерживаясь левой стены, или двигаться, придерживаясь правой стены. Оба варианта непременно приведут к выходу.
Гораздо более интересны многомерные лабиринты. Это то, что ни один мозг не в силах пройти.
Любой лабиринт (если это не тупик) имеет два и только два варианта прохода: двигаться, придерживаясь левой стены, или двигаться, придерживаясь правой стены. Оба варианта непременно приведут к выходу.
Гораздо более интересны многомерные лабиринты. Это то, что ни один мозг не в силах пройти.
antichamber?
Ты не прав, можно нарисовать лабиринт, у которого будет 3 и более различных вариантов прохода.
"Вдоль левой стены" и "вдоль правой стены" две стратегии, гарантирующие успех, и если у лабиринта более одного вариант прохода, они дадут различные пути. Но могут быть другие варианты.
"Вдоль левой стены" и "вдоль правой стены" две стратегии, гарантирующие успех, и если у лабиринта более одного вариант прохода, они дадут различные пути. Но могут быть другие варианты.
любой лабиринт, независимо сколько у него вариантов прохода, можно пройти, если держаться правой или левой стены, пофигу, дадут они одинаковый результат или нет
WRONG существуют лабиринты которые невозможно пройти ни по левой ни по правой стороне.
Вот например.
Вот например.
это если начало движения внутри лабиринта
в любом лабиринте должен существовать входи и выход.
если это соблюдено, то каким бы извилистым он не был, стена нигде не прерывается и приведет в итоге к выходу.
Но это может занять на порядок больше времени, чем даже случайное блуждание. Зато гарантировано.
если это соблюдено, то каким бы извилистым он не был, стена нигде не прерывается и приведет в итоге к выходу.
Но это может занять на порядок больше времени, чем даже случайное блуждание. Зато гарантировано.
Картинку внимательно посмотри, слепец.
Стены не соединены.
Стены не соединены.
вход в лабиринт должен быть вне лабиринта
это настолько охуительно, что я аж возбудился.
Ушел пилить код (и гифку попозже) волнового и А* прохождения. :)
лучше запили код на создание лабиринта.
на прохождение алгоритм элементарен. (все время двигаться по одной стороне лабиринта)
на прохождение алгоритм элементарен. (все время двигаться по одной стороне лабиринта)
http://habrahabr.ru/post/176671/ дерзай
ждёмс
Ждем :)
Вот бы такие лабиринты в компьютерные игры. Например в Морровинд или Скайрим.
В TES даггерфоле было нечто подобное, причем трехмерное. И это потрясало воображение. Ничего подобного ни в одной другой игре не встречалось. Геймдевы берегут слабую психику игроков.
В TES даггерфоле было нечто подобное, причем трехмерное. И это потрясало воображение. Ничего подобного ни в одной другой игре не встречалось. Геймдевы берегут слабую психику игроков.
Народ, у меня такое чувство, что лабиринт сделан в Paint.Net, у меня такое расширение стояло и такие лабиринты делало....
Ну нашел я выход, делов то
Ха) Остроумно!
Не богохульствуйте! Чаку для этого совсем не нужен бульдозер.
бульдозер это чтобы Чак не шел пешком, а лабиринт впереди сам разваливается от страха
ты запутался в терминологии. Чак не бог. и не может им быть. потому что он есть.
зы: ну не работает у меня зпт
зы: ну не работает у меня зпт
зануда-мэн здесь! Итак - у тебя не работают запятые на русской И английской раскладках? Не беда - жмёшь Пуск, в Стандартных приложениях выбираешь закладку "Специальные возможности" и там жмакни Экранную Клавиатуру - вуаля!
Теперь я знаю, какие обои клеить.
С этим лабиринтом, точно к хуям ослепнешь
волновой алгоритм спасет твое зрение ))
Гы, у меня пейнт завис намертво:D
Карта первыъ элдер сколов?
пейнт захавол мой комп (600 мб оперативы на одну картинку, это надо уметь)
фотошоп, кстати, за секунду залил.
всё получилось, проход есть, но сюда заливать наверное не буду, потому что полученный цветной пнг весит 100МБ.
А вот уменьшенное в 10 раз
всё получилось, проход есть, но сюда заливать наверное не буду, потому что полученный цветной пнг весит 100МБ.
А вот уменьшенное в 10 раз
уменьшенное в 10 раз по ширине и высоте, итого получается, что сама картинка уменьшена в 100 раз
так випьем же за кибэренетикэ!
Больше похоже на кусок ткани
а ты нажми :)
я хочу такой данж в RPG!
Я надеюсь, кто-нибудь уже пишет алгоритм нахождения выхода? Потому что мне лень.
Если картинку открыть в ИЕ, то там виден путь.
Хорошая попытка, майкрософт, но всё равно нахуй тебя и твой Internet Explorer.
Путь прямиком в ад
Если ее открыть в ИЕ - виден синий экран смерти.
а недавно гигантский тетрис запиливали. давайте еще чего-нибудь гигантского!
надо будет самому запарится с карандашиком, вот и занятие на выходные нашёл =)
ps Лабиринт помоему одним из алгоритмов написан... Практиковался когда-то, но ничего не вышло... Можете поискать на хабре, но это было год назад
pss Извините за тавтологию
pss Извините за тавтологию
конечно же через алгоритмы генераций лабиринтов.
у меня на всякий пожарный валяется реализация такого http://algolist.manual.ru/games/maze.php
когда ковырял поиск пути, использовал этот алгоритм
у меня на всякий пожарный валяется реализация такого http://algolist.manual.ru/games/maze.php
когда ковырял поиск пути, использовал этот алгоритм
я быстрее, но путь такой же)
Ага. Но это мое первое приложение, работающее с графикой :) Раньше все enterprise...
Минотавр одобряе этот псто!!!
если есть алгоритм для создания этой хуеты значит должен быть для "прохождения"
Можно при помощи рекурсии, только нужно подготовить сам рисунок.
#include
#include // int16_t
#include
#include
#include "image.h"
#include "imagePNG.h"
#define path "mazes/004.png"
#define sizeInside 4
#define sizeWall 2
#define sizePlace (sizeInside + sizeWall)
#define mazeWeightMax (65535)
int mazeW = 0;
int mazeH = 0;
void drawSquare(Image &image, int x, int y, int w, int h);
int maze[400][400][3];
void initMaze()
{
int x,y;
for (y = 0; mazeH > y; ++y)
{
for (x = 0; mazeW > x; ++x)
{
maze[y][x][0] = 0;
maze[y][x][1] = 0;
maze[y][x][2] = mazeWeightMax;
}
}
}
void fillMaze(Image &image)
{
int x, y;
for (y = 0; mazeH > y; ++y)
{
for (x = 0; mazeW > x; ++x)
{
maze[y][x][0] = (image.bitmap[image.size.w * 4 * (sizePlace * y + 0 ) + 4 * (sizePlace * x + sizeWall) + 0]) == 255;
maze[y][x][1] = (image.bitmap[image.size.w * 4 * (sizePlace * y + sizeWall) + 4 * (sizePlace * x ) + 0]) == 255;
maze[y][x][2] = mazeWeightMax;
// maze[y][x][1] = ([image.size.w * 4 * (y + 0) + 4 * (x + 0)]);
}
}
maze[0][0][0] = 0;
maze[0][0][1] = 0;
}
bool wallPass(int y, int x, int direction);
std::vector > result;
int checkRightResolve(int y, int x);
void processMaze()
{
std::cout > wave;
std::stack > waveNew;
std::stack > waveClear;
wave.push(std::pair(0,0));
// maze[0][0][3] = 0;
std::cout p = wave.top();
wave.pop();
y = p.first;
x = p.second;
std::cout step + 1)
{
waveNew.push(std::pair(y - 1, x));
}
}
if (wallPass(y, x, 1))
{
if (maze[y][x-1][2] > step + 1)
{
waveNew.push(std::pair(y, x - 1));
}
}
if (wallPass(y, x, 2))
{
if (maze[y+1][x][2] > step + 1)
{
waveNew.push(std::pair(y + 1, x));
}
}
if (wallPass(y, x, 3))
{
if (maze[y][x + 1][2] > step + 1)
{
waveNew.push(std::pair(y, x + 1));
}
}
}
wave = waveNew;
waveNew = waveClear;
++step;
} while (!wave.empty());
if (maze[mazeH-1][mazeW-1][2] == mazeWeightMax)
{
std::cout (y-1,x+0));
--y;
continue;
}
if (checkRightResolve(y+1, x+0) == step && wallPass(y,x,2))
{
result.push_back(std::pair(y+1,x+0));
++y;
continue;
}
if (checkRightResolve(y-0, x-1) == step && wallPass(y,x,1))
{
result.push_back(std::pair(y-0,x-1));
--x;
continue;
}
if (checkRightResolve(y-0, x+1) == step && wallPass(y,x,3))
{
result.push_back(std::pair(y-0,x+1));
++x;
continue;
}
}
}
}
}
int checkRightResolve(int y, int x)
{
if (y = mazeW || y >= mazeH)
{
return mazeWeightMax;
}
return maze[y][x][2];
}
void drawMaze()
{
std::cout y; ++y)
// for (y = 0; 10 > y; ++y)
{
for (x = 0; mazeW > x; ++x)
// for (x = 0; 10 > x; ++x)
{
std::cout x; ++x)
// for (x = 0; 10 > x; ++x)
{
std::cout = 400 || y >= 400)
{
return false;
}
switch (direction)
{
case 0: // top
// std::cout y; ++y)
{
for (x = 0; image.size.w > x; ++x)
{
std::cout i; ++i)
{
std::cout i; ++i)
{
x = result[i].second;
y = result[i].first;
if (x = mazeW || y>=mazeH)
{
continue;
}
drawSquare(image, x, y, sizeInside, sizeInside);
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 0] = 255;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 1] = 0;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 2] = 0;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 3] = 255;
}
// image.writeToFile("result.png", ImageFileFormat_PNG);
imagePNGWriteToFile("result.png", image.size.w, image.size.h, image.bitmap, 0);
}
}
}
std::cout yy; ++yy)
{
for (int xx = 0; w > xx; ++xx)
{
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 0] = 255;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 1] = 200;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 2] = 0;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 3] = 255;
}
}
}
#include // int16_t
#include
#include
#include "image.h"
#include "imagePNG.h"
#define path "mazes/004.png"
#define sizeInside 4
#define sizeWall 2
#define sizePlace (sizeInside + sizeWall)
#define mazeWeightMax (65535)
int mazeW = 0;
int mazeH = 0;
void drawSquare(Image &image, int x, int y, int w, int h);
int maze[400][400][3];
void initMaze()
{
int x,y;
for (y = 0; mazeH > y; ++y)
{
for (x = 0; mazeW > x; ++x)
{
maze[y][x][0] = 0;
maze[y][x][1] = 0;
maze[y][x][2] = mazeWeightMax;
}
}
}
void fillMaze(Image &image)
{
int x, y;
for (y = 0; mazeH > y; ++y)
{
for (x = 0; mazeW > x; ++x)
{
maze[y][x][0] = (image.bitmap[image.size.w * 4 * (sizePlace * y + 0 ) + 4 * (sizePlace * x + sizeWall) + 0]) == 255;
maze[y][x][1] = (image.bitmap[image.size.w * 4 * (sizePlace * y + sizeWall) + 4 * (sizePlace * x ) + 0]) == 255;
maze[y][x][2] = mazeWeightMax;
// maze[y][x][1] = ([image.size.w * 4 * (y + 0) + 4 * (x + 0)]);
}
}
maze[0][0][0] = 0;
maze[0][0][1] = 0;
}
bool wallPass(int y, int x, int direction);
std::vector > result;
int checkRightResolve(int y, int x);
void processMaze()
{
std::cout > wave;
std::stack > waveNew;
std::stack > waveClear;
wave.push(std::pair(0,0));
// maze[0][0][3] = 0;
std::cout p = wave.top();
wave.pop();
y = p.first;
x = p.second;
std::cout step + 1)
{
waveNew.push(std::pair(y - 1, x));
}
}
if (wallPass(y, x, 1))
{
if (maze[y][x-1][2] > step + 1)
{
waveNew.push(std::pair(y, x - 1));
}
}
if (wallPass(y, x, 2))
{
if (maze[y+1][x][2] > step + 1)
{
waveNew.push(std::pair(y + 1, x));
}
}
if (wallPass(y, x, 3))
{
if (maze[y][x + 1][2] > step + 1)
{
waveNew.push(std::pair(y, x + 1));
}
}
}
wave = waveNew;
waveNew = waveClear;
++step;
} while (!wave.empty());
if (maze[mazeH-1][mazeW-1][2] == mazeWeightMax)
{
std::cout (y-1,x+0));
--y;
continue;
}
if (checkRightResolve(y+1, x+0) == step && wallPass(y,x,2))
{
result.push_back(std::pair(y+1,x+0));
++y;
continue;
}
if (checkRightResolve(y-0, x-1) == step && wallPass(y,x,1))
{
result.push_back(std::pair(y-0,x-1));
--x;
continue;
}
if (checkRightResolve(y-0, x+1) == step && wallPass(y,x,3))
{
result.push_back(std::pair(y-0,x+1));
++x;
continue;
}
}
}
}
}
int checkRightResolve(int y, int x)
{
if (y = mazeW || y >= mazeH)
{
return mazeWeightMax;
}
return maze[y][x][2];
}
void drawMaze()
{
std::cout y; ++y)
// for (y = 0; 10 > y; ++y)
{
for (x = 0; mazeW > x; ++x)
// for (x = 0; 10 > x; ++x)
{
std::cout x; ++x)
// for (x = 0; 10 > x; ++x)
{
std::cout = 400 || y >= 400)
{
return false;
}
switch (direction)
{
case 0: // top
// std::cout y; ++y)
{
for (x = 0; image.size.w > x; ++x)
{
std::cout i; ++i)
{
std::cout i; ++i)
{
x = result[i].second;
y = result[i].first;
if (x = mazeW || y>=mazeH)
{
continue;
}
drawSquare(image, x, y, sizeInside, sizeInside);
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 0] = 255;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 1] = 0;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 2] = 0;
// image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall+sizeInside/2 ) + 4 * ((x)*sizePlace+sizeWall+sizeInside/2) + 3] = 255;
}
// image.writeToFile("result.png", ImageFileFormat_PNG);
imagePNGWriteToFile("result.png", image.size.w, image.size.h, image.bitmap, 0);
}
}
}
std::cout yy; ++yy)
{
for (int xx = 0; w > xx; ++xx)
{
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 0] = 255;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 1] = 200;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 2] = 0;
image.bitmap[image.size.w * 4 * ((y) * sizePlace +sizeWall +yy) + 4 * ((x)*sizePlace+sizeWall+xx) + 3] = 255;
}
}
}
Лучше было ссылку на gist скинуть.
неформатирований код даже читать не хочетса
Спасибо тебе добрый человечище! = )) Давно искал что-нить подобное. Обожаю лабиринты))
Чтобы написать коммент, необходимо залогиниться