Чтение онлайн

на главную

Жанры

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Розенцвейг Гэри

Шрифт:

Хотя этот раздел не называется "Руководство по программированию на Perl для начинающих", ниже приведены листинги программ Submitscore.pl и Getscores.pl с краткими пояснениями, как работает каждая из их частей. Если вы незнакомы с программами, использующими стандарт CGI, обратитесь за разъяснениями к людям, сведущим в этой области.

Комментарий в языке Perl начинаются с символа #. Программа Submitscore.pl начинается с комментария, который на самом деле используется Web-сервером для определения адреса программы, интерпретирующей сценарии Perl. Нижеприведенный

путь широко распространен и должен работать на вашем сервере. Если возникнут какие-либо проблемы, свяжитесь с вашим Internet-провайдером.

#!/usr/bin/perl

Первая строка текста самой программы начинается с отправки результативных данных обратно во Flash-ролик. Именно за это отвечает выражение Content-type: text/html, за которым следуют две пустые строки. Первая строка любого файла, посылаемого с Web-сервера, сообщает браузеру (в данном случае Flash-ролику) о типе передаваемых данных. В этом примере передаваемые данные – обычный текст.

# Устанавливаем метку для текстового документа, отсылаемого

# назад браузеру.

print "Content-type: text/html\n\n";

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

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

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

# Преобразуем закодированные символы.

$get_data =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C",hex($1))/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} = $value;

}

Текстовой базой данных, где хранятся лучшие

результаты, служит файл 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 присваивается символьная строка OK.

# Закрываем базу данных.

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);

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

# Определяем время на сервере.

$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);

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6