Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как отложить выполнение скрипта?

Макс Рейх Ученик (58), на голосовании 1 год назад
Есть команда с которой я начинаю игру. Как сделать так чтобы после ее начала скрипт засыпал на ($seconds секунд) и по истечению этого времени проверял, если $game->step < 10 то (вывод сообщения о проигрыше)?
Пробовал сделать ниже, но не работает.

if($command == 'play') {
$game->mode = 1; //режим игры включен в базе данных
$game->step = 0; // шаг пользователя в игре
$game->seconds = $seconds; // длительность игры в секундах
R::store($user); //обновление в бд
say('игра началась! у Вас 30 секунд'); // говорим пользователю о начале игры
sleep(30);
if($game->step < 10) {
say('Вы проиграли');
}
}
Голосование за лучший ответ
Nivan Enver Профи (621) 1 год назад
sleep вообще не вариант, иначе тебе придётся делать асинхронизацию и потоки.
Совет: Сделай таймер. Каждый такт будет добавляться время и если время больше нужного - выполнить один раз.
Посада Ядерная Гуру (4769) 1 год назад
 if ($command == 'play') { 
$game->mode = 1;
$game->step = 0;
$game->seconds = $seconds;
R::store($user);
say('игра началась! у Вас 30 секунд');
setTimeout(function() {
if ($game->step < 10) {
say('Вы проиграли');
}
}, $seconds * 1000);
}
попробуй
Макс РейхУченик (58) 1 год назад
а для чего умножать секунды на 1000?
Посада Ядерная Гуру (4769) Макс Рейх, нужно для того чтобы конвертировать секунды в милисекунды
Похожие вопросы