Всем привет! Снова добрался до блога и решил что-нибудь отписать! Этим что-нибудь я хочу сделать то, как я провел пару последних недель. Эти две недели были жесткими в плане того, что готовили игру FFQ на 09.10.2010 и к этому всему я разрабатывал движок для контроля игрового процесса – бессонные ночи, нераздупленное утро и очень длинный день! Надеюсь, многие играли когда-нибудь в городские квесты на машинах или пешком, где толпа обезбашенных людей бегает по улицам, заводам, заброшенным домам, под мостами и даже плавают в море в очень холодную пору в поисках кода. Если да, то вы должны понимать о чем я, а если же нет, то гугл в помощь и срочно искать организаторов в Вашем городе! В итоге всех усилий, игровой движок прошел боевое крещение со всего одним вылезшим багом во время игры, который очень оперативно был мною устранен. Вот что у меня получилось:
К слову, это мой первый проект, который оптимизируется под пользование мобильными устройствами в большинстве своем. Чем можно с этого поделиться? Я думаю, я знаю, опишу одну функцию, которая позволяет отсчитать оставшееся время до какой-нибудь даты. Эта функция, конечно, после самого игрового класса с его методами, пожалуй, самая главная. Причем она участвует в работе игрового класса тоже. Ведь вся игра отталкивается от времени, она лимитирована временем и с помощью времени можно вести статистику команд. Вот собственно сам код:
<?
function TimeLeft($bedin_date,$begin_time){
// Вычисляем сколько дней осталось до дня Х
$dayhour = substr($bedin_date,8,2)-date(d)-1;
// Переводим дни в часы
$dayhour = $dayhour*24+substr($begin_time,0,2);
// Расчет оставшихся минут
$dayminute = substr($begin_time,3,2);
// Оставшиеся секунды
$daysecond = substr($begin_time,6,2);
// Записываем в переменные $now_h, $now_m, $now_s часы, минуты, секунды
соответственно реального вермени
$now_h = 23-date(H);
$now_m = 60-date(i);
$now_s = 60-date(s);
// Добавляем ведущие нули к часам, минутам и секундам, если таковые
требуются
$dayhour = Ich($dayhour+$now_h);
$dayminute = Ich($dayminute+$now_m);
$daysecond = Ich($daysecond+$now_s);
// Если минуты перевалили за 60 или равны 60ти, то вычитаем из минут 60,
а к часам добавляем 1.
if($dayminute>=60){
$dayhour = $i->Ich($dayhour+1);
$dayminute = $i->Ich($dayminute-60);
// Проверяем на истечение срока
if($dayhour<0){
echo '<h2>Время уже прошло!</h2>';
}
else{
// выводим строку "Осталось: 00ч. 00мин. 00сек."
echo '<h2>Осталось:
'.$dayhour.'ч. '.$dayminute.'мин. '.$daysecond.'сек.</h2>';
}
}else{
// Проверяем на истечение срока
if($dayhour<0){
echo '<h2>Время уже прошло!</h2>';
}
else{
// выводим строку "Осталось: 00ч. 00мин. 00сек."
echo '<h2>Осталось:
'.$dayhour.'ч. '.$dayminute.'мин. '.$daysecond.'сек.</h2>';
}
}
}
?>
*Одна пометочка, функция рассчитывает оставшееся время в течение месяца, не больше. Для того, чтобы рассчитать время в течение года, функцию нужно немного модифицировать, думаю, исходя из примера это не составит большого труда.
Если вы заметили, то в этом коде присутствует еще одна функция, Ich();. Ее роль очень мала, но достаточно велика. Для правильной работы функции TimeLeft(); и для верной синхронизацией с базой данных, от даты требуется формат 0000-00-00, а от времени 00:00:00. Так вот если с датой проблем не возникло, то с временем возникли. Если уже смотрели код, то должны были увидеть использование substr();, что и является проблемой из-за статических параметров. Задача была такова - date("H:i:s") не выводил время в формате, указанном в спецификации этой функции, что приводило к неправильной работе функции TimeLeft();, гуглил, ничего не нарыл, а просто дописал еще одну функцию Ich(); Вот код:
<?
function Ich($str){
$var = strlen($str);
if($var===1){
$str = '0'.$str;
return $str;
}
elseif($var===2){
return $str;
}
elseif($var>2){
return $str;
}
}
?>
Кстати, если кому понравился плагин, для того чтобы выводить в статье код с подсветкой синтаксиса, нашел я его тут.
Вобщем думаю Вам понадобится, с уважением Я:)
Знаете ли вы?
Что люди тоже звери. Однако, мы единственные из них, кто можем совокупляться лицом к лицу.