Список лучших игроков
Затем программа подсчитывает, какое время (в секундах на сервере) было ровно семь дней назад.
#Определяем время на сервере. $server_time = time(); #Выясняем, как долго сохранять полученные результаты. #(7 дней * 24 часа * 60 минут * 60 секунд) $keep_time = 7 * (24 * 60 * 60);Теперь база данных открыта и готова для записи. Старый файл перезаписывается с учетом новых данных.
#Открываем базу данных для перезаписи. open(DATABASE, ">". $filename) || exit;Следующий цикл проверяет каждую запись и определяет, как давно она была внесена в базу данных. Если запись устарела, то она не переписывается в новый файл.
#Просматриваем каждую запись. foreach $score_line (@score_text) { #Получаем данные о набранных очках. @score_item = split(/&/, $score_line); #Определяем время занесения результата. $score_time = $score_item[2]; #Если запись не устарела, переписываем ее в новый файл. if ($score_time > ($server_time - $keep_time)) { print DATABASE "$score_Iine"; # Закрываем базу данных. close(DATABASE);Далее программа сортирует результаты игры. Так как в начале каждой строки базы данных содержатся набранные очки, именно по ним упорядочиваются записи, от лучшего результата игры к худшему.
# Упорядочиваем набранные очки. @score_text = sort { $b < › $a } @score_text;Следующий цикл отбирает первые десять результатов и выдает их как выходные данные. Каждый элемент строки специальным образом форматируется. Эта строка выглядит, например, следующим образом: "1.Gary 967". После номера строки ставится точка. Затем идет имя игрока: если оно содержит меньше 18 символов, оставшееся место заполняется пробелами. Далее выводятся набранные игроком очки – они выравниваются по правому краю, и если число цифр меньше девяти, то свободные места с левой стороны также заполняются пробелами.
#Определяем число результатов, #которые программа отошлет как выходные данные. $num_scores = 10; $score_count = 1; #Просматриваем первые записи и отправляем данные, print "highScoresText="; foreach $score_line (@score_text) { #Прочитываем записанные данные и создаем массив. @split_data = split("&", $score_line); #Выводим номер строки с точкой после него. printf("%2i. ", $score_count); #Выводим имя игрока, выравниваем по левому краю, оставшиеся свободные места до 18 символов заполняем пробелами, printf("%-18s ", $split_data[l]); #Выводим набранные очки, выравниваем по правому краю, оставшееся слева место до девяти символов заполняем пробелами. printf("%9i\n", $split_data[0]); $score_count++; if ($score_count> $num_scores) { last; } } # Выходим из программы, exit;Если вы прежде программировали только на Flash и никогда раньше не сталкивались с Perl, вам будет достаточно сложно писать программы на этом языке. Можете не беспокоиться по этому поводу, потому что обычно подобные проекты разрабатываются двумя программистами совместно: один из них владеет языком Flash, другой – Perl. Если возможно, постарайтесь с кем-нибудь объединиться.
