Читаем Виртуальная библиотека Delphi полностью

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

procedure TMatrix5.Culculate(X,Y : Integer ; BrushIndex : Integer );

var

 i : Integer;

 BaseIndex, AdditionalIndex : Integer;

Begin // Заполнить матрицу считав значения с карты

 Self.Fill(X,Y);

 if BrushIndex = 3 then // Если рисуем переходной землей

 begin

  Vector[12] := 15;// Заносим центральный элемент

  for i := 0 to 24 do

  begin // Получить тип земли в виде индекса(0,1,2)

   BaseIndex := GetBaseIndex(Vector[i]);

   // и прежний номер переходной текстуры

   AdditionalIndex := GetAdditionalIndex(Vector[i]);

   // Если число в таблице BasicTable не равно 16 то,

   // к индексу типа земли умноженному на 16

   // прибавляем новое смещение

   // и заносим в Vector

   // ,иначе ничего не меняется

   if BasicTable[i,AdditionalIndex] <> 16 then Vector[i] := BaseIndex*16 + BasicTable[i,AdditionalIndex];

  end;

 end { Конец обработки варианта "Переходная земля"}

 else // Иначе, если рисуем не переходной землей

 begin

  Vector[12] := BrushIndex*16;// Заносим центральный элемент

  for i := 0 to 24 do

  begin // Получить тип земли в виде индекса(0,1,2)

   BaseIndex := GetBaseIndex(Vector[i]);

   // и прежний номер переходной текстуры

   AdditionalIndex := GetAdditionalIndex(Vector[i]);

   // Если прежняя земля имеет тот же тип, что и активная

   if BaseIndex = BrushIndex then begin

    // Если число в таблице EqualTable не равно 16 то,

    // к индексу типа земли умноженному на 16

    // прибавляем новое смещение

    // и заносим в Vector

    // ,иначе ничего не меняется

    if EqualTable[i,AdditionalIndex] <> 16 then Vector[i] := BaseIndex*16 + EqualTable[i,AdditionalIndex];

   end

   else // Если заменяемая и замещающая земля имеют разные типы

   begin // Если число в таблице NotEqualTable не равно 16 то,

    // к индексу типа земли умноженному на 16

    // прибавляем новое смещение

    // и заносим в Vector

    // ,иначе ничего не меняется

    if NotEqualTable[i,AdditionalIndex] < 16 then Vector[i] := BaseIndex*16 + NotEqualTable[i,AdditionalIndex]

    else if NotEqualTable[i,AdditionalIndex] > 16 then Vector[i] := BrushIndex*16+ NotEqualTable[i,AdditionalIndex] - 16;

   end;

  end;

 end;

end;

Разберем все по полочкам: Первая строчка Self.Fill(X,Y); заполняет матрицу 5х5 значениями считанными с карты. Дальше следует такой кусок кода:

if BrushIndex = 3 then begin

 Vector[12] := 15;

 for i := 0 to 24 do begin

  BaseIndex := GetBaseIndex(Vector[i]);

  AdditionalIndex := GetAdditionalIndex(Vector[i]);

  if BasicTable[i,AdditionalIndex] 16 then Vector[i] := BaseIndex*16 + BasicTable[i,AdditionalIndex];

 end;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных