Шрифт:
initGame;
stop;
function initGame {
// Определяется расположение и расстояние между элементами.
topRowLoc = 60;
leftColLoc = 280;
roghtColLoc = 390;
horizSpace = 21;
vertSpace = 23;
solutionx = 336;
solutiony = 320;
// Создается произвольная последовательность решения.
solution = new Array;
for(i=0;i<5;i++) {
solution.push(int(Math.Random*5));
}
// Инициализируются переменные.
rows = new Array;
row = 0;
// Устанавливается первый ряд.
createRow;
}В начале каждой попытки функция createRow создает пять пустых мест и определяет их положение. Вдобавок устанавливается новый клип done, который располагается справа (рис. 14.4).
function createRow {
// Создается новый ряд из пяти пустых мест.
for(i-0;i<5;i++) {
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;
}
}
}Когда игрок проигрывает, функция showSolution создает пять новых экземпляров клипа и с их помощью отображает правильный вариант. В ролике, размещенном на Web-сайте, это решение располагается в нижней части игрового поля.
function showSolution {
// Размещаем правильный вариант внизу экрана.
for(i=0;i<5;i++) {
attachMovie("rock","solution"+i,1001+i);
clip = _root[“solution”+i];
clip._x = solutionx + i*horizSpace;
clip._y = solutiony;
clip.foroAndStop(solution[i]+2);
}
}На рис. 14.6 показан фрагмент ролика, когда игра уже проиграна. Функция showSolution поместила правильную последовательность (решение) внизу экрана.
Единственный оставшийся фрагмент кода – небольшой сценарий, прикрепленный к кнопке в каждом клипе «rock». Его задача состоит в том, чтобы переключать цвета один за другим и возвращаться к первому кадру (пустому месту), если пользователь щелкнул определенное число раз. Этот код также проверяет свойство active, чтобы убедиться, что ряд – текущий.
on (press) {
if (active) {
f = _currentFrame+1;
if (f > 6) f = 1;
gotoAndStop(f);
}
}
К сведению
Не забудьте присвоить последним двум кадрам клипа «rock» метки «white» и «black». Также обязательно поместите кнопку Done внутрь клипа «done», которому потом необходимо присвоить имя «done» в панели Linkage Properties. К сожалению, это необходимо, так как ActionScript не может динамически создавать кнопки сами по себе. Считайте, что клип «done» – это просто «обертка» для кнопки Done.
Другие возможности
Важно помнить о том, что если вы хотите изменить какие – либо элементы игры, надо соответственно подкорректировать константы, представленные в начале кода. Если вы не будете о этом забывать, с игрой можно делать практически что угодно.
Чтобы изменить уровень сложности игры попробуйте изменить количество попыток угадать решение. Также можно увеличить или уменьшить число цветов и мест для них.Йога
Исходный файл: Pegs.fla
Классическая игра "Йога" известна уже тысячи лет. Современные версии сделаны из дешевого пластика. С развитием Web-технологий появился и виртуальный вариант этой игры.
Для игры требуется решетка с отверстиями для колышков (рис. 14.7). Колышки расположены во всех отверстиях, кроме одного. Игрок должен взять один колышек и "перепрыгнуть" через другой, при этом попасть на пустое место. Колышек, через который "перепрыгнули", при этом удаляется. Игра продолжается до тех пор, пока нельзя будет сделать больше ни одного передвижения.