Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Нужен таймер, который будет отсчитывать, сколько длится игра. Есть вот такой
Код:

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('&#194;&#240;&#229;&#236;&#255; &#226;&#251;&#239;&#238;&#235;&#237;&#229;&#237;&#232;&#255;: ',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,842
Репутация: 6832
По умолчанию

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

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

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

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

Цитата:
Код:

SystemTimer:longint absolute $0040:$006C;

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

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
Сообщений: 24,613
Репутация: 5352
По умолчанию

Цитата:
компилирую 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
Репутация: 10
По умолчанию

У меня тот, что 2.4.0 Сейчас вот переписал, но всё равно опять не компилируется
Код:

Unit Timer;
interface
procedure Start (var DT:TimeDate); {longint-&#246;&#229;&#235;&#238;&#229; 32 &#225;&#232;&#242;&#237;&#238;&#229; &#247;&#232;&#241;&#235;&#238; &#241;&#238; &#231;&#237;&#224;&#234;&#238;&#236;}
procedure Stop (var DT:TimeDate);
procedure Pause (DT:TimeDate); Show:boolean); {&#240;&#224;&#231;&#240;&#229;&#248;&#229;&#237;&#232;&#229; &#232;&#235;&#232; &#231;&#224;&#239;&#240;&#229;&#242; &#226;&#251;&#226;&#238;&#228;&#224;}
                                           {&#237;&#224; &#253;&#234;&#240;&#224;&#237;}
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
Сообщений: 24,613
Репутация: 5352
По умолчанию

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


Цитата:
Код:

TimeDate

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


22:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru