Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1116431908
George
2005-05-18 19:58
2005.07.11
SolidWorks


11-1102838832
DmiSb
2004-12-12 11:07
2005.07.11
Обработка нажатия клавиш в KOLdateTimePicker


14-1118072544
Белолипский Александр
2005-06-06 19:42
2005.07.11
Старший брат нас всех блюдет! ;-)


14-1118049595
I'm
2005-06-06 13:19
2005.07.11
Component s


3-1117090817
Vita-mebel
2005-05-26 11:00
2005.07.11
Все равно не работает поиск в BD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский