Иллюстрированный самоучитель по созданию Flash-игр

Список лучших игроков

Затем программа подсчитывает, какое время (в секундах на сервере) было ровно семь дней назад.

#Определяем время на сервере.
$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. Если возможно, постарайтесь с кем-нибудь объединиться.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.