Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Сортировка тайлов по координатам?

тут можно задать вопрос по скриптингу
Post Reply
SuperPups
Posts: 5
Joined: 08.05.2011 7:38

Сортировка тайлов по координатам?

Post by SuperPups »

Добрый день!
Есть процедура, которая ищет несколько типов деревьев па площади 60х60 квадратов. Не удобность в том, что чар бегает от одного угла к другому, тем самым увеличивая время добычи ресурсов.

Code: Select all

Procedure CheckLumberTiles;
begin
  totalSum := 0;
  for i:=0 to 5 do begin                                           
    CheckTiles := GetStaticTilesArray(LumberX-SqFL, LumberY-SqFL, LumberX+SqFL, LumberY+SqFL, WorldNum, LumberTile[i], a);
    if CheckTiles>0 then begin
      for k:=0 to CheckTiles-1 do LTCoords[totalSum+k]:=a[k];
    end;
    totalSum:=totalSum+CheckTiles;
  end;
end;
Как посортировать LTCoords, по Х или Y, чтобы чар ходил к ближайшему дереву? Нигде в примерах и мануалах ничего подобного не нашел :(
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: Сортировка тайлов по координатам?

Post by Alex »

тебе поможет сортировка пузырьком, только её нужно модифицировать что бы переворачивал учитывая вторую координату
Новый стелс лежит тут. Стелс это произведение искусства! :)
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Сортировка тайлов по координатам?

Post by shinma »

о помню помню учили кадато сто лет назад сортировка матрицы методом пузырька там чото с J замута связана вспоминать лень. и так рубит нормаьно
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: Сортировка тайлов по координатам?

Post by Alex »

особых замут не должно быть, всего один if добавить надо в эту реализацию сортировки)
Новый стелс лежит тут. Стелс это произведение искусства! :)
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Сортировка тайлов по координатам?

Post by shinma »

НАШЕЛ мать его за ногу
http://www.nesterova.ru/bibl/algorithm_ ... imer2.html
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Re: Сортировка тайлов по координатам?

Post by grundick »

А я как-то иначе делал...Из центра(координаты чара) проверял все тайлы по спирали, нужные метил и уже спиралькой бегал и рубил.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Сортировка тайлов по координатам?

Post by CFA »

я делал массив структур с координатами и таймерами когда этот тайл был вырублен, и когда очередное дерево вырубалось полностью, искал ближайший тайл в котором логи уже реснулись. Впрочем это тоже не самый оптимальный вариант.
SuperPups
Posts: 5
Joined: 08.05.2011 7:38

Re: Сортировка тайлов по координатам?

Post by SuperPups »

Спасибо за помощь!
Я перебрал все предложенные варианты и даже просчитывал расстояние между двумя точками по цепочке. Но остановился на этом:

Code: Select all

  for k:=0 to totalsum do begin
    for i:=0 to totalsum-1 do begin
      if LTCoords[i].X > LTCoords[i+1].X then begin
        a[0].tile := LTCoords[i].tile;
        a[0].X := LTCoords[i].X;
        a[0].Y := LTCoords[i].Y;
        a[0].Z := LTCoords[i].Z;
        LTCoords[i].tile := LTCoords[i+1].tile;
        LTCoords[i].X := LTCoords[i+1].X;
        LTCoords[i].Y := LTCoords[i+1].Y;
        LTCoords[i].Z := LTCoords[i+1].Z;
        LTCoords[i+1].tile := a[0].tile;
        LTCoords[i+1].X := a[0].X;
        LTCoords[i+1].Y := a[0].Y;
        LTCoords[i+1].Z := a[0].Z;
      end;
    end;
  end;
  for k:=0 to totalsum do begin
    for i:=0 to totalsum-1 do begin
      if LTCoords[i].X = LTCoords[i+1].X then begin
        if LTCoords[i].Y > LTCoords[i+1].Y then begin
          a[0].tile := LTCoords[i].tile;
          a[0].X := LTCoords[i].X;
          a[0].Y := LTCoords[i].Y;
          a[0].Z := LTCoords[i].Z;
          LTCoords[i].tile := LTCoords[i+1].tile;
          LTCoords[i].X := LTCoords[i+1].X;
          LTCoords[i].Y := LTCoords[i+1].Y;
          LTCoords[i].Z := LTCoords[i+1].Z;
          LTCoords[i+1].tile := a[0].tile;
          LTCoords[i+1].X := a[0].X;
          LTCoords[i+1].Y := a[0].Y;
          LTCoords[i+1].Z := a[0].Z;
        end;
      end;
    end;
  end;
Сейчас оптимизирую код и будет все ОК!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сортировка тайлов по координатам?

Post by Vizit0r »

Code: Select all

type
ArrayType = Array[0..100] of Cardinal;

var 
StrubsList: TStringList;
A : ArrayType;
flag : Boolean;
i,j  : Integer;
tempValue: Cardinal;

....
....
//сортировка пузырьковым методом
  j := StrubsList.Count-1;
  flag := True;
  while ((j >= 1) and flag) do
  begin
        j := j - 1;
        flag := False;
        for i := 0 to j - 1 do
         begin
            if ((i < (StrubsList.Count -2)) and ((GetX(A[i]) > GetX(A[i+1])) or ((GetX(A[i]) = GetX(A[i+1])) and (GetY(A[i]) > GetY(A[i+ 1]))))) then
            begin
	  tempValue := A[I];
	  A[I] := A[i+1];
	  A[i+1] := tempValue;
               flag := True;
	  end
	end
  end
  end;
//конец сортировки
выдрал с одного из своих допотопных скриптов (в те далекие времена, когда я их еще писал :))
автор не я, кто - не помню.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Re: Сортировка тайлов по координатам?

Post by Miralex »

Сортировка врядле нужна, все делается гораздо проще:

Делаем ф-цию определения след. дерева в которой есть свой массив деревьев, которых еще не рубили. В ф-ции пробегаетесь по всему массиву и определяете ближайшее от текущих координат персонажа. Возвращаете скрипту координаты следующего дерева и удаляете его с массива. Если массив пустой - перегоняете в него с основного все координаты деревьев.

Принцип такой, что если персонаж периодически забегает на лодку (или кудато еще) скинуть важные доски - вы не будете возвращаться к след. в массиве дереву, а будете идти к ближайшему тоже ...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сортировка тайлов по координатам?

Post by Vizit0r »

зачем делать массив деревьев, если можно определять их динамически?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Re: Сортировка тайлов по координатам?

Post by Fenix »

Думается, в этом случае проще контролировать диапазон "лесозаготовки". А то ещё уйдет куда-нить, пока будет лес валить.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сортировка тайлов по координатам?

Post by Vizit0r »

а куда-то ненадо, функция определения статики задается параметрами X1-Y1,X2-Y2, так что дальше заданного квадрата ничего не найдет, и соответственно не уйдет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Re: Сортировка тайлов по координатам?

Post by Fenix »

Ну так ведь нет особого смысла постоянно терзать GetStaticTilesArray, если можно все нужные данные единоразово выбрать в массив.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сортировка тайлов по координатам?

Post by Vizit0r »

вобщем-то да, если файла нет - создаем автоматом, если есть - работаем с ним
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply