Подсчитайте 3 секунды в цикле - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время я занимаюсь разработкой игры для автогонок на букву «С».У меня есть функция процесса, которая всегда в цикле, пока game_over не будет установлен в true.В функции процесса у меня есть функция, которая проверяет, припаркован ли автомобиль после топливной остановки, после парковки автомобиль останавливается и топливо восстанавливается.

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

Я попытался сохранить текущее время в переменной и добавил «3 секунды» к этому значению, и дождался, пока время достигнет этого, прежде чем продолжить.Это, очевидно, не работает, поскольку цикл постоянно обновляет текущее время.

if (fuel_stop_left() || fuel_stop_right()) {
   fuelRemaining = 10000;
   acceleration = 0;
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Например, вы можете установить таймер на 100 мс.Затем вам нужно будет использовать переменную для подсчета в течение трех секунд и установить флаг.В вашем main() проверьте состояние этого флага и сделайте все, что вы хотите сделать, затем снимите флажок.

Вот простая идея:

unsigned int cnt = 0;
bool isThreeSecs = false;

// Set this interrupt to 100ms
void myTimerInterrupt()
{
  cnt++;
  if (cnt == 30) // 100ms * 30 = 3 secs
  {
    isThreeSecs = true; // Set your flag here
    cnt = 0; // Clear the cnt variable for next use
  }
}

int main()
{
  // Some stuff
  if (isCarStopped()) // Check if the car has stopped
  {
    // Start your timer here and check your flag
    if (isThreeSecs)
    {
      letMeGo();
      isThreeSecs = false; // Clear the flag
    }
  }
}

Реализация может отличаться в зависимости отпо вашему алгоритму.Вы можете захотеть использовать цикл while вокруг проверки isThreeSecs в main(), чтобы не делать ничего, например.Я просто хотел дать вам идею.

0 голосов
/ 29 мая 2018
clock_t begin;
double time_spent;
unsigned int i;

/* Mark beginning time */
begin = clock();
for (i=0;1;i++)
    {
    printf("hello\n");
    /* Get CPU time since loop started */
    time_spent = (double)(clock() - begin) / CLOCKS_PER_SEC;
    if (time_spent>=3.0)
        break;
    }

Этот код должен помочь вам решить вашу проблему, я думаю.Не забудьте #include time.h в начале вашего кода.

...