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

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

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

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

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

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

Умоляю помогите!
  • Вопрос задан
  • 543 просмотра
Пригласить эксперта
Ответы на вопрос 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
    build engineer
    А зачем это делать каждую секунду?
    Перейдите на более длительные итерации. Перейдите на триггеры по определенной активности.
    Ответ написан
  • solotony
    @solotony
    code for food, caviar preferably
    наверно неправильный подход держать "жителей" в SQL. надо загрузить в начале игры.
    Но я бы использовал объекты, а не просо структуры и совершал бы цикл вызывая метод объекта
    Ответ написан
  • @syrov
    пишу программы до 99 строк
    наверное можно организовать очередь с приоритетами, самый голодны будет всегда первым, (это быстрее чем держать отсортированный массив). кроме этого, наверное нет необходимости изменять очередь каждую секунду, а только когда кто-то поел. (если никто не поел то все просто стали, глобально, голоднее на 1 секунду).

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

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

Войти через TM ID
Похожие вопросы