Листенеры - это новое добавление версии Flash MX. Листенер сообщает 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();
// Создаем случайную строку,
function createLetterMap() {
do {
// Повторяем, пока не будет найдена корректная карта.
letterMap ="";
for (var i=0;i
do {
// Повторяем пока не выбрана буква
r = Math.floor(Math.random()*26);
//Случайное число,
с = String.fromCharCode(r+65);
//Конвертируем в букву.
} while (letterMap.indexOf(с) > -1);
letterMap += с;
// Проверяем верность карты,
bad = false; forfvar i=0;i
if (letterMap.charCodeAt(i) == i+65) {
bad = true;
// Буква в разрешенной позиции.
break;}
} } while (bad);
}
function showPhrase() {
encrypted = "";
decrypted = "";
for (var i = 0; i < phrase.length; i++) {
// Значение буквы в этой позиции,
с = phrase.toUpperCase().charAt(i);
if ((" .-,'").indexOf(c)>-1) {
// Задаем пустое место.
encrypted += с;
decrypted += с;
} else {
// Используем карту для поиска зашифрованной буквы.
encryptedChar = letterMap.charAt(с.charCodeAt(0)-65);
encrypted += encryptedChar;
// Используем вТОрую карту для поиска расшифрованной
decryptedCharacter = userMap charAt(encryptedChar.charCodeAt(0)-65);
decrypted += decryptedCharacter;
}}
}
function getLetter() {
// Считываем ascii код и код клавиатуры.
var ascii = Key.getAscii();
var code = Key.getCode() ;
// Передвигаем курсор,
if (code == Key.LEFT) {
charpos--;
if (charpos < 0) charpos = 0;
} else if (code == Key.RIGHT) {
charpos++;
if (charpos > phrase.length-1) charpos = phrase.length-1;
} else {
// Считываем клавиши.
var keyChar = String.fromCharCode(ascii);
keyChar = keyChar.toUpperCase();
// Убеждаемся, что была нажата буква.
if ((keyChar >= "A") and (keyChar
// Считываем символ из фразы.
phraseChar = phrase.toUpperCase().charCodeAt(charpos)- 65;
// Если это буква.
if ((phraseChar >= 0) and (phraseChar < 26)) {
// Получаем ее значение в карте
letterNum = letterMap.charCodeAt(phraseChar)-65;
// Заменяем букву во второй карте.
userMap = replaceChar (userMap, letterNum,keyChar) ,
// Обновляем фразу showPhrase();
//Проверяем, не окончена ли игра,
if (phrase.toUpperCase() == decrypted) {
gotoAndStop("game over");
}}
}}
// Обновляем курсор.
showCursor();
}
// Заменяем букву в строке.
function replaceChar(mainString, num, newchar) {
newString = mainString.substring(0,num)+ newchar +mainString.substring(num+1,mainString.length) ;
return(newString);
}
function showCursorf) {
// Оба поля устанавливаем невыделенным шрифтом.
plainFormat = new TextFormat();
plainFormat.bold = false;
decryptedText.setTextFormat(plainFormat);
encryptedText.setTextFormat(plainFormat);
// Одну букву выделяем полужирным.
cursorFormat = new TextFormat();
cursorFormat.bold = true;
decryptedText.setTextFormat(charpos,cursorFormat);
encryptedText.setTextFormat(charpos,cursorFormat);