Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Автоматизация расчетов
Форумы портала PHP.SU » » Работа с СУБД » Автоматизация расчетов

Страниц (1): [1]
 

1. arxnday - 29 Ноября, 2015 - 02:39:35 - перейти к сообщению
Всем привет!
Собственно, пытаюсь сделать простенькую игру для набития руки, и столкнулся со следующей проблемой которую не понимаю как реализовать.
Вот есть у нас, допустим, склад, и необходимо чтобы каждую секунду "отработавшая шахта" приносящая 5 ед. ресурса не уходила в пустоту, а это значение добавляла к текущему показателю склада.
Как это можно реализовать?
Первая мысль была связана с cron, но при наличии, допустим, тысячи таких операций каждую секунду, кажется, будет слишком высокая нагрузка на сервер. Есть ли другие пути или можно сильно не беспокоиться о нагрузке от крона?
2. MiksIr - 29 Ноября, 2015 - 02:44:17 - перейти к сообщению
А зачем тебе хранить текущее состояние, если ты его всегда можешь посчитать. Обновляй базу на операциях списания (опустошение склада, например, или пролучение бонуса), а текущее состояние посчитаешь как "последниее состояние + (текущее время - время последнего состояния) * прирост".

Ну как вариант, ваще не очень в геймдеве.
3. arxnday - 29 Ноября, 2015 - 02:56:03 - перейти к сообщению
MiksIr пишет:
А зачем тебе хранить текущее состояние, если ты его всегда можешь посчитать. Обновляй базу на операциях списания (опустошение склада, например, или пролучение бонуса), а текущее состояние посчитаешь как "последниее состояние + (текущее время - время последнего состояния) * прирост".

Ну как вариант, ваще не очень в геймдеве.

Хм, спасибо за наводку на еще один вариант реализации)
Хотя на операциях списания не вариант, нужно чтобы при каждом обновлении страницы выводилось точное значение хранящегося на складе ресурса
получается, если правильно в 3 часа ночи понял такая очередность:
1. результат = (текущий timestamp - timestamp с бд) * прирост в секунду
2. состояние склада += результат
3. обновление значения timestamp

Спасибо!
4. MiksIr - 29 Ноября, 2015 - 03:14:18 - перейти к сообщению
Зачем тебе "3. обновление значения timestamp"?
5. arxnday - 29 Ноября, 2015 - 03:38:05 - перейти к сообщению
MiksIr пишет:
Зачем тебе "3. обновление значения timestamp"?
а что, в таблицу потом не нужно заносить значение последнего проведения операции?)
6. MiksIr - 29 Ноября, 2015 - 04:51:28 - перейти к сообщению
Для операции - надо. Но "показать сколько на складе" - это не операция. Т.е. заносите таймстамп только если тратите со склада, или если пришли какие-то бонусы за достижения, или если число прироста в секунду меняется (апнули шахту) и т.д.

А если просто показываете состояние - зачем заносить его, если можно продолжать расчитывать... будет просто "текущий timestamp" увеличиваться и все.

В базах данных если можно лишний раз не писать - лучше не писать.
7. lastdays - 29 Ноября, 2015 - 08:37:12 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. print update_store( time()-5  );
  2.  
  3.  
  4. function update_store ( $lastom )
  5. {
  6.  //- Получаем время последнего обновления
  7.  $last_act = test( time() - $lastom );
  8.  //- Сколько ресурсов в секунду
  9.  $resource_tick = round(5 * $last_act);
  10.  
  11.  return $resource_tick;
  12. }
  13.  
  14. function test( $par )
  15. {
  16.         if ( $par < 0 ) $par = 0;
  17.         return $par;
  18. }


Для примера и незачем каждую секунду обновлять. Записывай в БД или куда удобно время последнего обновления
8. arxnday - 30 Ноября, 2015 - 22:43:01 - перейти к сообщению
Действительно, перезаписывать постоянно значение не стоит, это влечет за собой следующую проблему:
Выработка ресурса - 2 ед. за минуту, соответственно при таком подходе и частом обновлении страницы, момент когда ресурс должен зачислится не сможет наступить.

Спасибо всем огромное)

 

Powered by ExBB FM 1.0 RC1