Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 01:59   #1
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию Генерирование рандомного лабиринта

Мне тут в аккадемии как самому умному дали индивид задание спроэктировать ранбомный алгоритм с выходом и входом и найти путь его прохождения.

Кто подскажет пошаговый алгорит я иммею пару представлений хочеться услышать несколько путей решения.

PS Или подкиньте другую идейку какую нить. вроде какой небуть маленькой игрушки или трехмерной графики. желателбно с напутствиями а то меня этот лабиринт невдохновляет темболее это уже до меня делал кто то...
Djaconda вне форума
Старый 02.11.2007, 09:00   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Есть игрушка, лабиринт - там и генерация. Но исходников нет.

Последний раз редактировалось zetrix; 02.11.2007 в 09:03.
zetrix вне форума
Старый 02.11.2007, 09:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

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

Ну а препод наш предложил в качестве курсача сделать лабиринт с перемещающимися комнатами (прям как в фильме КУБ).
Жаль что никто за это не взялся (бы)
I'm learning to live...
Stilet вне форума
Старый 02.11.2007, 09:55   #4
Omedus
Пользователь
 
Аватар для Omedus
 
Регистрация: 01.11.2007
Сообщений: 27
Сообщение

Вот вариант самой генерации лабиринта со входом и выходом, но путь программа не находит:
Код:
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.
Генерация случайных чисел — слишком важное дело, чтобы оставлять её на волю случая.
Scientia potentia est

Последний раз редактировалось Omedus; 02.11.2007 в 11:51.
Omedus вне форума
Старый 02.11.2007, 12:15   #5
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию

Спасибо за генерацию а путь я сам остораюсь найти аутем проверки рядом стояших стенок и ередвижения в пустых местах с учетом тупиков.
Djaconda вне форума
Старый 02.11.2007, 12:58   #6
Omedus
Пользователь
 
Аватар для Omedus
 
Регистрация: 01.11.2007
Сообщений: 27
Радость

Пожалуйста Обращайся
Генерация случайных чисел — слишком важное дело, чтобы оставлять её на волю случая.
Scientia potentia est
Omedus вне форума
Старый 07.11.2007, 19:17   #7
Djaconda
Пользователь
 
Аватар для Djaconda
 
Регистрация: 02.09.2007
Сообщений: 26
По умолчанию

Здраствуйте все снова) почти сделал этот лабирит но не прет меня он совсем что то какое то вялое а хочеться чего то .... эх фантазия неработает... Подкиньте идейки если у кого то что то есть.

PS препод паказывал пример типо Жизнь там бактерии жили развивались и плодились а есче про рыбок типо 4 вида рыбок и они друг друга хавают другие текают и так кто кого (рыбки конечно просто кружочки разного цвета но вот это меня поразило...)
Djaconda вне форума
Старый 08.11.2007, 07:25   #8
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
рыбки конечно просто кружочки разного цвета
можно и рыбок рисовать, делов то, палка, палка... в смысле эллипс, эллипс, огуречик
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума
Старый 08.11.2007, 07:37   #9
aljkerh
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Djaconda Посмотреть сообщение
а есче про рыбок типо 4 вида рыбок и они друг друга хавают другие текают и так кто кого (рыбки конечно просто кружочки разного цвета но вот это меня поразило...)
вот исходник
Вложения
Тип файла: rar Текстовый документ (3).rar (3.8 Кб, 138 просмотров)
aljkerh вне форума
Старый 08.11.2007, 08:05   #10
aljkerh
Пользователь
 
Регистрация: 30.10.2007
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Djaconda Посмотреть сообщение
Здраствуйте все снова) почти сделал этот лабирит но не прет меня он совсем что то какое то вялое а хочеться чего то .... эх фантазия неработает... Подкиньте идейки если у кого то что то есть.
есть исходник на с++
и откомпелированный ехе-ник к нему
Вложения
Тип файла: rar лабиринт.rar (11.1 Кб, 261 просмотров)
aljkerh вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск выхода из лабиринта! Входными параметрами являются лабиринт, заданный массивом A[n][n] Astor Помощь студентам 4 12.05.2008 16:45
Прохождение подземного лабиринта Джаффара МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 3 12.04.2008 19:52
Генерирование Патрон Общие вопросы Delphi 7 29.03.2008 20:17
генерирование размещений Roman Помощь студентам 2 25.06.2007 12:01