• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Генерация Лабиринтов

  • Автор темы Nik23
  • Дата начала
N

Nik23

Срочно нужен самый простой код программы Генерация лабиринтов на VB...Помогите пожалуйста
 
N

Nik23

кто нить может че нить подсказать??
 
J

Jumpy

А чего подсказывать ?)))
Что такое лабиринт - не сказано, из чего его генерировать - не сказано. Какие у лабиринта должны быть оссобенности - не сказано ) Нет задачи - нет подсказки )

самый простейший код - две линии на форме нарисоват с рандом координатами ) чем не лабиринт )
 
N

Nik23

Лабиринт может быть любой размерностью с 1 входом и 1 выходом и иметь 1 решение... в сети много информации но на вижуал бэйсик нету не одного кода
 
A

alex77755

посмотри это
 

Вложения

  • 3DMAZE.ZIP
    18,6 КБ · Просмотры: 144
J

Jumpy

Гы, клевая штука ))) Но едва ли человеку поможет пример на 3500 строчек :)))))

ВБ быстрее изучить, нежели понять чо там написано и как оно работает :)))

по теме же:
кода не дам, ибо нету.

но самый простой алгоритм имхо такой:
берем стартовую точку, чертим из нее "путь" (случайным образом) пока он не наткнется сам в себя (края внешние - огибаем)
потом берем случайным образом любую точку на этом пути и опять чертим из нее путь ну итд пока не останется непройденных клеток.
 
N

Nik23

alex77755 спасибо но че то он больно большой попроще нет ничего? По идее он должегн быть гораздо проще...
 
Z

Zato

Если нужен совсем простой способ, то попробуй создать массив, а потом случайным образом заполнять его единицами, по одной, проверяя возможно ли пройти от точки старта к точке финиша по единицам. Понятно, что 0-стенка 1-проход. Вот тебе простенький генератор лабиринтов. Могу выдать код на Purebasic, если надо.
 
N

Nik23

Zato> Во выложи пожалуйста буду очень благодарен
 
N

Nik23

Вот код на паскале довольно маленький вот тока перевести бы синтаксис на ВБ

uses GraphABC;
const
szw=70;
szh=50;
cellsz=10;
type
point=record
x,y: integer;
end;
var
maze: array [0..szw-1] of array [0..szh-1] of integer;
todo: array [0..szw*szh-1] of point;
todonum: integer;
const
dx: array [0..3] of integer=(0, 0, -1, 1);
dy: array [0..3] of integer=(-1, 1, 0, 0);
procedure init;
var
x,y,n,d: integer;
begin
for x:=0 to szw-1 do
for y:=0 to szh-1 do
if (x=0) or (x=szw-1) or (y=0) or (y=szh-1) then
maze[x][y]:=32
else maze[x][y]:=63;
Randomize;
x := Random(szw-2)+1;
y := Random(szh-2)+1;
maze[x][y]:= maze[x][y] and not 48;
for d:=0 to 3 do
if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then
begin
todo[todonum].x:=x + dx[d];
todo[todonum].y:=y + dy[d];
Inc(todonum);
maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16;
end;
while todonum > 0 do
begin
n:= Random(todonum);
x:= todo[n].x;
y:= todo[n].y;
Dec(todonum);
todo[n]:= todo[todonum];
repeat
d:=Random (4);
until not ((maze[x + dx[d]][y + dy[d]] and 32) <> 0);
maze[x][y] := maze[x][y] and not ((1 shl d) or 32);
maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not (1 shl (d xor 1));
for d:=0 to 3 do
if (maze[x + dx[d]][y + dy[d]] and 16) <> 0 then
begin
todo[todonum].x := x + dx[d];
todo[todonum].y := y + dy[d];
Inc(todonum);
maze[x + dx[d]][y + dy[d]] := maze[x + dx[d]][y + dy[d]] and not 16;
end;
end;
maze[1][1] := maze[1][1] and not 1;
maze[szw-2][szh-2] := maze[szw-2][szh-2] and not 2;
end;
procedure Draw;
var x,y: integer;
begin
for x:=1 to szw-2 do
for y:=1 to szh-2 do
begin
if ((maze[x][y] and 1) <> 0) then
Line(x * cellsz, y * cellsz, x * cellsz + cellsz + 1, y * cellsz);
if ((maze[x][y] and 2) <> 0) then
Line(x * cellsz, y * cellsz + cellsz, x * cellsz + cellsz + 1, y * cellsz + cellsz);
if ((maze[x][y] and 4) <> 0) then
Line(x * cellsz, y * cellsz, x * cellsz, y * cellsz + cellsz + 1);
if ((maze[x][y] and 8) <> 0) then
Line(x * cellsz + cellsz, y * cellsz, x * cellsz + cellsz, y * cellsz + cellsz + 1);
end;
end;
begin
SetWindowCaption('Генерация лабиринта');
init;
draw;
end.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!