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

Основная сцена первый ключевой кадр:

k = 1;
l = getProperty(kn, _height);
// к - номер слоя для дубликата символа
// l - расстояние между дубликатами сивола
// первые два цикла размещают на поле экземпляры символа p (с кнопками)
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("kn", "kn"+String(i)+String(j), k++);
setProperty("kn"+String(i)+String(j), _x, j*(l+2)+30);
setProperty("kn"+String(i)+String(j), _y, i*(l+2)+60);
}
}
// вторые два цикла размещают на поле экземпляры символа к
// (они будут менять свою видимость)
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("pl", "pl"+String(j)+String(i), k++);
setProperty("pl"+String(j)+String(i), _x, j*(l+2)+30);
setProperty("pl"+String(j)+String(i), _y, i*(l+2)+60);
setProperty("pl"+String(j)+String(i), _visible, 0);
}
}
// создание массива
mas = new Array();
for (i=1; i<=8; i++) {
mas[i] = new Array();
for (j=1; j<=8; j++) {
mas[i][j] = 0;
}
}
// kolvo - количество сделанных ходов
kolvo = 0;
// загрузка задания
// num - номер выполняемого задания
num = 1;
loadMovieNum("obr"+num+".swf", 150);

Основная сцена третий ключевой кадр (процедура изменения узора):

for (i=1; i<=8; i++) {
if (mas[i][y] == 1) {
setProperty("pl" add i add y, _visible, "0");
mas[i][y] = 0;
} else {
setProperty("pl" add i add y, _visible, "1");
mas[i][y] = 1;
}
}
for (j=1; j<=8; j++) {
if (mas[x][j] == 1) {
setProperty("pl" add x add j, _visible, "0");
mas[x][j] = 0;
} else {
setProperty("pl" add x add j, _visible, "1");
mas[x][j] = 1;
}
}
if (mas[x][y] == 1) {
setProperty("pl" add x add y, _visible, "0");
mas[x][y] = 0;
} else {
setProperty("pl" add x add y, _visible, "1");
mas[x][y] = 1;
}
// Проверка получен ли нужный узор
// Изначально Ok=0, если при проверке хоть один элемент массива
// не равен соответствующему в образце, то OR меняет значение
Ok = 0;
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
if (mas[i][j] != _level150.sample[i][j]) {
Ok = 1;
}
}
}
if (Ok == 0) {
Otvet = "Узор получен!";
Otvet3 = _level150.zzz;
Otvet5 = int(Otvet3/(kolvo+1)*100);
}
kolvo = kolvo+1;
gotoAndStop(2);

Файл образца, Основная сцена первый ключевой кадр (построение узора образца):

// name - имя узора, obr - строковая переменная
// хранящая "код узора"
name = "ступеньки";
obr = new String();
obr = obr+"10000000";
obr = obr+"01000000";
obr = obr+"00100000";
obr = obr+"00010000";
obr = obr+"00001000";
obr = obr+"00000100";
obr = obr+"00000010";
obr = obr+"00000001";
// преобразование строки obr в массив
// z - индекс символа строки obr т.к. индекс начинается с нулевого значения
z = 0
z = 0;
sample = new Array();
for (i=1; i<=8; i++) {
sample[i] = new Array();
for (j=1; j<=8; j++) {
sample[i][j] = obr.charAt(z);
z = z+1;
}
}
// дублирование символов, создание игрового поля
k = 1;
l = getProperty(kv, _height);
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("fon", "fon"+String(i)+String(j), k++);
setProperty("fon"+String(i)+String(j), _x, j*(l+2)+350);
setProperty("fon"+String(i)+String(j), _y, i*(l+2)+130);
}
}
// дублирование символов, создание узора
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
duplicateMovieClip("kv", "kv"+String(i)+String(j), k++);
setProperty("kv"+String(i)+String(j), _x, j*(l+2)+350);
setProperty("kv"+String(i)+String(j), _y, i*(l+2)+130);
}
}
// изменение видимостей символов узора в соответствии со сформированным массивом
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
if (sample[i][j] == 1) {
setProperty("kv" add i add j, _visible, "1");
} else {
setProperty("kv" add i add j, _visible, "0");
}
}
}
// вычисление минимального кол-ва ходов
zzz = 0;
for (i=1; i<=8; i++) {
for (j=1; j<=8; j++) {
// summa - сумма всех элементов массива, сопряженного с полем
summa = 0;
for (u=1; u<=8; u++) {
summa = summa + sample[i][u]
}
for (u=1; u<=8; u++) {
summa = summa + sample[u][j]
}
if (sample[u][j]==1) {
summa = summa - 1;
}
ost = summa % 2;
if (ost ==1) {
zzz = zzz + 1;
}
}
}

Кнопка игрового поля :

on (release) {
x1 = getProperty(_,_xmouse);
y1 = getProperty(_,_ymouse);
x = Math.round((x1-30)/(l+2));
y = Math.round((y1-60)/(l+2));
call("action");
}

Кнопка очистки поля:

on (release) {
kolvo = 0;
for (i=1; i<=8; i++){
for (j=1; j<=8; j++) {
mas[i][j] = 0;
setProperty("pl"+String(j)+String(i), _visible, 0);
}
}
otvet = "";
Otvet3 = "";
Otvet5 = "";
gotoAndStop(2);
}

Кнопка перемещения к следующему узору:

on (release) {
num = num+1;
loadMovieNum("obr"+num+".swf", 150);
}