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

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


(Фича) Перепродумывание ресурсов  -  Artlav,  04.02.2011  15:54:47

Попытка описать и продумать, как распределять ресурсы в игре.
Примерно описывает утерянную исходную идею текущей системы.
Предлагаю всем внимательно вчитаться в предпосылки и требования, и проверить их правильность и полноту.

При наличии полноты можно будет придумывать алгоритм.
Чего не хватает в постановке?
Если сейчас не вспомним и не продумаем - второго шанса может уже и не быть!




Юниты на сетке, связность заранее не известна.
Поиск связности идёт рекурсивно по карте присутствия (unu).

События игры:
-Создан юнит, без потребления (или выключенный). Может изменить связность. Не должно влиять на распределение
-Создан юнит с постоянным потреблением (всегда включен), (эквивалентно ли создать+запуск?)
-Взорван юнит (без изменения связности, с изменением связности - одно событие, надо считать, что связность изменилась?)
-Запущен юнит с постоянным потреблением
-Изменено потребление/производство юнита (распределение, строительство. Отличается от старт-стоп тем, что целостно, т.е. если производство меняется со 100 до 99, то не остановится всё, что им питается, как при старт-стопе)
-Остановлен юнит, с освобождение ресурсов
-Остановлен юнит инфильтратором или по окончанию необходимого ресурса (взрыв без потери связности?)
-Попытка остановки юнита (производит нужное), с полным откатом чего либо
-Заменён юнит (удалён-создан без изменения связности)
-Конец хода

События конца хода:
-Нужно удовлетворить потребности
-Нужно остановить тех, кто не получил по потребностям
-Нужно положить избыток в хранилища (возможно, что произведено больше, чем влезет, но будет потрачено и влезет)
-Нужно обновить потребления у производителей
-Всё должно быть целостным

Шахта:
-Производство фиксируется при создании и перерассчитывается при распределении
-Производство не может превышать 16 единиц в сумме добываемых материалов

Вопросы:
-Когда момент конца хода? Локально перед началом следующего хода?


Данные:
-Для каждого ресурса хранится рабочая и рассчётная структура:
--num Суммарное число
--use Потребить в этом ходу
--now Имеется на борту
--pro Произвести за этот ход
--dbt Долг за этот ход, необходим чтобы определить, а можем ли мы включить что-то

-У юнита есть (должно быть единое) состояние включенности, при котором он потребляет и производит
-Хранение и долги юнит даёт всегда
-Проводимость у юнита всегда

Алгоритм (набросок мыслей, не вчитываться):
-Все функции должны быть запускаемы на тестовом наборе (для проверки возможности операции и её отката) или на рабочем
-Функции событий обходят рекурсивно все юниты от точки события
-Функция конца хода обходит все юниты

-При удовлетворении потребностей сначала откачиваются долги, потом - из хранилищ
-При недостачи - остановить...
...Тут возникает моногоитерационная проблема - при остановке надо запускать все с начала...

...Надо думать...

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

-Вопрос - долги забывать, раздавая по потреблению, или обнулять долги, потом по потреблению их создать?