Дедукция
В начале каждой попытки функция createRow создает пять пустых мест и определяет их положение. Вдобавок устанавливается новый клип done, который располагается справа (рис. 14.4).
function createRow() {     // Создается новый ряд из пяти пустых мест.     attachMovie("rock", "rock" + row + "-" + i, row * 10 + i);     clip = _root["rock" + row + "-" + i];     clip._x = leftColLoc + i * horizSpace;     clip._y = topRowLoc + row * vertSpace;     clip.active = true;     // Создается кнопка Done.     attachMovie("done", "done", 1000);     _root.done._x = rightColLoc + 20;     _root.done._y = topRowLoc + row * vertSpace; }Когда игрок щелкает по кнопке Done, вызывается функция doneGuess. Сначала пять кнопок в текущем ряду становятся неактивными. В функции createRow свойству active каждого клипа было присвоено значение true. Теперь же этому свойству присваивается значение false (1). Код, прикрепленный к каждой кнопке, с помощью этого свойства определяет, можно ли щелкнуть по кнопке или нет.
В массиве temp содержатся номера каждого цвета последовательности (2). Например, если даны два первых цвета, один четвертый и два пятых, массив будет выглядеть следующим образом: [2.0.0.1.2].
Следующий цикл проверяет, сколько цветов точно совпадают с предопределенным расположением (3). Если были найдены совпадения, числа в массиве temp уменьшаются. То есть теперь в этом массиве отображаются те цвета, совпадения с которыми еще надо найти.
Следующий цикл проверяет несовпавшие цвета в последовательности игрока и определяет, какие из этих цветов находятся в массиве temp (4). Подсчитав, можно выяснить, сколько цветов правильно угаданы, но помешены не на свое место.
Следующие два цикла создают белые и черные камешки, которые будут соответствовать числу правильно угаданных цветов и числу угаданных цветов, расположенных не на своем месте (5).
Кнопка Done удаляется, так что теперь она не будет появляться в каждой строке (6). Когда пользователю дается следующая попытка, создается новая кнопка Done.
В конце функции проверяется, совпадают ли все пять цветов или нет (7). Если да, то ролик переходит к кадру "win". В противном случае код проверяет, была ли эта попытка десятой (последней), и если так, ролик перейдет к кадру "lose", иначе для следующей попытки вызывается функция createRow.
function doneGuess() {     numRightSpot = 0;     numRightColor = 0;     //(1)  Пять кнопок становятся неактивными,     for (i = 0; i < 5; i++) {         _root["rock" + row + "-" + i].active = false;     }     //(2)  Определяем, сколько имеется кнопок одного цвета,     temp = [0, 0, 0, 0, 0];     for (i = 0; i < 5; i++) {         temp[solution[i]]++;     }     //(3) Выясняем, сколько цветов правильно угадано,     for (i = 0; i < 5; i++) {         color = _root["rock" + row + "-" + i]._currentFrame - 2;         if (color == solution[i]) {             numRightSpot++;             temp[color]--;         }     }     //(4) Проверяем, сколько цветов угадано,     //но находится не на своих местах.     for (i = 0; i < 5; i++) {         color = _root["rock" + row + "-" + i]._currentFrame– 2;         if (color != solution[i]) {             if (temp[color] > 0) {                 numRightColor++;                 temp[color]--;             }         }     }     //(5) Создаем белые камешки.     level = row * 10 + 5;     x = rightColLoc;     for (i = 0; i < numRightSpot; i++) {         attachMovie("rock", "white rock" + level, level);         clip = _root["white rock" + level];         clip.gotoAndStop("white");         clip._x = x;         clip._y = topRowLoc + row * vertSpace;         level++;         x += horizSpace;     }     // Создаем черные камешки.     for (i = 0; i < numRightSpot; i++) {         attachMovie("rock", "black rock" + level, level);         clip = _root["black rock" + level];         clip.gotoAndStop("black");         clip._x = x;         clip._y = topRowLoc + row * vertSpace;         level++;         x += horizSpace;     }     //(6) Удаляем кнопку Done.     done.removeMovieClip()     //(7) Выясняем, выиграл ли игрок,     if (numRightSpot == 5) {         gotoAndPlay("win");     }     else {         row++;         // Проверяем, проиграл ли игрок,         if (row >= 10) {             showSolution();             gotoAndPlay("lose");         }         else {             createRow();         }     } }