Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 16:01   #1
Timon779
Пользователь
 
Регистрация: 01.03.2010
Сообщений: 24
По умолчанию Как поставить таймер в паскале?

Нужен таймер, который будет отсчитывать, сколько длится игра. Есть вот такой
Код:
Unit Timer;
interface
procedure Start (var T:longint); {longint-öåëîå 32 áèòíîå ÷èñëî ñî çíàêîì}
procedure Stop (var T:longint);
procedure Pause (T:longint; Show:boolean); {ðàçðåøåíèå èëè çàïðåò âûâîäà}
                                           {íà ýêðàí}
Implementation
SystemTimer:longint absolute $0040:$006C;
procedure Start(var T:longint);
begin
   T:=SystemTimer;
end;
procedure Stop (var T:longint);
begin
 T:=SustemTimer-T;
end;
procedure Pause (T:longint; Show: boolean);
var Xn, Xt:longint;
begin
   Xt:=0;
   Xn:=SystemTimer;
   While((Xt-Xn)/18.2)*1000<T do
   begin
      Xt:=SystemTimer;
      If Show then
      writeln((xt-xn)/18.2:6:4)
      end;
   end;
end.
и запускающее его приложение
Код:
program TimerPrimer;
uses Timer;
Var
   i: integer;
   a: Real;
   Time:longInt;
begin
   Randomize;
   Start(Time);
   For i:=1 to 30000 do
   a:=Sin(sqrt(i))*Cos(sqrt(Random(10000)));
   Stop(Time);
   Writeln('Âðåìÿ âûïîëíåíèÿ: ',Time/18.2:6:4);
   Readln;
   Pause(10000,True);
end.
Только вот строка
Код:
SystemTimer:longint absolute $0040:$006C;
не компилируется, потому что windows xp не допускает прямого доступа к аппаратным часам. Как это обойти?
Timon779 вне форума Ответить с цитированием
Старый 10.06.2010, 16:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

В просто получить в начале игры дату и время, и получить в конце игры дату время уже не в моде?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2010, 16:51   #3
Timon779
Пользователь
 
Регистрация: 01.03.2010
Сообщений: 24
По умолчанию

ну дата там не нужна) там нужно, чтобы когда запускается игра начинался отсчёт времени и если игрок добирается до финиша или же где-то проваливается, время останавливалось. Потому что потом по этим результатам надо будет статистику победителей делать. Нужно чтобы во время игры маленькие цифровые часы сверху показывали, сколько времени прошло с начала игры
Timon779 вне форума Ответить с цитированием
Старый 10.06.2010, 16:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну тогда в цикле игры поставь запоминание времени. Функция Time вроде еще существует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2010, 17:56   #5
Timon779
Пользователь
 
Регистрация: 01.03.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну тогда в цикле игры поставь запоминание времени. Функция Time вроде еще существует.
спасибо, посмотрю что за функция
Timon779 вне форума Ответить с цитированием
Старый 10.06.2010, 20:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Код:
SystemTimer:longint absolute $0040:$006C;
не компилируется, потому что windows xp не допускает прямого доступа к аппаратным часам. Как это обойти?
позвольте полюбопытствовать - а не компилируются ГДЕ?! (Каким компилятором Вы пытаетесь откомпилировать ?)
Дело в том, что эта строчка в ДОС Turbo Pascal (именно под Windows XP ) прекрасно компилируется!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2010, 21:42   #7
Timon779
Пользователь
 
Регистрация: 01.03.2010
Сообщений: 24
По умолчанию

rкомпилирую FREE Pascal IDE, он у меня пишет
Код:
TIMER.PAS (9,12) Error: Identifier not found "SystemTimer" 
TIMER.PAS (9,12) Fatal: Syntax error, ";" expected but ":" found
а запускающий его TimerPrimer пишет:
Код:
"BEGIN" expected but "identifier SYSTEMTIMER" found
Предположение о том, что это хр не допускает программу к аппаратным часам я взял отсюда http://faqs.org.ru/forum/viewtopic.php?t=7387
Timon779 вне форума Ответить с цитированием
Старый 10.06.2010, 22:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
компилирую FREE Pascal IDE
понятно. это в нём проблема...
кстати, это, вероятно версия под Win32 ?! (дистрибутив назывался fpc-2.4.0.i386-win32.exe ?!

или всё же DOS версия? (дистрибутив dos240xxxx.zip) ?

Если DOS версия, то, 1) должно и absolute сойти
2) может пройти такой код:
Код:
var
  h, m, s, hund : Word;
begin
  GetTime(h,m,s,hund);
...
если же версия Win32
то пробуйте такой код:
Код:
  var DT : TDateTime;
begin
  DT := Time;
...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2010, 13:51   #9
Timon779
Пользователь
 
Регистрация: 01.03.2010
Сообщений: 24
По умолчанию

У меня тот, что 2.4.0 Сейчас вот переписал, но всё равно опять не компилируется
Код:
Unit Timer;
interface
procedure Start (var DT:TimeDate); {longint-öåëîå 32 áèòíîå ÷èñëî ñî çíàêîì}
procedure Stop (var DT:TimeDate);
procedure Pause (DT:TimeDate); Show:boolean); {ðàçðåøåíèå èëè çàïðåò âûâîäà}
                                           {íà ýêðàí}
Implementation
begin
DT := Time;
procedure Start(var DT:TimeDate);
end;
procedure Stop (var DT:TimeDate);
begin
 T:=SystemTimer-T;
end;
procedure Pause (DT:TimeDate; Show: boolean);
var Xn, Xt:TimeDate;
begin
   Xt:=0;
   Xn:=SystemTimer;
   While((Xt-Xn)/18.2)*1000<T do
   begin
      Xt:=SystemTimer;
      If Show then
      writeln((xt-xn)/18.2:6:4)
      end;
   end;
end.
Timon779 вне форума Ответить с цитированием
Старый 11.06.2010, 14:00   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
но всё равно опять не компилируется
а что пишет?!


Цитата:
Код:
TimeDate
а откуда Вы взяли такой тип данных?!
: TDateTime пробовали?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в С квадрат поставить? Ol'ga Общие вопросы C/C++ 10 31.10.2010 10:31
Как поставить cppunit? mike_tihomirov Общие вопросы C/C++ 0 20.04.2010 16:05
Как поставить оповещение в Access? xruss Microsoft Office Access 11 05.12.2008 10:27
Подскажите, как поставить 2 ОС Красавчег))) Операционные системы общие вопросы 24 15.01.2008 21:28
Как атрибут поставить delphin100 Общие вопросы Delphi 9 14.01.2008 23:15