Отслеживать, сколько раз событие происходит за период времени
Я работаю над небольшим RPG-проектом на Python, и у меня есть пара переменных, для которых мне нужно отслеживать ставки.
Один из них - это урон с течением времени - если цель получает X урона за последние y секунд (возможно, до 10 минут для некоторых из более крупных врагов), они оглушаются. (Таким образом, более умелые игроки, которые действительно могут наносить больше урона, получают оглушающие бонусы... при более высоком риске оглушения, так как его ход зависит от цели, и противник также получает больше атак за тот же период)
Я представляю это как сравнение (Здоровье-10 минут назад - Здоровье-сейчас) с порогом оглушения для данного врага после каждой атаки. Единственная проблема в том, что я понятия не имею, как отследить, какая переменная была в прошлом.
Другой отслеживает несколько переменных, которые я хочу прокрутить вверх / вниз с заданной скоростью, в фоновом режиме. (Я бы просто проверил, как долго переменная отбрасывалась в следующий раз, когда я ее использую (и обнуляю ее, если сумма отрицательна), но мне нужно вызвать другой метод, как только одна из этих переменных достигнет нуля И я бы предпочел иметь более высокое разрешение данных, чем просто менять значение на х каждую минуту в минуту.
Если вокруг есть свободно доступный devtool, который поможет справиться с подобными вещами, даже если это не для Python, просто укажите мне. Python довольно изящен в разрешении не-Python, и если мне нужно полностью поменяться местами, я смогу справиться. (Ну, если предположить, что он по-прежнему способен обрабатывать объекты... процедурное программирование для проекта с таким большим количеством маленьких кусочков, как это потребует серьезной переделки всей структуры программы... и все равно в конечном итоге окажется едва понятной болотой что касается моего ООП-промытого ума.)
1 ответ
Первое возможное решение, которое я понял, было примерно таким:
# On these timestamps you have gained these demages:
hits_hostory = {1385723418: 2, 1385723420: 20, 1385723425: 15, 1385723428: 3}
# Current timestamp
now = 1385723429
# Calculate hits in last 10 seconds
hits_sum_moving_10 = 0
for t, h in hits_hostory.iteritems():
if t > now - 10:
hits_sum_moving_10 += h
print "In last 10s you got %s demage" % hits_sum_moving_average_10
Но может быть какой-то лучший тип Python, который может помочь больше. Также вам предстоит решить проблему очистки hits_history
диктовать, как он только будет расти - IMO должно быть легко сделать резервную копию только элементов, которые проходят через условие "если", а затем заменяют целое hits_history
этим новым меньшим.
Примечание: для хорошего видео о программировании игр на python см. http://youtu.be/duc3jYgAaR0