theMukhiddin
@theMukhiddin
Веб-разработчик

Как каждую секунду проверять что-либо на что-либо?

Народ, я может и успел уже достать тут вас всех, но я клянусь не понимаю.
ПОЖАЛУЙСТА, объясните мне одну простую вещь.

Вот есть у меня таблица в MySQL. Называется жители. В этой таблице есть у меня 1000 жителей.

Как мне каждую секунду увеличивать показатель голода каждого жителя на +1?
Как мне каждую секунду проверять каждого жителя на голод?
Как мне в случае заполненности показателя голода, отправлять жителя в таверну?

Как вы видите, все эти вопросы об одном и том же. Как мне проверять что либо, на что либо каждую секунду?

Умоляю помогите!
  • Вопрос задан
  • 591 просмотр
Пригласить эксперта
Ответы на вопрос 6
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Т.е. у тебя всего 1000 жителей и ты используешь MySQL? Допустим структура житель выглядит так:
struct Citizen {
  char name[64];
  short hunger;
  short health;
  TYPE type;
};

И того 69 байт на 64 битной платформе, предположим, что там ещё куча полей и увеличим размер одного жителя до 128 байт(что даже избыточно), итого 128 кБайт, это крайне мало, можно хранить в ОЗУ, если нужно сохранять между запусками, то может redis подойдёт, ну или всё таки MySQL, но кешировать данные в памяти, т.к. если запрашивать каждый раз, оно будет крайне медленным.
А на счёт темы вопроса, гугли game loop. Проверять каждую секунду скорее всего не надо, но надо обновлять на разное значени в зависимости от того, сколько прошло времени.
game-loop-fixed.png
В цикле вызываешь метод модуля, отвечающего за жителей, и тот уже обновляет нужных тебе жителей. Если прошла секунда, обновляешь на 1 * k, где k - коэффициент голода, если прошло 10 секунд, то 10 * k и т.д.
Ответ написан
Griboks
@Griboks
А что, если взять все ответы на все эти вопросы и... изучить тему? Вы делаете игру, так используйте соответствующие инструменты! Например, игровой движок. И сразу отпадёт большинство вопросов. Зайдите на сайт, прочитайте мануалы. А потом задавайте уже вопросы. В противном вопросов будет ооооооочень много.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Разработка игр
software engineer
А зачем это делать каждую секунду?
Перейдите на более длительные итерации. Перейдите на триггеры по определенной активности.
Ответ написан
solotony
@solotony
покоряю пик Балмера
наверно неправильный подход держать "жителей" в SQL. надо загрузить в начале игры.
Но я бы использовал объекты, а не просо структуры и совершал бы цикл вызывая метод объекта
Ответ написан
Комментировать
@syrov
пишу программы до 99 строк
наверное можно организовать очередь с приоритетами, самый голодны будет всегда первым, (это быстрее чем держать отсортированный массив). кроме этого, наверное нет необходимости изменять очередь каждую секунду, а только когда кто-то поел. (если никто не поел то все просто стали, глобально, голоднее на 1 секунду).

Хотя, если это всего 1000 записей, то любое решение будет работать, только не уверен, что это хорошо, изменять записи каждую секунду.
Ответ написан
@DivineMgn
а что если использовать lazy-подход. обновлять данные только тогда, когда они действительно нужны.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы