Изменение даты и времени в игре.
В сегодняшней статье мы попытаемся создать процедуру, которая возьмет на себя всю функциональность по расчету и изменению даты и времени в игре или другой делфи программе. Особенно это пригодится создателям экшенов и игр на псевдографике. Все, что Вам останется сделать после этого – это вызывать нашу процедуру в нужном месте с нужными параметрами.
И так, начнем. Первое, что необходимо сделать, это в разделе Var объявить такие переменные:
Var
Zaderzhka, ZaderzhkaMax, Sekonds, Minutes,
Hour, Chislo, Mesyats, God:integer;
Давайте рассмотрим наши переменные по подробней. Первые две переменные отвечают за задержку времени (текущую и максимальную). Эта задержка необходима, так как наш таймер может работать с любой частотой, которая может быть от тысяч раз в секунду до одного раза в тысячу секунд.
Далее идут переменные, которые будут в себе содержать секунды, минуты и часы нашего игрового или настоящего времени. После идут переменные, относящиеся к дате – число, месяц и год. Я думаю, сложного здесь ничего нет, поэтому заострять свое внимание мы не будем на этом.
Далее присваиваем нашим переменным начальные значения, с которых будет начинаться отчет времени и даты. Грубо говоря – это инициализация. Провести ее можно или по нажатию на кнопку или же в событии формы FormCreate:
Zaderzhka:=10;
ZaderzhkaMax:=10;
Sekonds:=10;
Minutes:=50;
Hour:=7;
Chislo:=12;
Mesyats:=9;
God:=1996;
Инициализация вполне может выглядеть и так. А далее начинаем писать нашу основную процедуру, так как эап подготовки к этому уже закончен:
procedure TikTak(var Zaderzhka,ZaderzhkaMax,Sekonds,Minutes,Hour,
Chislo,Mesyats,God:integer);
begin
Zaderzhka:=Zaderzhka-1;
if Zaderzhka=0 then
begin
Sekonds:=Sekonds+1;
if Sekonds>59 then
begin
Sekonds:=0;
Minutes:=Minutes+1;
end;
If Minutes>59 then
begin
Minutes:=0;
Hour:=Hour+1;
end;
if Hour>23 then
begin
Hour:=0;
Chislo:=Chislo+1;
end;
if ((Mesyats=1) and (Chislo>31))
or ((Mesyats=2) and (Chislo>29) and (God div 4=0) )
or ((Mesyats=2) and (Chislo>28) and (God div 4<>0) )
or ((Mesyats=3) and (Chislo>31))
or ((Mesyats=4) and (Chislo>30))
or ((Mesyats=5) and (Chislo>31))
or ((Mesyats=6) and (Chislo>30))
or ((Mesyats=7) and (Chislo>31))
or ((Mesyats=8) and (Chislo>31))
or ((Mesyats=9) and (Chislo>30))
or ((Mesyats=10) and (Chislo>31))
or ((Mesyats=11) and (Chislo>30)) then
begin
Chislo:=1;
Mesyats:=Mesyats+1;
end;
if (Mesyats=12) and (Chislo>31) then
begin
Mesyats:=1;
God:=God+1;
end;
Zaderzhka:=ZaderzhkaMax;
end;
end;
В данном алгоритме мы с каждым вызовом уменьшаем значение задержки. Как только она станет равна нулю, тогда начинается расчет даты и времени. Если секунды или минуты становятся больше 59, то переход на следующий уровень времени идет. А в дате каждый месяц отдельно обрабатывается, так как все зависит от количества дней в месяце и высокосный год или нет. На последок в таймере или другом месте просто вызываете созданную ранее процедуру так:
TikTak(Zaderzhka,ZaderzhkaMax,Sekonds,Minutes,Hour,Chislo,Mesyats,God);
Надеюсь, статья будет для Вас полезной. Всем пока и удачи в Ваших начинаниях.
Автор: Соколов Виталий
Источник: delgame.at.ua
|