Авторизироваться
Меню сайта
Категории раздела
Для начинающих [16]
С этих статей вырасли все, кто сейчас программирует на MP. Именно с этих статей надо начинать новичку, качество у них не всегда хорошее, но почитать стоит.
Разбираем.Обьясняем [1]
В этой категории обьясняем, разьясняем библиотеки,примеры,мидлеты и т.д.
Прочее [4]
Прочее, что не касается программирования: как настроить MP, что нужно для работы и др...
Наш опрос
Стоит ли на нашем сайте публиковать мобильные новости?
Всего ответов: 190
Мини-чат
210
Статистика

Онлайн : 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Midlet Pascal » Для начинающих

6. Разбираемся с датой и временем.

Скачать в TXT.

Ну вот и настало время разобраться с датой и временем на языке МидлетПаскаль. Для чего это нужно? Ну хотя бы для того, чтоб твоя прога знала который сейчас час и какой год? Вдруг прохожий спросит, а ты ему свою прогу засветишь! :) А вообще дата и время очень часто нужны. Например, если ты читал предыдущие статьи, то ты умеешь работать с ресурсами и музыкой, теперь ты узнаешь работу с датой и временем. Вот уже основа для написания своего будильника. Очень часто в играх приходится работать с временем, определять промежутки между какими-то событиями и, отталкиваясь от этой разницы, прога реагирует. 

Ну хватит разговоров, давай кодить! Создовай новый проект, сразу вводи две переменные типа integer, три текстовые переменные (string), и один массив строковых переменных (array [1..7] of string Здесь массив из семи чисел, для определения дня недели.). Я их назвал так : числовые - Time, DayOfWeek, текстовые - DateText, TimeText, DayText и массив - week. Из этих имён можно понять, для чего они предназначены - для хранения даты, времени, текста и др. 
Теперь переходи в тело программы и присваивай переменной Time функцию GetCurrentTime. Эта функция возвращает текущее время в течение секунд с полуночи первого января 1970. Возвращанная величина ( время в секундах), может быть использована как аргумент для вызова других функций по определению месяца, дня, минут и прочего. Про эти функции мы поговорим ниже. 
Итак, мы получили текущее время, это, как оказалось, ключ ко всем другим значениям. Теперь давай определимся каким образом прога будет оповещать нас. Ну я не стал заморачиваться и просто выводил текст функцией DrawText. А текст будет такой : Дата - ...дальше идёт дата... 
Время - ...дальше идёт время... 
День недели - ...дальше идёт день недели... 
Тепрерь надо получить текущую дату, а делается это вот так: 

DateText :='Дата - ' + GetDay(Time); 
DateText :=DateText + ':' + GetMonth(Time); 
DateText :=DateText + ':' + GetYear(Time); 

Первой строкой мы присваиваем текстовой переменной DateText слово Дата - и добовляем текущий день месяца функцией GetDay(Time). В качестве единственного параметра мы указываем значение переменной Time, полученное ранее. Эта переменная содержит текущее время, и оттталкиваясь от него функция GetDay(Time) выдаёт нам номер дня в месяце, значение колеблется от 1 до 31 (как в нормальных месецах :) ). Следующими двумя строками добовляем к переменной DateText значение месяца и года функциями GetMonth(Time) и GetYear(Time) соответственно. Функции эти идентичны GetDay(Time), только значения возвращают другие. Ну а в качестве разделителя между днём, месецем и годом используем знак двоеточия ":" 
Теперь займёмся текущим временем : 


TimeText := 'Время - ' + GetHour(Time); 
TimeText := TimeText + ':'+ GetMinute(Time); 
TimeText := TimeText + ':' + GetSecond(Time); 

Здесь всё тоже самое, только работа идёт с минутами, часами и секундами. Думаю, ты разберёшься здесь и без моих слов. Перейдём сразу к определению текущего дня недели: 


Week[1]:='Воскресенье'; 
Week[2]:='Понедельник'; 
Week[3]:='Вторник'; 
Week[4]:='Среда'; 
Week[5]:='Четверг'; 
Week[6]:='Пятница'; 
Week[7]:='Суббота'; 
DayOfWeek:=GetWeekDay(Time); 
DayText:='День недели - ' + Week[DayOfWeek]; 

Здесь каждому значению массива присваиваем определённое значение, у нас это название дней недели. Потом, строкой DayOfWeek:=GetWeekDay(Time); , получаем и записываем в числовую переменную номер дня недели. Только функция это европейская, так что и начинается отсчёт дней по европейски с воскресенья, т.е. значение 1 будет означать "воскресенье", а не "понедельник". Ну а дальше записываем в текстовую пременную наш текущий день недели. 
И в конце пиши вот это: 


DrawText(DateText,5,0); 
DrawText(TimeText,5,15); 
DrawText(DayText,5,30); 
Repaint; 
Delay(10000); 

Ну здесь ты и сам всё знаешь : выводим наш текст, перерисовываемся и делаем задержку. Вот и наш сегодняшний пример готов. Исходники забирай здесь. Только я ещё должен хоть немного сказать про таймер, ведь он так нужен для игр. Вот эта функция - function GetRelativeTimeMs: integer; Возвращает она текущее время в течение миллисекунд. Каждые 48 дней, эта величина восстанавливается и начинает считаются с 0. Не используй эту функцию, чтобы определять текущую дату, а используй для осуществления таймеров в приложении. Давай рассмотрим эту функцию на примере игры Tetris. Каждую секунду игра должна перемещать блок вниз или, если пользователь нажал кнопочки, вправо и влево. Вот примерный алгоритм: 


... 
SavedTime := GetRelativeTimeMs; //инициализация таймера 
repeat 
{ отслежка клавиатуры } 
key := GetKeyClicked; 
if KeyToAction(key) = GA_LEFT then moveLeft;//если нажали влево, то двигаем влево 
if KeyToAction(key) = GA_RIGHT then moveRight;//если нажали вправо, то двигаем вправо 

{ проверяем, не прошла ли секунда } 
if ((GetRelativeTimeMs - SavedTime) > 1000) 
or (GetRelativeTimeMs < SavedTime) { учитываем, что таймер сбросится через 48 дней } 
then 
begin 
SavedTime := GetRelativeTimeMs; 
moveDown; //если ничего не нажали, то двигаемся вниз 
end; 
until gameOver;//конец игре :) 
... 


Это очень простой алгоритм, показывающий основы использования таймера. Объяснять я его не буду, из коментариев и так всё понятно. Надеюсь материал тебе понравился. Остальное позже...
Автор: Васючков Андрей aka Soffrick

Скачать в TXT.


Категория: Для начинающих | Добавил: admin (12.11.2008)
Просмотров: 1626 | Комментарии: 2 | Рейтинг: 5.0/1
Всего комментариев: 2
26.08.2009 в 13:32 Спам
У меня время на 3 часа назад показывает((
31.01.2009 в 18:55 Спам
http://www.liveofpc.3dn.ru/forum/12-34-1#123 - по возможности) :)
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]