#!/usr/bin/perl
# Устанавливаем метку для текстового документа,
# получаемого на выходе.
print "Content-type: text/html\n\n";
# Указываем имя файла, содержащего базу данных.
$filename = "highscore.txt";
# Просматриваем записи базы данных.
open(DATABASE,$filename) || exit;
@score_text =
Затем программа подсчитывает, какое время (в секундах на сервере) было ровно семь дней назад.
# Определяем время на сервере.
$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_line";
}
}
# Закрываем базу данных.
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[1]);
# Выводим набранные очки, выравниваем по правому краю,
# оставшееся слева место до девяти символов заполняем
# пробелами.
printf("%9i\n",$split_data[0]);
$score_count++;
if ($score_count > $num_scores) { last; }
}
# Выходим из программы.
exit;Если вы прежде программировали только на Flash и никогда раньше не сталкивались с Perl, вам будет достаточно сложно писать программы на этом языке. Можете не беспокоиться по этому поводу, потому что обычно подобные проекты разрабатываются двумя программистами совместно: один из них владеет языком Flash, другой – Perl. Если возможно, постарайтесь с кем-нибудь объединиться.
Демонстрация списка лучших игроков
Исходный файл: Highscores.fla
На Web-сайте надо разместить две программы, с помощью которых и будет формироваться список лучших игроков. Первая программа представляет собой демонстрационный ролик, показывающий, как набранные очки заносятся в базу данных и как они затем из нее извлекаются.