Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Добавление списка лучших игроков в игру
Исходный файл: Whackafoxwithscores.fla
Как пример еще одной игры с использованием списка лучших игроков приведем файл Whackafoxwithscores.fla. Это все та же игра "Поймай лису", которую мы рассматривали в главе 8, но здесь она содержит еще и список лучших игроков.
К этой игре достаточно легко добавить список лучших результатов, потому что она подразделяется на три части. Сцена "Начало игры" была изменена таким образом, что уже при загрузке игры выводится список лучших игроков. Поэтому к стандартной команде stop() в начале первого кадра этой сцены вам понадобится добавить те коды, которые будут отвечать за отображение списка лучших игроков:// Указываем путь к программе getscores.pl.
url = "getscore.pl";
// Запрашиваем данные.
loadVariables (url,this);
// Выводим на экран информацию о том, что по кнопке щелкнули.
highScoresText = "Getting High Scores…";
stop();Текстовое поле под названием highScoresText добавляется посередине экрана (рис. 17.6).
Рисунок 17.6. Теперь при загрузке игры «Поймай лису» на экран выводится список лучших игроковВ конце игры, в сцене «Игра закончена», появляется клип с несколькими текстовыми полями и кнопкой Submit Score. При этом очки, набранные в игре, должна подсчитывать и выводить сама программа. Сама по себе игра управляется действиями, которые относятся к клипу «actions» сцены «Игра». Поэтому переменная score привязана именно к этому клипу, а не к основной временной шкале. После добавления к тексту программы строки _root.score = score в основной временной шкале также появляется переменная score, которой присваивается число набранных очков. Когда приходит очередь сцены "Игра Закончена", первый кадр помещает набранные очки в клип "Добавление результатов". Одновременно удаляется предыдущее значение переменной name этого клипа.
sendscores.name = "";
sendscores.score = score;
stop();На рис. 17.7 показан кадр из сцены «Игра закончена». Здесь вы можете видеть, что клип «Добавление результатов» содержит набранные игроком очки, текстовое поле, куда игрок должен ввести свое имя, и кнопку Submit Score.
Рисунок 17.7 . Последний кадр обновленной игры «Поймай лису» дает игроку возможность записать результат своей игрыИгрок вводит свое имя в первое текстовое поле, в то время как другое поле уже содержит набранные им очки, и он не может изменить результат. После этого игрок может щелкнуть по кнопке Submit Score, которая запустит следующую программу:
on (press) {
// Указываем путь к программе submitscore.pl.
url = "submitscore.pl";
// Отправляем значения переменных:
// "score" – счет игры,
// "name" – имя игрока.
loadVariables(url,this,"GET");
// Меняем кадр, чтобы по кнопке Submit нельзя было
// щелкнуть дважды.
play();
}Набранные очки пересылаются серверу таким же образом, как и в демонстрационном файле Highscores.fla. Отличие заключается в добавлении команды play(), благодаря которой происходит смена кадра. Второй кадр аналогичен первому, за исключением того, что здесь отсутствует кнопка Submit Score. Это сделано для того, чтобы игрок не мог несколько раз щелкать по кнопке, вводя таким образом несколько результатов.
Сложности применения списка лучших игроков
Многие считают, что игра только выигрывает от добавления списка лучших результатов. Однако применение этого списка может вызвать определенные затруднения, которые вы, скорее всего, не приняли во внимание.
Давая игрокам возможность вводить в качестве их имен любую информацию, вы тем самым бесплатно предоставляете им на своем Web-сайте пространство для деятельности. Конечно, большинство игроков введут свое имя или прозвище, но найдутся и те, которые воспользуются случаем написать что-нибудь нехорошее.
Почему бы не проверять Flash-игру или Perl-программу на наличие нецензурных выражений? Вы можете так и поступить, но это не решит проблему окончательно. Одни из игроков могут слегка измененить написание слов либо использовать между ними пробелы или тире, другие абсолютно нормальными словами скажут что-нибудь неприличное. Иначе говоря, совсем избежать неприятных ситуаций, скорее всего, не удастся.
Большие, профессионально сделанные сайты обычно требуют, чтобы перед тем, как сохранить результаты своей игры, пользователь зарегистрировался. Однако система учета очков зарегистрированных игроков гораздо сложнее примеров, которые описываются в этой главе. Для ее внедрения потребуется готовая система баз данных со встроенной системой защиты.
Другая проблема – это жульничество. Как только будут объявлены лучшие результаты, игроки станут искать способы смошенничать. И это достаточно легко сделать. Можно использовать различные методы – от остановки игры в решающий момент, чтобы перевести дух и найти решение в сложившейся ситуации до использования "взламывающих" программ, которые могут считывать информацию из памяти компьютера игрока и записывать новые данные. Таким образом, 42 балла можно легко превратить в 42 миллиона баллов.
Однако, если эти сложности вас не пугают и вы все-таки решили включить в игру список лучших игроков, не ограничивайте свои возможности только описанными здесь приемами. Попробуйте использовать другие языки программирования. Например, PHP – очень популярный язык, схожий с языком Perl. С равным успехом CGI-программы можно создавать на основе более старых и известных языков, таких как C и C++.Определение версии Flash-плагина
Исходный файл: Version.fla
Язык ActionScript во Flash 4 и 5 отличался так сильно, что ролик со сложным сценарием, созданный во Flash 5, скорее всего вообще бы не работал при использовании плеера четвертой версии. Однако Flash MX и Flash 8 достаточно сходны для того, чтобы ролик с кодом, созданным в версии 8, мог достаточно часто работать во Flash MX-плеере.
Это создает интересную проблему. Довольно легко сделать игру во Flash 8, которая будет работать у многих людей с Flash MX-плеером до какого-то момента. Когда же попадется участок кода, требующий Flash 8-плеера, игра или перестанет работать, или начнет вести себя непредсказуемым образом.
Как узнать версию плеера
Необходимо убедиться, что у пользователей установлен плеер шестой версии, прежде чем он начнет игру. Сделать это можно с помощью функции getVersion().
Функция getVersion() возвращает строку вида MAC 6,0 21,0. Первое слово – это аббревиатура платформы, обычно MAC или WIN. Вторая часть – это версия Flash-плеера, в настоящий момент запущенная на пользовательской машине.
Каждая часть номера версии отделена запятыми. Это создает трудности при сравнении имеющейся версии с требуемой. Как вы, например, определите, MAC 6,0 21,0 больше или равно версии 8?
С помощью некоторых операций со строкой вы можете перевести значение, возвращаемое функцией getVersion() во что-нибудь более пригодное к использованию. Следующая функция разбивает строку, используя пробелы и запятые как разделители. Она создает переменную – объект, к которому вы можете легко обращаться.
function getVersionNumber() {
// Определяем позиции запятых и пробелов.
spacePos = getVersion().indexOf(" ");
firstComma = getVersion().indexOf(",");
secondComma = getVersion().indexOf(",",firstComma+1);
thirdComma = getVersion().indexOf(",",secondComma+1);
lastChar = getVersion().length;
// Создаем объект version.
version = new Object();
version.platform = getVersion().substring(0,spacePos);
version.n1 = getVersion().substring(spacePos+1,firstComma);
version.n2 = getVersion().substring(firstComma+1,secondComma);
version.n3 = getVersion().substring(secondComma+1,thirdComma);
version.n4 = getVersion().substring(thirdComma+1,lastChar);
return(version);
}В результате работы getVersionNumber получится примерно следующее:
{platform: MAC, n1: 6, n2: 0, n3: 21, n4: 0}
Таким образом, если вы хотите получить главный номер версии Flash, просто используйте getVersionNumber(). n1.
Требуемые версии
Обычно вам нужно сравнить номер версии с минимальными требованиями, необходимыми для игры. Например, вы можете задать минимальную версию, необходимую пользователю для вашей игры.
Вот функция, которая берет полный номер требуемой версии и сравнивает с номером версии, запущенной в настоящее время на компьютере пользователя. Она возвращает истинное значение только в том случае, если установленная версия больше или равна требуемой.function requiredVersion(required) {
version = getVersionNumber();
// Возвращаем false, если номер версии меньше необходимого.
if (version.n1 < required.n1) return(false);
// Возвращаем true, если номер версии больше необходимого.
if (version.n1 > required.n1) return(true);
// Главные позиции номера совпадают, сравниваем следующие позиции.
if (version.n2 < required.n2) return (false);
if (version.n2 > required.n2) return (true);
if (version.n3 < required.n3) return (false);
if (version.n3 > required.n3) return (true);
if (version.n4 < required.n4) return (false);
if (version.n4 >= required.n4) return (true);
}Вы можете использовать эту функцию так:
if (requiredVersion) ({n1: 6, n2: 0, n3: 21, n4: 0}) {
gotoAndPlay("start");
} else {
gotoAndStop("version problem");
}Если версия пользователя меньше, чем 6.0.21.0, ролик переходит к кадру, который объясняет, что данная игра требует обновления версии плеера.
...Примечание