Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
ВнизСоздание искусственного времени Найти похожие ветки
← →
!Trinix © (2005-06-10 15:28) [0]Я создаю игру, как The Sims (подробнее на sgstd.nm.ru), со временем у меня полный порядок, но с датой не выходит. Дата у меня принадлежит к типу TDayOfWeek. Когда время становится 24(00) часа, то настает следующий день, но почему-то день не ихменяется и вообще t.Day равняется 0. Помогите, пожалуйста, вот мой код:
procedure Timer
type
TCanTime = 0..59;
TDayOfWeek = 1..7;
TCurTime = record
Minutes : TCanTime;
Hours : TCanTime;
Day : TDayOfWeek;
end;
var
t : TCurTime;
procedure TForm1.Timer_TimeTimer(Sender: TObject);
begin
t.Minutes := t.Minutes + 1;
if t.Minutes > 58 then begin
t.Minutes := 0;
t.Hours := t.Hours + 1;
end;
if t.Hours > 23 then begin
t.Hours := 0;
if t.Day = 1 then t.Day := 2;
if t.Day = 2 then t.Day := 3;
if t.Day = 3 then t.Day := 4;
if t.Day = 4 then t.Day := 5;
if t.Day = 5 then t.Day := 6;
if t.Day = 6 then t.Day := 7;
if t.Day = 7 then t.Day := 1;
end;
LabelHour.Caption := IntToStr(t.Hours);
LabelMinutes.Caption := IntToStr(t.Minutes);
case t.Day of
1 : LabelDay.Text := "пон";
2 : LabelDay.Text := "втр";
3 : LabelDay.Text := "срд";
4 : LabelDay.Text := "чтв";
5 : LabelDay.Text := "пят";
6 : LabelDay.Text := "суб";
7 : LabelDay.Text := "вос";
end;
end;
← →
TUser © (2005-06-10 15:40) [1]Как ты думаешь, что получиться в результате последоватлеьного выполнения вот этих строчек, если t.Day = 1?
> if t.Day = 1 then t.Day := 2;
> if t.Day = 2 then t.Day := 3;
> if t.Day = 3 then t.Day := 4;
> if t.Day = 4 then t.Day := 5;
> if t.Day = 5 then t.Day := 6;
> if t.Day = 6 then t.Day := 7;
> if t.Day = 7 then t.Day := 1;
Подсказка - строчки выполняются действительно последовательно, никакого ветвления или циклов тут нет.
← →
Ega23 © (2005-06-10 15:40) [2]1. if t.Minutes > 58 then begin Может быть 59?
2.
if t.Day = 1 then t.Day := 2
if t.Day = 2 then t.Day := 3;
if t.Day = 3 then t.Day := 4;
if t.Day = 4 then t.Day := 5;
if t.Day = 5 then t.Day := 6;
if t.Day = 6 then t.Day := 7;
if t.Day = 7 then t.Day := 1;
У тебя t.Day ВСЕГДА будет 1. Почему - подумай.
← →
Ega23 © (2005-06-10 15:41) [3]2 TUser © (10.06.05 15:40) [1]
Как ты думаешь, что получиться в результате последоватлеьного выполнения вот этих строчек, если t.Day = 1?
Да даже, если t.Day = 2 или t.Day =7
← →
Ega23 © (2005-06-10 15:44) [4]А вообще t.day:=(t.day+1) mod 7;
← →
TUser © (2005-06-10 15:46) [5]t.Day:=[4]+1;
← →
TUser © (2005-06-10 15:47) [6]Сорри, не то ляпнул.
← →
-=XP=- © (2005-06-10 15:49) [7]Посмотрите в сторону TDateTime и не изобретайте двухколесное транспортное средство.
← →
default © (2005-06-10 15:49) [8]t.day:= (t.day mod 7) + 1
Ega23 © (10.06.05 15:44) [4]
(6 + 1) mod 7 = 0
а должно давать 7
← →
-=XP=- © (2005-06-10 15:50) [9]P.S. Я Ваш "шедевр" распечатал и на стену повесил. :)
← →
Antonn © (2005-06-10 15:51) [10]incDay не переплюнуть:)
← →
TUser © (2005-06-10 15:53) [11]> Ega23 © (10.06.05 15:44) [4]
> default © (10.06.05 15:49) [8]
t.Day:=(t.Day mod 7)+1;
← →
default © (2005-06-10 15:56) [12]TUser © (10.06.05 15:53) [11]
так я это и написал:)
← →
Чапаев © (2005-06-10 16:17) [13]
if Day<High(TDayOfWeek)
then Inc(Day)
else Day:=Low(TDayOfWeek);
← →
Alexander Panov © (2005-06-10 16:18) [14]
type
THH=0..23;
TMM=0..59;
TDD=1..7;
TSyntheticTime=class
private
FDaysWeek: array[1..7] of String;
FDay: TDD;
FHH: THH;
FMM: TMM;
function GetDay: String;
public
constructor Create(aDay: TDD; aHH: THH; aMM: TMM);
procedure NextTime;
property DayOfWeek: String read GetDay;
property DD: TDD read FDay write FDay;
property HH: THH read FHH write FHH;
property MM: TMM read FMM write FMM;
end;
var
Form1: TForm1;
ST: TSyntheticTime;
constructor TSyntheticTime.Create(aDay: TDD; aHH: THH; aMM: TMM);
begin
FHH := aHH;
FMM := aMM;
FDay := aDay;
FDaysWeek[1] :="пон";
FDaysWeek[2] :="втр";
FDaysWeek[3] :="срд";
FDaysWeek[4] :="чтв";
FDaysWeek[5] :="пят";
FDaysWeek[6] :="суб";
FDaysWeek[7] :="вос";
end;
function TSyntheticTime.GetDay: String;
begin
Result := FDaysWeek[FDay];
end;
procedure TSyntheticTime.NextTime;
begin
if FMM=59 then
begin
FMM := 0;
if FHH=23 then
begin
FHH := 0;
if FDay=7
then FDay := 1
else FDay := FDay+1;
end
else FHH := FHH+1;
end
else FMM := FMM+1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ST := TSyntheticTime.Create(1,0,0);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := ST.DayOfWeek+" "+ IntToStr(ST.HH)+":"+IntToStr(ST.MM);
ST.NextTime;
end;
← →
!Trinix © (2005-06-10 16:46) [15]Спасибо, моя вина - сам недосмотрел с прибавлением дня.
Туплю...:)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c