如何检测Pascal中的经过时间?

daG*_*vis 4 console time pascal infinite-loop

我正在尝试用Pascal创建一个简单的游戏.它使用控制台.游戏的目标是在60秒内收集尽可能多的"苹果".游戏结构是一个简单的无限循环.每次迭代,你都可以一举一动.这就是问题 - 在你做出移动之前(readKey),时间可以按照自己的意愿传递.例如,用户可以在10秒后按键!有没有办法计算时间?我需要程序知道用户何时播放(按下按键之前和之后),所以我不知道如何防止用户"作弊".

这是我游戏的简单结构:

begin
    repeat
        {* ... *}
        case ReadKey of
            {* ... *}
        end;
        {* ... *}
    until false;
end.
Run Code Online (Sandbox Code Playgroud)

完整代码:http://non.dagrevis.lv/junk/pascal/Parad0x/Parad0x.pas.

据我所知,有两种可能的解决方案:

  1. getTime(来自DOS),
  2. 延迟(来自CRT).

...但我不知道如何在循环中使用它们.

小智 7

检查此链接.可能会为您提供一些有用的信息.而这里是你问的是相同的.这就是你要找东西(和下面的代码一样).

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.
Run Code Online (Sandbox Code Playgroud)