2011-04-11 55 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.