Нужна помощь в поиске логического решения проблемы - PullRequest
0 голосов
/ 08 июля 2019

Учитывая переменную 'points', которая увеличивается каждый раз, когда переменная 'player' набирает очки, как мне логически найти способ вознаграждения пользователя за нахождение 30 очков в пределах 5-минутного лимита? Там нет таймера обратного отсчета. Например, игрок может получить 4 очка, но через 5 минут, если у него 34 очка, что также имеет значение. Я думал об использовании временных меток, но я действительно не знаю, как это сделать.

1 Ответ

2 голосов
/ 08 июля 2019

То, о чем вы говорите, это " скользящее окно ".Ваше окно основано на времени.Запишите метку времени каждой точки и проведите свое окно по этим меткам времени.Вам нужно будет выбрать приращение времени, чтобы скользить в вашем окне.

После каждого «слайда» подсчитывайте свои очки.Когда вы получите нужную сумму, «вознаградите своего пользователя».«На каждом слайде» означает, что вам нужен какой-то таймер, который каждый раз вызывает функцию, чтобы оценить результат и сделать то, что вы хотите.

Например, установить окно на 5 минут и слайд 1 секунда . Не хранить единственную переменную с именем points .Вместо этого просто создайте массив временных меток.Каждый тик по таймеру (в данном случае - 1 секунда) подсчитывает количество временных отметок, которые соответствуют t - 5 минут до t сейчас ;если их 30 или более, вы достигли своего порога и можете наградить своего сверхбыстрого пользователя.Если вам нужно фактическое значение, которое может быть 34 , ну, вы только что вычислили его, так что вы можете использовать его.

Могут быть способы оптимизировать это.Я обеспечил наивный подход.Временные метки, которые вышли за пределы диапазона, могут быть удалены для экономии места.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...