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

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

Затем данные из Flash-ролика передаются в программу, где для их временного хранения используется переменная $get_data:

#Получаем переданные данные.
  
$get_data = $ENV{'QUERY_STRING'};

Когда данные пересылаются через сеть, они обычно кодируются таким образом, чтобы не допустить их некорректную передачу. Буквы не кодируются в отличие от пробелов, которые передаются как знак "+", и небуквенно-цифровых символов, передающихся как символьные последовательности, например:

%OA

Чтобы раскодировать данные, необходимо дополнить программу следующими строками:

#Преобразуем закодированные символы.
  
$get_data =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C",hex($l))/eg; #get_data =~ tr/\+/ /;

Далее нужно получить текущее время, измеренное на Unix-сервере в секундах, прошедших с 01.01.1970. Эти данные вы будете использовать как то время, когда был получен результат. Лучше оперировать именно этим показателем, а не временем, которое показывает сам Flash-ролик: игроки могут находиться в разных часовых поясах, а у некоторых из них может быть неправильно установлено время на их компьютерах.

# Вносим в базу данных время, оказываемое сервером, в секундах. 
$server_time = time();

Следующий шаг – организация цикла, который берет последовательность символов, хранящуюся в переменной $get_data, и разделяет ее на части. Например, такая последовательность имеет вид: name=Gary&score=967. Она разделяется на два элемента: до и после символа &, а затем каждый из этих элементов подразделяется еще на два – на ключ и на значение, теперь уже благодаря символу =.

# Обрабатываем полученные данные и создаем массив.
@split_data = split("&",$get_data);
foreach $data_item (@split_data)
{
    ($key, $value) = split("=",$data_item)
    $info{$key} = Svalue;
}

Текстовой базой данных, где хранятся лучшие результаты, служит файл Highscore.txt. Чтобы запустить этот файл, загрузите его и настройте таким образом, чтобы с помощью программ на языке Perl можно было вводить в него информацию. Для этого предназначены следующие кодовые строки:

#Определяем имя файла, который будет содержать базу данных.
$filename = "highscore.txt";
#Открываем базу данных.
open(OUTFILE, ""$filename") || exit;

После того как файл будет открыт, программа внесет в него единичные записи, содержащие набранные очки, имя игрока и время, например:

967&Gary&978887513.
#Вносим информацию в базу данных.
  
print OUTFILE "$info{'score'}&$info{'name'}&$server_time\n";

Программа Submitscore.pl заканчивает свою работу, закрывая текстовый файл и пересылая определенную информацию во Flash. В данном случае переменной resultText присваивается символьная строка ОК.

#Закрываем базу данных.
Close(OUTFILE);
#Подтверждаем ввод данных,
print "resultText=OK\n";
#Завершаем программу,
exit;

Программа Getscores.pl несколько сложнее, чем Submitscore.pl. В ее задачу входит просмотр базы данных, удаление устаревших записей и затем выдача списка десяти лучших результатов. Начало этой программы аналогично началу Submitscore.pl. Далее файл открывает базу данных и перебирает все ее записи с использованием переменной типа "массив" @score_text.

#!/usr/bin/perl
#Устанавливаем метку для текстового документа, получаемого на выходе.
print "Content-type: text/html\n\n";
#Указываем имя файла, содержащего базу данных.
$filename = "highscore.txt";
#Просматриваем записи базы данных,
open(DATABASE, $filename) || exit;
@score_text = database;
close(DATABASE);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.