2011-04-11 58 views
4

我正在尝试在Pascal中创建一个简单的游戏。它使用控制台。游戏的目标是在60秒内收集尽可能多的“苹果”。游戏结构是一个简单的无限循环。每次迭代,你都可以做出一个动作。这就是问题所在 - 在你进行移动之前(readKey),时间可以尽可能多地传递。例如,用户可以在10秒后按下一个键!有什么方法可以计算时间吗?我需要的程序知道用户播放(按键之前和之后),所以我不知道如何防止用户“作弊”。如何检测Pascal中的流逝时间?

这里是我的游戏结构简单:

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

全码:http://non.dagrevis.lv/junk/pascal/Parad0x/Parad0x.pas

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

  1. 的getTime(从DOS),
  2. 延迟(从CRT)。

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

回答

6

检查this link。可能会为您提供一些有用的信息。和here is一样,你要求。和here's你在找什么(与下面的代码相同)。

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.