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