Выполнить что-то после определенного времени ожидания, указанного в коде на C ++? - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь сделать простую игру со змеями на C ++, я создал базовую сетку с массивами orl [x] и ory [y], и теперь я пытаюсь добавить змею.

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

Мне нужно сделать таймер на C ++, но я не хочу реализовывать ОГРОМНЫЙ код, создавая таймер и ничего не понимая из своего собственного кода. Я хочу, чтобы это было как можно проще.

Есть идеи, как я мог это сделать? Я заглянул в библиотеку заголовков времени, но там не нашел ничего полезного.

Ответы [ 4 ]

1 голос
/ 27 июня 2014

Я добавляю этот ответ, так как в настоящее время ответа на C ++ 11 не существует.

Вы можете выполнять независимое от платформы ожидание, используя std::this_thread::sleep_for

void millisecond_wait( unsigned ms )
{
    std::chrono::milliseconds dura( ms );
    std::this_thread::sleep_for( dura );
}
1 голос
/ 24 февраля 2012

Если вы используете Linux, вы можете использовать "time.h"
Вот быстрая функция для ожидания количества секунд.
Вы можете изменить ее на миллисекунды, если хотите.
ТакжеВы используете библиотеку ncurses?

#include <iostream>
#include <cstdlib>
#include <time.h>

void SleepForNumberOfSeconds(const int & numberofSeconds);

int main(){

    std::cout << "waiting a second.." << std::endl;
    SleepForNumberOfSeconds(1);
    std::cout << "BOOM!" << std::endl;

    std::cout << "waiting 5 seconds.." << std::endl;
    SleepForNumberOfSeconds(5);
    std::cout << "AH YEAH!" << std::endl;

    return EXIT_SUCCESS;
}

void SleepForNumberOfSeconds(const int & numberofSeconds){

    timespec delay = {numberofSeconds,0}; //500,000 = 1/2 milliseconds
    timespec delayrem;

    nanosleep(&delay, &delayrem);

    return;
}
1 голос
/ 24 февраля 2012

Грустная правда в том, что Стандарт C ++ на самом деле не поддерживает этот тип поведения. И Windows, и Posix поддерживают функцию сна, которая позволит вам сделать это. Для решения более высокого уровня вы можете взглянуть на Boost :: Threads.

0 голосов
/ 24 февраля 2012

Если вы используете Windows, проверьте SetWaitableTimer Windows API-вызов.Я не могу привести пример, так как я сейчас нахожусь на iPad, но он делает то, что вам нужно.

Удачи!

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