M.A.X.    Вы вошли как гость
Российский Клуб игроков M.A.X.
 
[Новости]   [Новичку]   [Энциклопедия]   [Документы]   [Файлы]   [Игроки]   [Архивы]   [Архив форума]  
[Новый сайт]   [M.A.X. Gold]   [Партии]  

 
 
 
Архив форума  МаксГолд
[Основной форум] [Голосования] [МаксГолд] [Off-Topic]
 


Готово  -  Hruks,  25.05.2010  17:31:24

Файл в буфере:
cost20100526.zip

Внутри изменённый tst.dpr (остались только тесты, зато их много - мне нужно было убедиться, что всё работает)
UBuildCalculatorOriginal.pas - тут скорректированная функция calc_build_seq. Она считает лучше, чем оригинальная, но не обладает функциональной полнотой. Зато она стала покороче :) Не факт, кстати что считает правильно, но точно лучше чем было.

Далее файл UBuildCalculator.pas
В нём новая могучая :) функция CalcBuildSeqExt.
И сделана совместимая по прежним параметрам функция CalcBuildSeq. Ну её сделал на всякий случай. Она работает как старая, но без ошибок. По крайней мере вычислительных. Прочто логически её нужно вызывать по разному.

Есть ещё пара вспомогательных функций:
GetReducedCost - возвращает сколько коста можно снять с юнита при заданной скорости и производстве.
GetBuildCost - возвращает сколько материала понадобится для строительства на данной скорости при заданном производстве.

Файл UBuildTypes.pas содержит необходимые типы и константы. Используется в тестах и в алгоритме. Вообще вспомогательные функции можно и в него перенести.

В общем главная особенность в том, что новая функция работает в 2х режимах.
Один - для начала производства. Для конструкторов и инженеров нужно указать сколько ресурсов в них есть, на какой скорости строить и кост того, что строится. На выходе получится массив стоимостей строительства. Ну и общая стоимость, скорость и прочие нужные данные для начала строительтсва. При этом скорость может быть скорректирована согласно запасам строителя.
Для заводов отличие в том, что в оригинальной игре строительство не подстраивается (не сбрасывает скорость) под запасы, а ведётся на указанной скорости. Соответсвенно запасы нужно указывать достаточные, а потом уже проверять по выходным значениям, сможет ли комплекс потянуть на заданной скорости.
В этом же режиме вызывать нужно и при смене плана строительства - если хотим поменять скорость строительства на заводе.
 
Второй режим это продолжение строительства на заводах. В частности на конец хода. Функции нужна стоимость юнита по плану и реальные запасы + производство - потребление. В результате функция скажет, может ли быть производство, и если да, то сколько нужно отнять от текущих запасов и какая часть юнита построится.
Производство пехоты определяется по производительности в ход (должна быть 1) и коррекно обсчитывается во всех режимах.

Более подробно по каждому параметру есть в файле UBuildCalculator.pas.

Если что-то нужно доработать и/или объяснить, то всегда пожалуйста.

P.S. Всякие условия и правила производства в M.A.X. оказались чуть запутанее, чем казалось на первый взгляд. Не то, чтобы это оказалось новостью, просто это было уже привычно и не особо обращал на это внимание. Тем не менее понимаю, что новичкам в этой игре очень и очень сложно.