Как я могу определить прошедшее время в Паскале? - PullRequest
4 голосов
/ 11 апреля 2011

Я пытаюсь создать простую игру на Паскале. Он использует консоль. Цель игры - собрать как можно больше «яблок» за 60 секунд. Структура игры представляет собой простой бесконечный цикл. На каждой итерации вы можете сделать один ход. И вот в чем проблема - прежде чем вы сделаете ход (readKey), время может пройти столько, сколько нужно. Например, пользователь может нажать клавишу через 10 секунд! Есть ли способ считать время? Мне нужно, чтобы программа знала , когда пользователь играет (до и после нажатия клавиши), поэтому я не знаю, как предотвратить "обман" пользователя.

Вот простая структура моей игры:

begin
    repeat
        {* ... *}
        case ReadKey of
            {* ... *}
        end;
        {* ... *}
    until false;
end.

Полный код: http://non.dagrevis.lv/junk/pascal/Parad0x/Parad0x.pas.

Насколько я знаю, есть два возможных решения:

  1. getTime (из DOS),
  2. задержка (от ЭЛТ).

... но я не знаю, как использовать их с моей петлей.

1 Ответ

6 голосов
/ 11 апреля 2011

Проверьте эту ссылку .Там может быть некоторая полезная информация для вас.И здесь то же самое, что вы просите.И вот то, что вы ищете (аналогично коду ниже).

var hours: word;
    minutes: word;
    seconds: word;
    milliseconds: word;

procedure StartClock;
begin
  GetTime(hours, minutes, seconds, milliseconds);
end;

procedure StopClock;
var seconds_count : longint;
    c_hours: word;
    c_minutes: word;
    c_seconds: word;
    c_milliseconds: word;

begin
  GetTime(c_hours, c_minutes, c_seconds, c_milliseconds);
  seconds_count := c_seconds - seconds + (c_minutes - minutes) * 60 + (c_hours - hours) * 3600;
  writeln(inttostr(seconds_count) + ' seconds');
end;

begin
  StartClock;

  // code you want to measure

  StopClock;
end.
...