Генерация леса

Материал из Клуб любителей рогаликов
Перейти к: навигация, поиск

Эта статья была первоначально написана для Darren Hebden's RLNews

Прежде всего я хотел бы сказать - это красиво и просто, но делает работу и очень легко реализуется.

Прежде всего мы должны принять несколько вещей. Первая карта является массивом, к настоящему времени его размеры 50x50. Второе, что T - используется для дерева и G - используется для земли. Начнем.

procedure TForm1.DrawForest(x,y:integer); 
var            
  n,s,e,w,i,j,k,d: integer;
begin
  i := x;            
  j := y;
  // это - насколько большим будет лес 
  for k := 1 to 20 do begin
    // север юг восток запад; диапазон до шести не сделает лес 
    // слишком большим и даст предсказуемый образец
    n := random(6); 
    e := random(6);
    s := random(6);
    w := random(6);
    // если мы делаем север, тогда... 
    // если мы не делаем, пропускаем это 
    if n = 1 then begin 
      // это должно гарантировать, что когда мы перезапускаемся 
      // в конечном счете, что мы выйдем из той же позиции 
      i := i - 1;       
      map[i,j] := 'T';   
    end;                
    if s = 1 then begin   // сделайте вышеуказанное на юг
      i := i + 1;
      map[i,j] := 'T';
    end;
    if e = 1 then begin   // кроме того на восток
      j := j + 1;
      map[i,j] := 'T';
    end;
    if w = 1 then begin      // и запад
      j := j - 1;
      map[i,j] := 'T';
    end;
  end;     
end; 

Теперь мы можем сделать лес вокруг x, y и для этого нам нужно выбрать позицию произвольно на своей карте. Для этой задачи мы создадим кнопку.

procedure TForm1.Button1Click(Sender: TObject);  
var
  x,y,z,i: integer;
begin                
  z := random(10);     // число участков леса 
  for i := 1 to z do begin
    // произвольно выбираем x,y позицию для леса
    x := random(50); 
    y := random(50);
    drawforest(x,y);         
  end;
end;

Теперь у Вас есть лес на весь мир. Есть многие другие вещи, с которыми Вы можете использовать это; мой личный любимый способ использовать этот алгоритм, чтобы произвольно генерировать пещеры изменением T на G.



Автор: Bryan Strait.
Источник: Creating a forest.
Перевел: Сергей В. Ждановских [Alchemist], 15.05.2005.