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

на главную - закладки

Жанры

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

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

Шрифт:
...

Примечание

Функция Key. getAscii возвращает код нажатой клавиши. Она может использоваться внутри функции onClipEvent (keyUp), примененной к клипу.

onClipEvent (keyUp) {

_root.makeGuess(Key.getAscii);

}

К сведению

В конце ролика нужно вставить кадры «win» и «lose», к которым игра будет переходить при ее завершении. В ролике Hangman.fla эти кадры статичные, но вы можете добавить какую-либо анимацию в любой из них. Например, анимация «win» может показывать, что лису отпускают, в то время как анимация «lose» может демонстрировать что-нибудь устрашающее.

Другие возможности

В этом примере фраза жестко запрограммирована в функции initGame. Однако можно загружать текст из внешних источников (как это сделать, вы узнали из предыдущих разделов этой главы),

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

Если вы хотите включить в игру знаки пунктуации, следует изменить код, чтобы в начале игры кроме пробелов программа автоматически отображала и эти знаки. С помощью функции isAlpha можно проверить, является ли символ буквой, и если нет, то сразу его показать.

Криптограмма

Исходный файл: Cryptogramfla

Криптограмма – это довольно распространенный вариант головоломки из слов, которая зачастую бывает труднее, чем игра в виселицу. Если вы никогда не видели ничего подобного, загляните в раздел кроссвордов в вашей местной газете. Скорее всего, рядом с ежедневным кроссвордом вы найдете и криптограмму.

В криптограмме предложение или высказывание зашифровано с помощью самой простой технологии: каждая буква алфавита заменена какой-нибудь другой буквой. Например, "Привет" может быть "Бнефид", где Б заменяет П, Н заменяет Р, Е заменяет И, Ф заменяет В, И заменяет Е и Д заменяет Т.

...

Примечание

Странность криптограмм в том, что чем они длиннее, тем легче их расшифровать. Обычно процесс начинают с поиска слов, состоящих из одной буквы, они могут значить "и" и "в", двухбуквенных слов, часто это "на", "по". Если фраза начинается с трехбуквенного слова, это может быть "что".

Задача проекта

Криптограмму обычно решают с помощью карандаша и бумаги. Компьютер сильно облегчает разгадку такой головоломки. В бумажной версии игры, если игрок отгадал, что 3 означает Е, он должен найти все 3 и заменить их на Е. Если же он или она свое мнение поменяет, все Е придется стереть.

Игра делает это автоматически. Когда игрок задает, что 3 соответствует Е, все 3 в головоломке немедленно заменяются на Е. Если же игрок потом изменяет свое решение, все 3 легко могут быть заменены на А.

Подход

В игре используются две карты букв. Первая карта букв ставит в соответствие каждую букву алфавита ее зашифрованному двойнику. Вот, например, такая карта

ОПФКТИЭШСЕЙГРМЛАБН3ДЯВЩЧЦЖХЪЮЬЁЫУ.

В этой карте первая буква алфавита, А, закодирована как О. Вторая буква, Б, закодирована как П и так далее. С помощью этой карты "Как дела закодировано как «Гог тиро». Вторая карта букв – та, с помощью которой игрок расшифровывает головоломку. Она начинается так:

АБВГДЕЁЖ3ИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.

Когда игрок расшифровывает одну из букв, его карта букв изменяется. Например, он решает, что Г соответствует К, тогда карта играющего примет такой вид:

АБВКДЕЙЖ3ИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.

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

В этой игре пользователь может двигаться вперед и назад по буквам головоломки, используя клавиши со стрелками. Когда он нажимает клавишу с буквой, в карте букв выбранная буква заменяется на ту, клавиша которой нажата.

На рисунке 12.6 показана игра в процессе. Верхние буквы – это те, которые пользователь уже расшифровал. Нерасшифрованные буквы показаны звездочками. Нижние буквы – это зашифрованная фраза. Только верхние буквы меняются по мере разгадывания игроком головоломки.

Рисунок 12.6. В криптограмме нижние буквы – это зашифрованное послание, а верхние буквы меняются в зависимости от выбора игрока. Последняя буква в первой строке выделена полужирным шрифтом, поскольку это буква, которая только что выбрана

Подготовка ролика

На экране только два активных элемента, и то это два почти идентичных динамических текстовых поля. Первое, называющееся decryptedText, связано с переменной decrypted, оно чуть повыше чем второе, названное encryptedText и связанное с переменной encrypted. Шрифт второго поля также чуть светлее.

Оба текстовых поля используют шрифт Courier New, поэтому все буквы

занимают одинаковое место, как в игре "Виселица".

Создание кода

Необычность этого ролика в том, что весь код помещается в сценарии одного кадра. Весь целиком. Нет ни единой кнопки или клипа. Библиотека этого ролика совершенно пуста.

Сценарий кадра начинается с вызова функции initGame. Она задает фразу и создает карту букв. Карта букв игрока вся состоит из звездочек, обозначающих каждую букву. Результатом должны стать звездочки вместо каждой буквы в расшифрованном текстовом поле.

Карта расшифровки, названная letterMap, задается вызовом функции createLetterMap. Вы также можете видеть еще не написанные функции showPhase и showCursor. Первая обновляет текстовое поле на экране, используя последнюю версию карт букв. Вторая выделяет только что выбранную букву полужирным шрифтом. Переменная charpos представляет, какая буква выбрана.

...

Примечание

Листенеры – это новое добавление версии Flash МХ. Листенер сообщает Flash, что событие произошло, и пора включать набор команд или функцию. Код может создать листенер, определив сначала стандартный объект. Событие, за которым должен следить листенер, в данном случае onKeyUp, задано так, что связано с функцией. Потом команда addListener присоединяет этот объект к объекту Flash, в данном случае объекту Key. Только определенные Flash объекты могут иметь листенеры, и эти листенеры могут быть использованы только для определенных событий, связанных с этими объектами. Например, листенер Key может следить только за событиями onKeyUp и onKeyDown.

В конце функции initGame создается листенер (прослушиватель) клавиатуры, который удостоверяется, что функция getLetter вызывается всякий раз, как игрок нажал клавишу.

initGame;

stop;

function initGame {

// Используемая фраза.

phrase = "Imagination is more important than knowledge. – Albert Einstein";

// Определяем переменные.

createLetterMap;

userMap = "**************************";

charpos = 0;

// Показываем курсор и фразу.

showPhrase;

showCursor;

// Отслеживаем нажатие клавиши.

keyListener = new Object;

keyListener.onKeyUp = getLetter;

Key.addListener(keyListener);

}

Чтобы создать случайную карту букв, нужно просто перебрать все буквы и приписать новую, случайную букву к каждой букве алфавита. Однако это не так просто. Вам нужно быть уверенным не только в том, что вы взяли какую-нибудь букву, но также и в том, что раньше вы ее не брали. Например, вы не хотите приписать Р как к А, так и к Б.

Следующая сложность появляется, когда вы осознаете, что не хотели бы обозначить букву как саму себя. Таким образом, например, если Г обозначает Г, вы должны выкинуть эту карту и сделать новую.

Функция createLetterMap отрабатывает цикл, пока не найдет пригодную карту букв. Обычно это происходит с первой или со второй попытки.

// Создаем случайную строку.

function createLetterMap {

do { // Повторяем, пока не будет найдена корректная карта.

letterMap = "";

for (var i=0;i<26;i++) {

do { // Повторяем пока не выбрана буква

r = Math.floor(Math.random*26); //Случайное число.

c = String.fromCharCode(r+65); //Конвертируем в букву.

} while (letterMap.indexOf(c) > -1);

letterMap += c;

}

// Проверяем верность карты.

bad = false;

for(var i=0;i<26;i++) {

if (letterMap.charCodeAt(i) == i+65) {

bad = true; // Буква в разрешенной позиции.

break;

}

}

} while (bad);

}

Функция showPhrase просматривает фразу. Она прогоняет каждую букву через letterMap, чтобы получить зашифрованное значение. 3атем она прогоняет каждую зашифрованную букву через userMap, чтобы придать текущее, определенное пользователем, значение. Если знак является не буквой, а пробелом или знаком препинания, он показывается без зашифровки.

function showPhrase {

encrypted = "";

decrypted = "";

for (var i = 0; i<phrase.length; i++) {

// Значение буквы в этой позиции.

c = phrase.toUpperCase.charAt(i);

if ((" .-,’").indexOf(c)>-1) {

// Задаем пустое место.

encrypted += c;

decrypted += c;

} else {

// Используем карту для поиска зашифрованной буквы.

encryptedChar = letterMap.charAt(c.charCodeAt(0)-65);

encrypted += encryptedChar;

// Используем вторую карту для поиска расшифрованной

// буквы.

decryptedCharacter = userMap.charAt(encryptedChar.charCodeAt(0)-65);

decrypted += decryptedCharacter;

}

}

}

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

Столичный доктор. Том III

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

Отвергнутая невеста генерала драконов

Лунёва Мария
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Отвергнутая невеста генерала драконов

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Ротмистр Гордеев

Дашко Дмитрий Николаевич
1. Ротмистр Гордеев
Фантастика:
фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Виконт. Книга 2. Обретение силы

Юллем Евгений
2. Псевдоним `Испанец`
Фантастика:
боевая фантастика
попаданцы
рпг
7.10
рейтинг книги
Виконт. Книга 2. Обретение силы

Темный Лекарь 2

Токсик Саша
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 2

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Комбинация

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

Кодекс Охотника. Книга XXV

Винокуров Юрий
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XXV

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона